PAYSSION

Payssion介绍

Payssion使用流程

1. 注册开通账户

单击注册开通账户 验证邮箱

2. 登陆后添加应用

登录后单击左边应用,然后添加应用。应用创建成功后后我们会安排审核并在1-3个工作日通知你。如果收到通知应用已经激活,打开应用后即可看到接入所需的参数,包括api_keysecret_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

下载链接:

opencart 3.x plugin

opencart 2.3 plugin

opencart 2.0-2.2 plugin

opencart 1.5.x plugin

opencart 1.4.8-1.4.9 plugin

Prestashop

下载链接:Prestashop plugin

WooCommerce

请打开需要使用的支付方式即可,不要尝试打开payssion这个支付方式(仅用于设置接入参数)

下载链接:WooCommerce plugin

Zencart

下载链接:Zencart plugin

Magento

下载链接: Magento plugin

Magento2.0.x plugin

Magento2.3-2.4 plugin

shoplazza

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 appsCreate app,输入app名称Paysion,选择你的邮箱; shopify create app

2)单击Configure Admin API scopes,勾选Orderswrite_ordersread_orders权限,单击install appshopify configure admin api scopes shopify configure admin api scopes

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

shopify reveal token once

4)打开https://shopify.payssion.com/install,填写如下参数后单击Submit

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结尾。

shopify add payment method

如果你需要添加klarna支付方式,需要找到Settings » CheckoutForm options,然后勾选Full nameRequire first and last nameShipping address phone numberRequire

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(订单状态页面)

shopify 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_keyapi_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另外注册进行测试.

支付测试

  1. 使用payssion_test作为pm_id创建支付。

  2. 选择 Mark as Completed(支付成功),或者其他支付状态.

  3. 检查你的return_urlnotify_url收到的参数,并检验签名以及金额是否正确,订单状态是否更新为对应的状态.

API Reference

API请求可以通过Postman来模拟 Run in Postman

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

支付方式logo下载链接

Payment Method特殊支付接入说明

klarna需要传入以下参数billing_addressorder_items。需要注意如果是FORM创建交易,请将billing_address和order_items的json数据用base64编码。

1. billing_address json object类型

参数 类型 是否必填 参数说明
city string 必填 城市
country string 必填 2位国家码,比如DE
email 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 必填 商品类型 :physicaldigitaldiscountshipping, 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"
}