Payssion介绍
Payssion使用流程
1. 注册开通账户
单击注册开通账户 验证邮箱
2. 登陆后添加应用
登录后单击左边应用,然后添加应用。应用创建成功后后我们会安排审核并在1-3个工作日通知你。如果收到通知应用已经激活,打开应用后即可看到接入所需的参数,包括api_key和secret_key.
3. 技术接入
技术接入分三种形式:
1) FORM表单
网站接入可以采用此种方式,接入形式比WEB API简单,容易上手。
2) WEB API
网站以及手机app可以使用此种方式。
3) Plugins插件
目前支持opencart, Prestashop, WooCommerce, zencart, magento, ECSHOP插件。
4) Mobile SDK
目前支持android平台。
4. 调试上线
调试主要分两个步骤:
1) 创建订单测试
编码接入完成后即可自行测试创建交易,如果创建失败可以看到相应的错误提示。
2) 支付通知测试
订单的最终支付状态以Payssion的后台通知为准。当订单支付状态发生变化时,Payssion后台会自动通知商户提供的Notify Url(具体见应用设置)。 在测试后台通知前,商户需要提前完成支付通知的处理(包括签名验证),之后可联系Payssion技术进行支付通知测试。
支付集成
Form表单集成
线上环境请将网址改为 https://www.payssion.com/payment/create.html。其中api_sig的生成规则请参考签名规则中的Direct Api创建交易签名。
测试环境Form代码示例:
<form name="payssion_payment" action="http://sandbox.payssion.com/payment/create.html" method="post">
<input type="hidden" name="api_key" value="5963a4c1c35c2a8e">
<input type="hidden" name="api_sig" value="d6229c11afb870e5e1551d6c45f5c2ab">
<input type="hidden" name="pm_id" value="alipay_cn">
<input type="hidden" name="order_id" value="123">
<input type="hidden" name="description" value="Charge for test">
<input type="hidden" name="amount" value="1.00">
<input type="hidden" name="currency" value="USD">
<input type="hidden" name="return_url" value="http://sandbox.payssion.com/demo/afterpayment">
<input type ="submit" value ="Submit">
</form>FORM支付流程如下:
1、构造请求数据
商户根据Payssion提供的接口规则,准备需要传输的数据以及通过程序生成的签名。
2、提交form表单
将1中构造的数据通过http form表单提交方式传递给Payssion。
3、校验数据,创建交易
Payssion根据商户传来的数据校验商户的信息以及签名。
4、跳转到支付页面
Payssion根据商户传来的支付方式信息跳转到相应的支付页面。
5、用户完成支付
用户输入相关支付信息完成支付。
6、通知支付状态信息
第三方支付将该笔订单的支付状态信息通知Payssion。
7、异步通知支付状态信息
Payssion回调商户的notify_url,并通过post方式将订单信息(包含支付状态)传递给商户。
8、更新订单状态
商户根据Payssion传来的订单状态信息更新本地的订单状态。
9、同步跳转到Payssion页面
用户完成支付后页面发生跳转到Payssion页面。
10、同步跳转到商户页面
在9后会跳转到商户指定的return_url页面。
API Libraries
PHP
下载链接:PHP Library
在PHP Library的samples目录下包含了创建交易以及支付异步通知的代码示例。
Shopping Cart购物车系统
Payssion目前已针对主流开源shopping cart开发了相应的插件:
opencart
下载链接:
Prestashop
下载链接:Prestashop plugin
WooCommerce
请打开需要使用的支付方式即可,不要尝试打开payssion这个支付方式(仅用于设置接入参数)
下载链接:WooCommerce plugin
Zencart
下载链接:Zencart plugin
Magento
下载链接: Magento plugin
shoplazza
WHMCS
下载链接:WHMCS gateway
ECSHOP
下载链接:ECSHOP plugin
HostBill
下载链接:HostBill plugin
Shopify
shoppify一共分三个步骤:1.创建app,2.添加Payssion支付方式,3.脚本配置。需要注意每个步骤都不能少。
另外需要注意用户下单选择payssion的支付方式后该交易就会记录在shopify后台orders中并显示为pending状态(未付款),等客户付款后order的状态会更新为paid。
1. 创建app
在你的shopify后台找到Settings » Apps and sales channels。
1) 依次单击Develop apps,Create app,输入app名称Paysion,选择你的邮箱;

2)单击Configure Admin API scopes,勾选Orders的write_orders和read_orders权限,单击install app;

3)单击Reveal token once,拷贝复制Admin API access token(注意该页面只有第一次打开可以复制)

4)打开https://shopify.payssion.com/install,填写如下参数后单击Submit。
- shopify店铺域名
shopify domain - 上面第三步
shopify app的Admin API access token - Payssion账户里app的
API Key和Secret Key(注意这里不是shopify app的) - pending订单关闭选项(用户下单选择payssion的支付方式后该交易就会记录在shopify后台
orders中并显示为pending状态(未付款),如果你选择自动关闭pending订单,系统会自动cancel超过时间限制未付款的pending订单)
2. 添加Payssion支付方式
在你的shopify后台找到Settings » Payments,在Manual payment methods区域选择Create custom payment method,然后在Name of the custom payment method中输入支付方式名称+ via Payssion(例如Alipay via Payssion),注意必须以via Payssion结尾。

如果你需要添加klarna支付方式,需要找到Settings » Checkout的Form options,然后勾选Full name的Require first and last name和Shipping address phone number的Require。
| pm_id | Custom Payment Method |
|---|---|
| alipay_cn | Alipay via Payssion |
| tenpay_cn | WeChat Pay via Payssion |
| unionpay_cn | Unionpay via Payssion |
| kakaopay_kr | KakaoPay via Payssion |
| creditcard_kr | South Korea Credit Card via Payssion |
| ebanking_kr | South Korea Internet Banking via Payssion |
| payco_kr | PAYCO via Payssion |
| ssgpay_kr | SSG Pay via Payssion |
| samsungpay_kr | Samsung Pay via Payssion |
| upi_in | UPI via Payssion |
| wallet_in | Airtel money/PhonePe/OLA Money/MobiKwik via Payssion |
| ebanking_in | India Net Banking via Payssion |
| creditcard_in | India Credit/Debit Card via Payssion |
| enets_sg | eNETS via Payssion |
| paynow_sg | PayNow via Payssion |
| thaiqr_th | Thai QR via Payssion |
| promptpay_th | Promptpay via Payssion |
| truemoney_th | Truemoney via Payssion |
| shopeepay_th | ShopeePay Thailand via Payssion |
| fpx_my | FPX via Payssion |
| touchngo_my | Touch ‘n Go via Payssion |
| grabpay_my | Grabpay Malaysia via Payssion |
| boost_my | Boost via Payssion |
| dragonpay_ph | Dragonpay via Payssion |
| gcash_ph | GCash via Payssion |
| grabpay_ph | GrabPay Philippines via Payssion |
| ovo_id | OVO via Payssion |
| dana_id | DANA via Payssion |
| linkaja_id | LINKAJA via Payssion |
| atm_id | Indonesia ATM Transfer via Payssion |
| doku_id | DOKU via Payssion |
| atm_id | Indonesia ATM Transfer via Payssion |
| sofort | SOFORT via Payssion |
| giropay_de | Giropay via Payssion |
| ideal_nl | iDeal via Payssion |
| dotpay_pl | Dotpay via Payssion |
| p24_pl | Przelewy24 via Payssion |
| payu_pl | PayU Poland via Payssion |
| payu_cz | PayU Czechia via Payssion |
| bancontact_be | Bancontact via Payssion |
| multibanco_pt | Multibanco via Payssion |
| eps_at | EPS via Payssion |
| mybank | Mybank via Payssion |
| paybybank_gb | Pay by Bank app via Payssion |
| bankcard_tr | Turkish Credit/Bank Card via Payssion |
| qiwi | QIWI via Payssion |
| webmoney | Webmoney via Payssion |
| yamoney | Yandex.Money via Payssion |
| pix_br | PIX via Payssion |
| boleto_br | Boleto via Payssion |
| itau_br | Itaú Brasil via Payssion |
| bancodobrasil_br | Banco do Brasil via Payssion |
| creditcard_br | Brasil Credit Card via Payssion |
| oxxo_mx | OXXO via Payssion |
| bancomer_mx | Bancomer Mexico via Payssion |
| banamex_mx | Citibanamex via Payssion |
| santander_mx | Santander Mexico via Payssion |
| spei_mx | SPEI via Payssion |
| creditcard_mx | Mexico Credit Card via Payssion |
| mercadopago_mx | Mercadopago Mexico via Payssion |
| bcp_pe | BCP Peru via Payssion |
| interbank_pe | InterBank Peru via Payssion |
| pagoefectivo_pe | PagoEfectivo via Payssion |
| redcompra_cl | RedCompra via Payssion |
| webpay_cl | WebPay via Payssion |
| bancochile_cl | Banco de Chile via Payssion |
| pagofacil_ar | Pago Fácil via Payssion |
| rapipago_ar | Rapi Pago via Payssion |
| santander_ar | Santander Argentina via Payssion |
| redpagos_uy | Redpagos via Payssion |
| pse_co | PSE via Payssion |
| efecty_co | Efecty Colombia via Payssion |
| poli_au | Australia Bank Transfer via Payssion |
| ebanking_za | South Africa Online Banking via Payssion |
| creditcard_za | South Africa Credit Card via Payssion |
| fawry_eg | Fawry via Payssion |
3.脚本配置
在shopify后台的左下角菜单中,找到Settings » Checkout » Order status page(订单状态页面)

在Order status page中追加(不要覆盖原有代码)以下代码:
邮件通知配置(可选)
当用户下单后shopify会自动发送邮件提醒给客户邮箱(即使客户没有付款),建议修改邮件通知模板以避免误解。在你的shopify后台找到Settings » Notifications » Order confirmation,在底部找到以下代码(店铺语言不同看到的文字会不同。下面以英文为例,其他语言可以自行调整)
{% capture email_title %}Thank you for your purchase! {% endcapture %}
{% capture email_body %}
//这里省略部分原有代码
{% endif %}
{% endcapture %}替换为下面:
{% if financial_status == "pending" %}
{% capture email_title %}Pending order reminder {% endcapture %}
{% capture email_body %}
{% if requires_shipping %}
Hi {{ customer.first_name }}, we have not yet received payment for the order
{{ order_name }} and wanted to check you have all information about the product to complete the order. You can ignore this email if you have already paid.
{% endif %}
{% endcapture %}
{% else %}
{% capture email_title %}Thank you for your purchase! {% endcapture %}
{% capture email_body %}
//这里省略部分原有代码
{% endcapture %}
{% endif %}注意上面的替换只是替换通知内容的顶部一小部分,并非全部替换。另外替换后你可能需要根据店铺的语言将其中的文字调整成对应的文字。
purchase事件跟踪(可选)
如果需要对shopify交易添加purchase事件跟踪,请在上面第三步的脚本中添加以下脚本。需要注意只能跟踪到用户付款成功并返回的情况,如果用户付款成功但没有返回则无法跟踪到。另外非即时确认的支付方式(比如巴西现金支付boleto)需要在线下或其他应用中完成付款不存在返回的情况,也无法跟踪。由此可能导致Facebook Pixel的数据和实际付款成功的数据有差别。
Facebook Pixel可以参考如下(需将下面脚本中的fb_pixel_id=XXX中的XXX替换为你的pixel id):
<!-- Facebook Pixel Code -->
<script>
!function(f,b,e,v,n,t,s)
{if(f.fbq)return;n=f.fbq=function(){n.callMethod?
n.callMethod.apply(n,arguments):n.queue.push(arguments)};
if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0';
n.queue=[];t=b.createElement(e);t.async=!0;
t.src=v;s=b.getElementsByTagName(e)[0];
s.parentNode.insertBefore(t,s)}(window, document,'script',
'https://connect.facebook.net/en_US/fbevents.js');
if ('paid' == '{{ order.financial_status }}') {
fbq('init', 'your_fb_pixel_id');
fbq('track', 'Purchase', {
value: {{ checkout.subtotal_price | divided_by: 100.0 }},
currency: '{{ currency }}'
}, {eventID: '{{ order_number }}'});
}
</script>GA可以参考如下(需要另外初始化Google tag):
<script>
if ('paid' == '{{ order.financial_status }}') {
gtag("event", "purchase", {
transaction_id: "{{ order_number }}",
value: {{ checkout.subtotal_price | divided_by: 100.0 }},
currency: "{{ currency }}"
});
}
</script>Mobile SDK
Android SDK
下载链接:Android SDK
将libs下的PayssionSDK.jar拷贝到项目libs下,同时在AndroidManifest.xml文件中增加以下permission:
<uses-permission android:name="android.permission.INTERNET" />下面以MainActivity为例,对创建支付请求以及支付结果返回的处理做说明:
创建支付请求
Intent intent = new Intent(MainActivity.this, PayssionActivity.class);
intent.putExtra(PayssionActivity.ACTION_REQUEST,
new PayRequest()
.setAPIKey("5963a4c1c35c2a8e") //Payssion帐户API Key
.setAmount(amount) //订单金额
.setCurrency(currency) //货币
.setPMId(pm_id) //支付方式id
.setDescription("test") //订单说明
.setPayerEmail(payer_email) //付款人人邮箱
.setPayerName(payer_name)); //付款人姓名
MainActivity.this.startActivityForResult(intent, 0);支付结果返回
订单支付结果以Payssion服务器通知为准,当订单支付状态发生变化时Payssion服务器会自动通知到notify_url (应用设置时需要填写)。
重写MainActivity的onActivityResult方法:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
Log.v(this.getClass().getSimpleName(), "onActivityResult");
switch (resultCode) {
case RESULT_OK:
case PayssionActivity.RESULT_PENDING:
if (null != data) {
PayResponse response = (PayResponse)data.getSerializableExtra(PayssionActivity.RESULT_DATA);
if (null != response) {
//去服务端查询该笔订单状态,注意订单状态以服务端为准
} else {
//should never go here
}
}
break;
case PayssionActivity.RESULT_CANCELED:
//用户取消支付
break;
case PayssionActivity.RESULT_ERROR:
//支付发生错误
if (null != data) {
//获取错误信息描述
String des = data.getStringExtra(PayssionActivity.RESULT_DESCRIPTION);
Log.v(this.getClass().getSimpleName(), "RESULT_ERROR" + des);
}
break;
}
super.onActivityResult(requestCode, resultCode, data);
}Hosted Payment Page收款单页
线上环境请将网址改为 https://www.payssion.com/checkout/your_api_key,注意需将your_api_key替换成你应用的api_key。
api_sig的生成规则请参考签名规则中的Hosted Payment Page创建交易签名。
Code example in sandbox environment:
<form name="payssion_payment" action="http://sandbox.payssion.com/checkout/5f522cee9d2e995e" method="post">
<input type="hidden" name="api_sig" value="27a0309a01ed380e2c7fb9c6d383ff0a">
<input type="hidden" name="order_id" value="123">
<input type="hidden" name="description" value="Charge for test">
<input type="hidden" name="amount" value="1.00">
<input type="hidden" name="currency" value="USD">
<input type="hidden" name="return_url" value="http://sandbox.payssion.com/demo/afterpayment">
<input type="submit" class="button" value="click here to try this hosted page demo">
</form>Sandbox Testing测试环境测试
测试环境仅支持使用payssion_test作为pm_id的测试。在测试之前,需要在测试环境sandbox另外注册进行测试.
支付测试
使用
payssion_test作为pm_id创建支付。选择
Mark as Completed(支付成功),或者其他支付状态.检查你的
return_url和notify_url收到的参数,并检验签名以及金额是否正确,订单状态是否更新为对应的状态.
API Reference
Payment Request 创建交易
线上环境地址:
FORM表单地址为:https://www.payssion.com/payment/create.html
WEB服务API地址为:https://www.payssion.com/api/v1/payment/create
测试环境地址:
FORM表单地址为:http://sandbox.payssion.com/payment/create.html
WEB服务API地址为:http://sandbox.payssion.com/api/v1/payment/create
FORM表单或者WEB服务API创建交易时所有参数通过key-value POST形式提交。
| 参数 | 类型 | 是否必填 | 参数说明 |
|---|---|---|---|
| api_key | string | 必填 | 添加应用成功后可以看到该应用的api_key |
| pm_id | string | 必填 | 支付方式id: 例如 alipay_cn。详细pm_id请参考 |
| amount | string | 必填 | 付款金额: 例如 10.12 |
| currency | string | 必填 | 货币: 例如 USD。详细currency请参考 |
| description | string | 必填 | 付款描述: 例如 example.com #item. |
| order_id | string | 必填 | 商户订单号,最长64字符。默认不做唯一性限制。详细order_id请参考 |
| api_sig | string | 必填 | api签名。具体生成规则请参考 |
| return_url | string | 可选 | 支付返回后跳转的页面URL。可以在应用设置默认的return_url |
| payer_email | string | 可选 | 客户邮箱 |
| payer_name | string | 可选 | 客户姓名 |
{
"api_key": "5963a4c1c35c2a8e",
"pm_id": "alipay_cn",
"amount": "1.00",
"currency": "USD",
"order_id": "123",
"description": "test charge",
"api_sig":"d6229c11afb870e5e1551d6c45f5c2ab"
}创建交易响应
当数据请求到WEB服务API地址时,响应为json格式。当数据以FORM表单形式提交到FORM表单地址时,payssion会自动跳转到付款链接redirect_url。 以下以WEB服务API响应参数说明(json格式)
| 参数 | 类型 | 参数说明 |
|---|---|---|
| result_code | int | api请求结果: 例如200. 详细result_code请参考 |
| transaction | object | 交易信息 |
| redirect_url | string | 付款链接URL |
{
"redirect_url": "http:\/\/sandbox.payssion.com\/pay\/H427753617644653",
"transaction": {
"transaction_id": "H427753617644653",
"state": "pending",
"amount": "1.00",
"currency": "USD",
"pm_id": "alipay_cn",
"pm_name": "Alipay",
"order_id": "123"
},
"result_code": 200
}transaction
交易信息,主要字段有:
transaction_id:Payssion平台交易号
State:交易状态
amount:交易金额
currency:交易币种
amount_local:用户需支付的本地货币金额
currency_local:用户需支付的本地货币
order_id:商家订单号
注意:amount_local和currency_local为可选字段,只有在创建交易时的币种和用户实际支付的币种不一致时才会返回
Payment Details 交易查询
线上环境地址:
交易查询API地址为:https://www.payssion.com/api/v1/payment/getDetail
测试环境地址:
交易查询API地址为:http://sandbox.payssion.com/api/v1/payment/getDetail
所有参数通过key-value POST形式提交:
| 参数 | 类型 | 是否必填 | 参数说明 |
|---|---|---|---|
| api_key | string | 必填 | 应用ID。添加应用成功后可以看到该应用的api_key |
| transaction_id | string | 可选* | Payssion交易号。transaction_id和order_id至少提交一个 |
| order_id | string | 可选* | 订单号。transaction_id和order_id至少提交一个 |
| api_sig | string | 必填 | api签名。具体生成规则请参考 |
交易查询API响应参数说明(json格式)
| 参数 | 类型 | 参数说明 |
|---|---|---|
| result_code | int | api请求结果: 例如200. 详细result_code请参考 |
| transaction | object | 该笔支付的信息 |
响应示例:
{
"transaction":
{
"transaction_id":"F203853752614827",
"app_name":"demo",
"pm_id":"openbucks",
"currency":"USD",
"order_id":"",
"amount":"1.00",
"paid":"0.00",
"net":"0.00",
"state":"pending",
"fee":"0.00",
"refund":"0.00",
"refund_fee":"0.00",
"created":1422985375,
"updated":1422985375
},
"result_code":200
}transaction
交易信息,主要字段有:
transaction_id:Payssion平台交易号
app_name:应用名称
pm_id:支付方式id,请联系Payssion技术索取pm_id
currency:交易币种
order_id:商家订单号
amount:订单金额
paid:已支付金额
net:扣除手续费后的净额
state:支付状态。详细支付状态请参考
fee:费用
refund:已退款金额
refund_fee:退款费用
created:交易创建时间
updated:交易更新时间
Refund Request 退款请求
You must submit the data to the following URLs:
线上环境地址:
退款API地址为: https://www.payssion.com/api/v1/refunds
测试环境地址:
退款API地址为: http://sandbox.payssion.com/api/v1/refunds
所有参数通过key-value POST形式提交:
| 参数 | 类型 | 是否必填 | 参数说明 |
|---|---|---|---|
| api_key | string | 必填 | 应用api_key。添加应用成功后可以看到该应用的api_key |
| transaction_id | string | 必填 | Payssion交易号 |
| amount | double | 必填 | 退款金额: 例如 10.12 |
| currency | string | 必填 | 货币: 例如 USD |
| track_id | string | 选填 | 退款的唯一ID,最长64个字符 |
| api_sig | string | 必填 | api签名。具体生成规则请参考 |
$ curl http://sandbox.payssion.com/api/v1/refunds \
-d api_key=5f522cee9d2e995e \
-d api_sig=193b1f3586f0b705820eae9a787ea2ec \
-d transaction_id=I821474164059947 \
-d amount=0.01 \
-d currency=USD退款API响应参数说明(json格式)
| 参数 | 类型 | 参数说明 |
|---|---|---|
| result_code | int | api请求结果: 例如200. 详细result_code请参考 |
| refund | object | 退款信息 |
响应示例:
{
"refund": {
"transaction_id": "H427753617644653",
"original_transaction_id": "I821474164059947",
"state": "refund_pending",
"amount": "0.01",
"currency": "USD",
"created": 1534905882,
"updated": "1534905882"
},
"result_code": 200
}Notifications 支付结果通知
页面跳转同步通知
Return URL仅作返回跳转使用,仅回传transaction_id和order_id。具体支付状态更新请依赖 Notify URL的异步回调,我们会在支付状态发生变化后第一时间通过Notify URL回调通知商户(正常情况下Notify URL的回调回发生在Return URL之前)。
1、买家在付款后(可能付款失败)跳转回商户指定的同步通知页面(参数return_url),Payssion会在商户的同步通知页面后面添加如下参数:
transaction_id
order_id
2、该页面中获得参数的方式,需要使用GET方式获取,如request.QueryString(“order_id”)。
服务器异步通知
1、交易创建后的默认状态pending,正常情况下只有当支付状态发生变化时(也就说状态变成非pending时),Payssion会主动回调商户的通知页面Notify URL。
主要参数如下:
| 参数 | 类型 | 参数说明 |
|---|---|---|
| app_name | string | 应用名称 |
| pm_id | string | 支付方式id: 例如 alipay_cn. 详细pm_id请参考 |
| transaction_id | string | Payssion平台交易号,非商户订单号 |
| order_id | string | 商家订单号 |
| amount | string | 订单金额 |
| paid | string | 已支付金额 |
| net | string | 扣除手续费后的净额 |
| fee | string | 手续费 |
| currency | string | 交易币种 |
| description | string | 订单描述 |
| state | string | 支付状态 |
| notify_sig | string | 异步通知签名,具体规则参考签名规则 |
{
"app_name":"your app name",
"pm_id":"alipay_cn",
"transaction_id":"P205928236362773",
"order_id":"123",
"amount":"1.00",
"paid":"1.00",
"net":0.93,
"fee":"0.07",
"currency":"CNY",
"description":"order description",
"state":"completed",
"notify_sig":"ccfdbe3c75f7f79c3f3695c39f034442"
}2、 Payssion主动发起通知,该方式才会被启用。
3、 只有在Payssion的交易管理中存在该笔交易,且发生了交易状态的改变,Payssion才会通过该方式发起服务器通知。
4、服务器间的交互,不像页面跳转同步通知,可以在页面上显示出来,这种交互方式是不可见的。
5、 第一次交易状态改变时,不仅页面跳转同步通知页面会启用,而且服务器异步通知页面也会收到Payssion发来的处理结果通知。
6、程序执行完后只要http status code为200即认为通知成功。如果http status code不是200,Payssion会在接下来的48小时尝试多次通知,如果所有尝试都失败会邮件通知商家。
7、异步通知每笔交易最多尝试7次,第一次失败后间隔600秒再试尝试通知,之后依次间隔3600秒,3600秒,7200秒,7200秒,14400秒。7次都失败会发送通知失败的邮件到你的注册邮箱。
API Signature 签名
Direct Api创建交易签名
创建交易签名api_sig生成分两步骤:
1、将api_key, pm_id, amount, currency, order_id以及应用的secret_key字符串,以 “|”为分隔符串联成一个字符串
api_key|pm_id|amount|currency|order_id|secret_key
2、将第一步骤串联起来的的字符串经md5加密生成最终的api_sig(小写)
具体代码示例:
$msg = implode("|", array($api_key, $pm_id, $amount, $currency,$order_id, $secret_key));
$api_sig = md5($msg);Hosted Payment Page创建交易签名
Hosted Payment Page创建交易签名api_sig生成分两步骤:
1、将api_key, amount, currency, order_id以及应用的secret_key以 “|”为分隔符串联成一个字符串
api_key|amount|currency|order_id|secret_key
2、将第一步骤串联起来的的字符串经md5加密生成最终的api_sig(小写)
具体代码示例:
$msg = implode('|', array($api_key, $amount, $currency, $order_id, $secret_key));
$api_sig = md5($msg);refund退款请求签名
退款请求签名api_sig生成分两步骤:
1、将api_key, transaction_id, amount, currency以及应用的secret_key,以 “|”为分隔符串联成一个字符串
api_key|transaction_id|amount|currency|secret_key
2、将第一步骤串联起来的的字符串经md5加密生成最终的api_sig(小写)
具体代码示例:
$msg = implode('|', array($api_key, $transacion_id, $amount, $currency, $secret_key));
$api_sig = md5($msg);异步通知签名
异步通知签名notify_sig生成分两步骤:
1、将api_key, pm_id, amount, currency, order_id, state以及应用的sercret_key字符串,以 “|”为分隔符串联成一个字符串api_key|pm_id|amount|currency|order_id|state|secret_key
2、将第一步骤串联起来的的字符串经md5加密生成最终的notify_sig(小写)
具体代码示例:
$msg = implode("|", array($api_key, $pm_id, $amount, $currency,$order_id, $state, $secret_key));
$notify_sig = md5($msg);交易查询签名
交易查询签名api_sig生成分两步骤:
1、将api_key, transaction_id, order_id以及应用的sercret_key字符串,以 “|”为分隔符串联成一个字符串
api_key|transaction_id|order_id|secret_key
2、将第一步骤串联起来的的字符串经md5加密生成最终的notify_sig(小写)
具体代码示例:
$msg = implode("|", array($api_key, $transaction_id, $order_id, $secret_key));
$api_sig = md5($msg);付款单页创建交易签名
创建交易签名api_sig生成分两步骤:
1、将api_key, amount, currency, order_id以及应用的secret_key字符串,以 “|”为分隔符串联成一个字符串
api_key|amount|currency|order_id|secret_key
2、将第一步骤串联起来的的字符串经md5加密生成最终的api_sig(小写) 具体代码示例:
$msg = implode("|", array($api_key, $amount, $currency,$order_id, $secret_key));
$api_sig = md5($msg);Order ID
order_id是订单的ID,用来识别具体是哪个订单的付款。需要注意 order_id默认不做唯一性限制,也就是说你可以用相同的order_id创建多个payments。如果你需要对order_id做唯一性限制请邮件联系我们技术团队设置。
Payment State
| 支付状态 | 说明 |
|---|---|
| error | 支付发生错误 |
| pending | 未完成支付 |
| completed | 支付成功 |
| paid_partial | 部分支付,用户只支付了部分金额 |
| awaiting_confirm | 待确认,系统风控自动拦截 |
| failed | 支付失败 |
| cancelled | 交易被取消 |
| expired | 交易过期 |
| rejected | 交易被拒绝 |
| refunded | 退款成功 |
| refund_pending | 已申请退款,正在处理退款 |
| refund_error | 退款出错 |
| refund_failed | 退款失败 |
| refund_cancelled | 退款已取消 |
| chargeback | 拒付 |
Result Code
Payssion的result_code参考了HTTP状态码规范。总的来说,如果result_code是2xx范围的,则表示成功,4xx范围表示失败,5xx范围表示有错误.
| result_code | 描述 |
|---|---|
| 200 | 成功 |
| 400 | 参数错误 |
| 401 | merchant_id错误 |
| 402 | api签名错误 |
| 403 | app_name错误 |
| 405 | 支付方式错误 |
| 406 | currency错误 |
| 407 | amount错误 |
| 408 | language错误 |
| 409 | url错误 |
| 411 | secret key错误 |
| 412 | transaction_id错误 |
| 413 | 订单重复 |
| 414 | country错误 |
| 415 | 支付类型错误 |
| 417 | 付款金额太小 |
| 418 | 付款金额过大 |
| 420 | 请求方式错误 |
| 441 | 应用未激活 |
| 491 | 支付方式未开通 |
| 500 | 服务器错误 |
| 501 | 服务器繁忙 |
| 502 | 第三方错误 |
| 503 | 该服务不存在 |
PM ID
如果你没有在下面找到你需要的pm_id请联系你的客户经理。支付方式的logo请到Payment logos下载。
| Payment Method | pm_id | Coverage |
|---|---|---|
| FPX | fpx_my | Malaysia |
| eNets | enets_sg | Singapore |
| PayNow | paynow_sg | Singapore |
| E-banking | ebanking_th | Thailand |
| Doku | doku_id | Indonesia |
| ATM | atm_id | Indonesia |
| Alfamart | alfamart_id | Indonesia |
| Dragonpay | dragonpay_ph | Philippines |
| Globe Gcash | gcash_ph | Philippines |
| CherryCredits | cherrycredits | Global including South East |
| MOLPoints | molpoints | Global including South East |
| MOLPoints card | molpointscard | Global including South East |
| Alipay | alipay_cn | China |
| Tenpay | tenpay_cn | China |
| Unionpay | unionpay_cn | China |
| Gash | gash_tw | Taiwan |
| UPI | upi_in | India |
| Indian Wallets | wallet_in | India |
| India Netbanking | ebanking_in | India |
| India Credit/Debit Card | bankcard_in | India |
| South Korea Credit Card | creditcard_kr | South Korea |
| South Korea Internet Banking | ebanking_kr | South Korea |
| KakaoPay | kakaopay_kr | South Korea |
| PAYCO | payco_kr | South Korea |
| SSG Pay | ssgpay_kr | South Korea |
| Samsung Pay | samsungpay_kr | South Korea |
| onecard | onecard | Middle East & North Africa |
| Fawry | fawry_eg | Egypt |
| Santander Rio | santander_ar | Argentina |
| Pago Fácil | pagofacil_ar | Argentina |
| Rapi Pago | rapipago_ar | Argentina |
| bancodobrasil | bancodobrasil_br | Brazil |
| itau | itau_br | Brazil |
| Boleto | boleto_br | Brazil |
| bradesco | bradesco_br | Brazil |
| caixa | caixa_br | Brazil |
| Santander | santander_br | Brazil |
| BBVA Bancomer | bancomer_mx | Mexico |
| Santander | santander_mx | Mexico |
| oxxo | oxxo_mx | Mexico |
| SPEI | spei_mx | Mexico |
| redpagos | redpagos_uy | Uruguay |
| Abitab | abitab_uy | Uruguay |
| Banco de Chile | bancochile_cl | Chile |
| RedCompra | redcompra_cl | Chile |
| WebPay plus | webpay_cl | Chile |
| Servipag | servipag_cl | Chile |
| Santander | santander_cl | Chile |
| Efecty | efecty_co | Colombia |
| PSE | pse_co | Colombia |
| BCP | bcp_pe | Peru |
| Interbank | interbank_pe | Peru |
| BBVA | bbva_pe | Peru |
| Pago Efectivo | pagoefectivo_pe | Peru |
| BoaCompra | boacompra | Latin America |
| QIWI | qiwi | CIS countries |
| Yandex.Money | yamoney | CIS countries |
| Webmoney | webmoney | CIS countries |
| Bank Card (Yandex.Money) | yamoneyac | CIS countries |
| Cash (Yandex.Money) | yamoneygp | Russia |
| Moneta | moneta_ru | Russia |
| Alfa-Click | alfaclick_ru | Russia |
| Promsvyazbank | promsvyazbank_ru | Russia |
| Faktura | faktura_ru | Russia |
| Russia Bank transfer | banktransfer_ru | Russia |
| Turkish Credit/Bank Card | bankcard_tr | Turkey |
| ininal | ininal_tr | Turkey |
| bkmexpress | bkmexpress_tr | Turkey |
| Turkish Bank Transfer | banktransfer_tr | Turkey |
| Paysafecard | paysafecard | Global |
| Sofort | sofort | Europe |
| Giropay | giropay_de | Germany |
| EPS | eps_at | Austria |
| Bancontact/Mistercash | bancontact_be | Belgium |
| Dotpay | dotpay_pl | Poland |
| P24 | p24_pl | Poland |
| PayU | payu_pl | Poland |
| PayU | payu_cz | Czech Republic |
| iDeal | ideal_nl | Netherlands |
| Multibanco | multibanco_pt | Portugal |
| Neosurf | neosurf | France |
| Polipayment | polipayment | Australia & New Zealand |
Currency
下面是创建payments支持的货币列表
| Currency |
|---|
| AED |
| ARS |
| AUD |
| BGN |
| BHD |
| BRL |
| CAD |
| CHF |
| CLP |
| CNY |
| COP |
| CZK |
| DKK |
| EGP |
| EUR |
| GBP |
| GHS |
| HKD |
| HRK |
| HUF |
| IDR |
| ILS |
| INR |
| JPY |
| KES |
| KRW |
| KWD |
| MAD |
| MMK |
| MWK |
| MXN |
| MYR |
| NGN |
| NOK |
| NZD |
| OMR |
| PEN |
| PHP |
| PKR |
| PLN |
| QAR |
| RON |
| RSD |
| RUB |
| RWF |
| SAR |
| SEK |
| SGD |
| THB |
| TRY |
| TWD |
| TZS |
| UGX |
| USD |
| UYU |
| VND |
| XOF |
| ZAR |
| ZMW |
Payment Logos
Payment Method特殊支付接入说明
klarna需要传入以下参数billing_address和order_items。需要注意如果是FORM创建交易,请将billing_address和order_items的json数据用base64编码。
1. billing_address json object类型
| 参数 | 类型 | 是否必填 | 参数说明 |
|---|---|---|---|
| city | string | 必填 | 城市 |
| country | string | 必填 | 2位国家码,比如DE |
| string | 必填 | 邮箱 | |
| last_name | string | 必填 | 姓 |
| first_name | string | 选填 | 名 |
| phone | string | 必填 | 电话号码 |
| postal_code | string | 必填 | 邮编 |
| region | string | 必填 | 地区/州/省 |
| line1 | string | 必填 | 地址第一行 |
| line2 | string | 必填 | 地址第二行 |
{
"city":"Butzbach",
"country":"DE",
"email":"test@email.com",
"family_name":"lastname",
"given_name":"firstname",
"phone":"123123",
"postal_code":"35510",
"region":"Hessen",
"line1":"Schorbachstrasse 9",
"line2":"address 2"
}2. order_items json数组类型
需要注意order_items中各项加总后的总金额要和订单金额一致。 订单的总金额等于每个item(不包括shipping item和discount item)的amount之和 + shipping item的amount - discount item的amount
| 参数 | 类型 | 是否必填 | 参数说明 |
|---|---|---|---|
| type | string | 必填 | 商品类型 :physical,digital,discount,shipping, surcharge |
| name | string | 必填 | 商品名称 |
| quantity | integer | 必填 | 商品数量 |
| amount | double | 必填 | 该item的总金额,等于unit_price* quantity-discount_amount |
| unit_price | double | 必填 | 商品的含税单价 |
| tax_amount | string | 必填 | VAT税金额 |
| tax_rate | string | 必填 | VAT税税率 |
| discount_amount | double | 必填 | 优惠金额 |
[
{
"type":"digital",
"name":"software",
"quantity":1,
"amount":1.00,
"unit_price":1,
"tax_amount":0,
"tax_rate":0,
"discount_amount":0.00
},
{
"type":"physical",
"name":"clothes",
"quantity":1,
"amount":10.00,
"unit_price":10,
"tax_amount":0,
"tax_rate":0,
"discount_amount":0.00
},
{
"type":"shipping",
"name":"Standard",
"quantity":1,
"amount":1.54,
"unit_price":1.54,
"tax_amount":"0.26",
"tax_rate":20,
"discount_amount":0
},
{
"type":"discount",
"name":"Discount",
"quantity":1,
"unit_price":1.10,
"amount":1.10
}
]Credited In Settlement Currency
部分支付方式支持以实时以结算入账,这类交易的回调通知notification比标准的异步通知增加三个参数currency_settle, amount_local, currency_local格式如下:
| 参数 | 类型 | 参数说明 |
|---|---|---|
| app_name | string | 应用名称 |
| pm_id | string | 支付方式id: 例如 qiwi. 详细pm_id请参考 |
| transaction_id | string | Payssion平台交易号,非商户订单号 |
| order_id | string | 商家订单号 |
| amount | string | 货币转换后的金额 |
| paid | string | 货币转换后的付款金额 |
| net | string | 扣除手续费后的净额 |
| fee | string | 手续费 |
| currency | string | 币种,和currency_settle值一致 |
| currency_settle | string | 入账币种,可以以此来区分是否是实时以结算货币入账的情况 |
| amount_local | string | 创建交易的金额 |
| currency_local | string | 创建交易的币种 |
| description | string | 订单描述 |
| state | string | 支付状态 |
| notify_sig | string | 异步通知签名,具体规则参考签名规则 |
{
"app_name": "demo",
"pm_id": "qiwi",
"transaction_id": "Q622932517067708",
"order_id": "123",
"amount": "1.71",
"paid": "1.71",
"net": "1.26",
"fee": "0.45",
"currency": "USD",
"description": "test",
"currency_settle": "USD",
"amount_local": "100.00",
"currency_local": "RUB",
"state": "completed",
"notify_sig": "529b744c56ebddf8ec14ec08f36a5f9f"
}