接入流程

第一步:免费注册Payssion账户,验证邮箱
正式环境注册地址
http://www.payssion.com/register
测试环境注册地址
http://sandbox.payssion.com/register

注意:正式环境、测试环境是独立的,需要单独注册提交应用

第二步:后台提交网站/APP,审核后获取API_key、Secret_key

① 添加网站应用/APP,说明主营业务、目标市场以及需要接入的支付方式;
② 完善账户信息,需要提交身份证、联系方式等信息;
③ 审核通过后,API_key和Secret_key才能生效使用。

第三步:技术接入,主要有四种形式
HTTP FORM

网站接入可以采用此种方式,接入形式比WEB API简单,容易上手

WEB API库

网站以及手机APP可以使用此方式

Plugins插件

目前支持OpenCart、Prestashop、WooCommerce、Zencart、Magento、ECSHOP等多种插件。

Mobile SDK

下载安卓手机支付SDK。

第四步:测试完成,正式上线
创建订单测试

接入完成后即可自行测试创建交易,如果创建失败可以看到相应的错误提示。

支付通知测试

订单的最终支付状态以Payssion的后台通知为准。当订单支付状态发生变化时,Payssion后台会自动通知商户提供的Notify Url(具体见应用设置)。 在测试后台通知前,商户需要提前完成支付通知的处理(包括签名验证),之后可联系Payssion技术进行支付通知测试。

API REFERENCE

Payment Request

创建交易

线上环境地址
HTTP FORM提交地址为

https://www.payssion.com/payment/create.html

WEB服务API地址为

https://www.payssion.com/api/v1/payment/create

测试环境地址
HTTP FORM提交地址为

http://sandbox.payssion.com/payment/create.html

WEB服务API地址为

http://sandbox.payssion.com/api/v1/payment/create

HTTP FORM或者WEB服务API创建交易时所有参数通过key-value POST形式提交。

参数 描述 类型 是否必填 参数说明
api_key 应用ID string 必填 添加应用成功后可以看到该应用的api_key
pm_id 应用支付方式id string 必填 支付方式标识,统一为小写字符,如sofort
amount 支付金额 string 必填 小数点精确到后面两位
currency 货币 string 必填 如USD
description 订单描述 string 必填 最长256 字符
order_id 订单号 string 必填
api_sig 请求签名 string 必填 api接入签名验证, 具体生成规则参考
notify_url 异步通知 url string 可选
return_url 尚未完成支付或者支付失败时
页面跳转同步通知url
string 可选
success_url 支付成功后页面跳转同步通知url string 可选
language 语言 string 可选 如en
创建交易响应
创建交易响应参数说明(json格式)

参数 描述 类型 是否必填 参数说明
result_code 错误码 int 必填 API调用错误码
todo 支付操作 string 必填 完成支付需要进行的操作
return_url 支付跳转url string 可选 当todo值包含“redirect”,可将页面跳转到return_url让用户完成支付
device_support 当前的支付方式支持的设备 string 可选
transaction 该笔支付的信息 object 必填 交易信息
bankaccount 银行账户信息 object 可选 离线银行转账的银行账户信息

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 支付类型错误
420 请求方式错误
441 应用未激活
500 服务器错误
501 服务器繁忙
502 第三方错误
503 该服务不存在

todo

当有多个可选操作时以“|”为分隔符。
redirect: 跳转
instruct:支付操作指导,这里主要是对于离线银行转账时适用


device_support

可取值为“PC”,“MOBILE”,“TABLET”。当有多个选项时以“|”符号分割


transaction

交易信息,主要字段有: transaction_id:Payssion平台交易号
State:交易状态
amount:交易金额
currency:交易币种
amount_local:用户需支付的本地货币金额
currency_local:用户需支付的本地货币
trackid:商家订单号
subtrackid:其他订单跟踪信息
注意:amount_local和currency_local为可选字段,只有在创建交易时的币种和用户实际支付的币种不一致时才会返回


bankaccount

离线银行转账的银行账户信息,这里只要将按照”show_order”将一行账户信息字段展示给用户即可,具体字段参考下面的响应示例。

响应示例:
跳转

{
    "todo":"redirect",
    "return_url":"https:\/\/www.payssion.com.com\/E806897643289185",
    "device_support":"PC",
    "transaction":
        {
            "transaction_id":"E806897643289185",
            "state":"pending",
            "amount":"10.0",
            "currency":"BRL",
            "order_id":"",
            "sub_track_id":""
        },
    "result_code":200
}
                    

响应示例:
离线银行转账

{
    "todo":"instruct|redirect",
    "return_url":"https:\/\/www.payssion.com\/paylink\/E806909753906011",
    "device_support":"PC|MOBILE",
    "bankaccount":
        {
            "Banco":"Caixa Econ\u00f3mica Federal",
            "Benefici\u00e1rio":"DICLOMERC SERVI\u00c7OS T\u00c9CNICOS EIRELI- ME",
            "Ag\u00eancia":"1525 op 3",
            "Conta":"2640-0",
            "Referencia":"12345",
            "show_order":"Banco|Benefici\u00e1rio|Ag\u00eancia|Conta|Referencia"
        },
    "transaction":
        {
            "transaction_id":"E806909753906011",
            "state":"pending",
            "amount":"10.0",
            "currency":"BRL",
            "order_id":"",
            "sub_track_id":""
        },
    "result_code":200
}
                    

Payment Query

交易查询
线上环境地址
交易查询API地址为:

https://www.payssion.com/api/v1/payment/getDetail

测试环境地址

交易查询API地址为:http://sandbox.payssion.com/api/v1/payment/getDetail

所有参数通过key-value POST形式提交:

参数 描述 类型 是否必填 参数说明
api_key 应用ID string 必填 添加应用成功后可以看到该应用的api_key
transaction_id Payssion交易号 string 可选* transaction_id和order_id至少提交一个
order_id 订单号 string 可选* transaction_id和order_id至少提交一个
sub_track_id 其他跟踪信息 string 可选
api_sig 请求签名 string 必填 api接入签名验证, 具体可参考签名生成规则

交易查询API响应参数说明(json格式)

参数 描述 类型 是否必填 参数说明
result_code 错误码 int 必填 API调用错误码,参考创建交易时返回的错误码描述
transaction 该笔支付的信息 object 必填 交易信息

响应示例
{
    "transaction":
    {
        "transaction_id":"F203853752614827",
        "app_name":"demo",
        "pm_id":"openbucks",
        "currency":"USD",
        "trackid":"",
        "subtrackid":"",
        "amount":"1.00",
        "paid":"0.00",
        "net":"0.00",
        "state":"pending",
        "fees":"0.00",
        "fees_add":"0.00",
        "refund":"0.00",
        "refund_fees":"0.00",
        "created":1422985375,
        "updated":1422985375
    },
    "result_code":200
}                    
transaction

交易信息,主要字段有: transaction_id:Payssion平台交易号
app_name:应用名称
pm_id:支付方式id,请联系Payssion技术索取pm_id
currency:交易币种
trackid:商家订单号
subtrackid:其他订单跟踪信息
amount:订单金额
paid:已支付金额
net:扣除先后续费后净额
state:支付状态
fees:费用
fees_add:额外费用
refund:已退款金额
refund_fees:退款费用
created:交易创建时间
updated:交易更新时间

IPN Postback

页面跳转同步通知

1、买家在支付成功后会看到一个Payssion提示交易成功的页面,该页面会停留几秒,然后会自动跳转回商户指定的同步通知页面(参数 success_url, return_url), Payssion 会在商户的同步通知页面后面添加如下参数: transaction_id
state
order_id
sub_track_id

2、该页面中获得参数的方式,需要使用 GET 方式获取,如 request.QueryString(“order_id”)、$_GET[‘order_id’]。

3、该方式仅仅在买家付款完成以后进行自动跳转,因此只会进行一次。

4、该方式不是 Payssion主动去调用商户页面,而是Payssion的程序利用页面自动跳转的函数,使用户的当前页面自动跳转。

服务器异步通知

1、当支付状态发生变化时,Payssion会主动回调商户的通知页面(参考3.0 请求参数说明中的notify_url),并通过 POST 方式发送通知信息,因此该页面中获取参数的方式,如: request.Form(“order_id”)、$_POST[‘order_id’]。 主要参数如下: app_name:应用名称
pm_id:支付方式id,请联系Payssion技术索取pm_id
transaction_id: Payssion平台交易号,非商户订单号。
order_id:商家订单号
sub_track_id:其他订单跟踪信息
amount:订单金额
paid: 已支付金额
net: 扣除先后续费后净额
currency:交易币种
description:订单描述
state:支付状态
notify_sig: 异步通知签名,具体规则参考签名规则。

2、state :支付状态,主要取值如下:

支付状态 说明
error 支付发生错误
pending 未完成支付
completed 支付成功
paid_partial 部分支付,用户只支付了部分金额
failed 支付失败
cancelled 交易被取消
cancelled_by_user 用户取消支付
rejected_by_bank 银行拒绝
expired 交易失效
refunded 退款成功
refund_pending 已申请退款,正在处理退款
refund_failed 退款失败
chargeback 拒付

3、 Payssion主动发起通知,该方式才会被启用。

4、 只有在Payssion的交易管理中存在该笔交易,且发生了交易状态的改变,Payssion才会通过该方式发起服务器通知。

5、服务器间的交互,不像页面跳转同步通知,可以在页面上显示出来,这种交互方式是不可见的。

6、 第一次交易状态改变时,不仅页面跳转同步通知页面会启用,而且服务器异步通知页面也会收到Payssion发来的处理结果通知。

7、程序执行完后只要http status code为200即认为通知成功。如果http status code不是200,Payssion会在接下来的48小时尝试多次通知,如果所有尝试都失败会邮件通知商家。

Signature

创建交易签名

创建交易签名api_sig生成分两步骤:

1、将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);
          
异步通知签名

异步通知签名notify_sig生成分两步骤:

1、将api_key, pm_id, amount, currency, order_id, state以及应用的sercret_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字符串,以 “|”为分隔符串联成一个字符串

2、将第一步骤串联起来的的字符串经md5加密生成最终的notify_sig 具体代码示例:

$msg = implode("|", array($api_key, $transaction_id, $order_id, $secret_key));
$api_sig = md5($msg);
          

Web端接入

接入方式

HTTP FORM接入

Form 代码示例

<form name="cashU_payment_info" action="https://www.payssion.com/payment/create.html" method="post">
    <input type="hidden" name="api_key" value="5963a4c1c35c2a8e">
    <input type="hidden" name="api_sig" value="c893eb5c89fc565da157c8e8adb449af">
    <input type="hidden" name="pm_id"  value="cashu">
    <input type="hidden" name="order_id" value="order id">
    <input type="hidden" name="description" value="payssion test">
    <input type="hidden" name="amount" value="1">
    <input type="hidden" name="currency" value="USD">
    <input type="hidden" name="return_url" value="https://www.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回调商户的notify_url,并通过post方式将订单信息(包含支付状态)传递给商户。

7、更新订单状态

商户根据Payssion传来的订单状态信息更新本地的订单状态。

8、同步跳转Payssion页面

用户完成支付后页面发生跳转到Payssion页面。

9、同步跳转到商户页面

在9后会跳转到商户指定的return_url页面。

PHP Libray

PHP

下载链接:PHP Library
在PHP Library的samples目录下包含了创建交易以及支付异步通知的代码示例。

测试账号

Please note only sofort and dotpay are supported for sandbox testing, and you must register another account at the sandbox before testing payments in sandbox.

SOFORT Testing

1、create the payment request with sofort as pm_id and your will be redirected to sofort payment page.

2、choose Germany as Country of your bank and enter 88888888 in the input field of Sort code or BIC.

3、enter 88888888 in the field of Account number and 12345 in the field of PIN.

4、choose any bank account at the page of Account selection and then enter 12345 in the field of TAN.

5、check the notification which we should have sent to your notify URL.

开源网店支付插件

Payssion目前已针对主流开源shopping cart开发了相应的插件:

Opencart

下载链接:Opencart 2.0 pluginOpencart 1.5.x pluginOpencart1.4.8-1.4.9 plugin

Prestashop

下载链接:Prestashop plugin

WooCommerce

下载链接:WooCommerce plugin

Zencart

下载链接:Zencart plugin

Magento

下载链接:Magento plugin

WHMCS

下载链接:WHMCS plugin

ECShop

下载链接:ECShop plugin

IMCART

下载链接:IMCART plugin

手机支付SDK

Android SDK

下载链接:Android SDK

将libs下的PayssionSDK.jar拷贝到项目libs下,同时在AndroidManifest.xml文件中增加以下permission: 下面以MainActivity为例,对创建支付请求以及支付结果返回的处理做说明:

<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(item.getPMId()) //支付方式id
        .setPayerRef(ref) //支付方式的其他参数
        .setDescription("test") //订单说明
        .setSecretKey("286a0b747c946e3d902f017cf75d3bd1") //Secret Key
        .setPayerEmail("habertlee@mail.com") //付款人人邮箱
        .setPayerName("habert lee")); //付款人姓名
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 PayssionActivity.RESULT_OK:
            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);
    }