支付开发接口文档支付开发接口文档
  • English
  • 简体中文
  • English
  • 简体中文
  • 介绍
  • 通用
    • 业务流程
    • 接口规则
    • 返回编码
  • 接口
    • 代收下单
    • 代付下单
    • 代收回调
    • 代付回调
    • 订单查询
    • 余额查询
  • 附录
    • 银行列表

接口规则

基本要求

规则要求
传输方式为保证交易安全性,采用HTTPS传输
提交方式采用POST方法提交
数据格式提交和返回数据都为JSON格式,基本数据 { "result_code":"OK", "result_msg":"SUCCESS", "charge": { } }
字符编码统一采用UTF-8字符编码
签名算法SHA1WithRSA等
签名要求请求和接收数据都需要校验签名
授权要求所有API操作都要求使用授权
判断逻辑先判断协议字段返回,再判断业务返回,最后判断交易状态

Header要求

  • 请求Content-Type: content-type

    • 设置该Header值为JSON格式。
    • 例: application/json; charset=UTF-8
  • 请求Accept: accept

    • 设置该Header值为JSON格式。
    • 例: application/json; charset=UTF-8
  • 请求URL地址: x-ca-resturl

    • 设置该Header值为统一下达或订单查询请求的URL地址。
    • 例: https://pay.xxx.io/pay/unifiedorder or https://pay.xxx.io/pay/orderquery
  • 请求时间戳: x-ca-timestamp

    • 设置该Header值为当前请求的毫秒或更高精度时间戳(毫秒/微秒/纳秒)。
    • 例: 毫秒时间戳 millisecond timestamp 1586007620038
  • 请求随机数: x-ca-noncestr

    • 设置该Header值为一个32位系统随机数,防重请求。
    • 例: MD5(系统随机数)
  • 请求授权KEY: x-ca-auth

    • 设置该Header值为商户申请API接口获取的key。
    • 例: 772ae1d32322f49508307b2f31a0107f
  • 请求签名: x-ca-signature

    • 设置该Header值为使用SHA1WithRSA签名算法计算的签名,该签名将由服务端进行校验。
    • 具体算法规则参见 签名算法

签名算法

  • 第一步: 商户系统API接口会分配key和支付平台数据公钥platform_pubKey,使用支付宝RSA签名验签工具自己生成商户数据RSA密钥对(私钥priKey和公钥pubKey,注:非JAVA适用 2048 pkcs1s):

    • key: 商户系统API接口对应的key
    • priKey: 对商户系统请求数据进行签名的RSA私钥
    • pubKey: 支付平台对商户系统请求数据进行验签的RSA公钥
    • platform_pubKey: 商户系统对支付平台返回数据进行验签的RSA公钥
  • 第二步: 拼接待签名的字符串string,规则如下:

string = UTF8格式的URI +
换行符\n + UTF8格式的URI查询参数 +
换行符\n + UTF8格式的x-ca-noncestr Header值 +
换行符\n + UTF8格式的x-ca-timestamp Header值 +
换行符\n + UTF8格式的POST请求JSON数据

样例:

string = /pay/unifiedorder
  
C8E1D385785625AFD64A484B58F91882
1.58600995149E+12
{"out_trade_no":"202007040118131586193493","subject":"demo","body":"demo","amount":"1.66","currency":"INR","channel":"inpay_bankupi","extparam":[],"mchid":"100000","return_url":"https://pay.xxx.io/demo.html","notify_url":"https://pay.xxx.io/demo/demonotify","client_ip":"127.0.0.1"}

提示

  • 空行是该请求的URI查询参数为空
  • 第三步: 使用SHA1WithRSA签名算法计算得出x-ca-signature签名,如下:

    • 对待签名字符串string进行Base64运算得到sign值
    • 读取商户私钥priKey并转换为openssl密钥private key
    • 将sign值和private key密钥传入SHA1WithRSA签名算法计算出signature
    • 对signature进行Base64运算得到x-ca-signature值
  • 第四步: 支付平台收到商户系统请求后,将对请求数据进行验签。如果验签不通过,返回失败结果;如果验签通过,执行相应的支付业务逻辑并返回相应的结果。支付平台对返回结果进行了SHA1WithRSA签名算法,返回结果和Header示例如下:

Body:

{
	"result_code": "OK",
	"result_msg": "SUCCESS",
	"charge": {
		"channel": "inpay_payout",
		"out_trade_no": "05Apr2021084746550",
		"client_ip": "127.0.0.1",
		"amount": "100",
		"currency": "INR",
		"subject": "inpay_payout",
		"body": "inpay_payout",
		"extparam": {
			"accountname": "kumar hamad",
			"bankaccount": "6228480415647314871",
			"bankname": "HDFC"
		},
		"credential": {
			"out_trade_no": "D20210405084748405109",
			"merchant_wallet": {
				"id": "44",
				"uid": "100003",
				"paytype": "0",
				"currency": "INR",
				"limit_credits": "0.000",
				"security_deposit_credits": "0.000",
				"unsettled_credits": "39128.819",
				"hold_credits": "0.000",
				"commission_credits": "144498.771",
				"available_credits": "25386.424",
				"status": "1",
				"create_time": "1541787044",
				"update_time": "1542617892"
			}
		}
	}
}

Header:

x-ca-timestamp: 1617583668305 
x-ca-noncestr: 963613FA553D6405C6E0D345BA32B6DB 
x-ca-signature: f+boCXBdpfZItp4TykM7BB03qGTZ9Yf6eBZD8D6mPQQsn0yTYAjy+46UJnhfChQ4z1CjfcW4AbHxZNT8cc5wxErLTt7rLYPD0T6RfOiyDY1AFTgFvY2P5pUi3WtHxqgpvkOrM6XT0PGts4Pzi1yBAMwzVZ4q6fSbitlvR36sk\/MCV1RKVbHlVzeCGMQ38dg3Frny9kBEYhgqzqHPZteiTt5sOuokN8eHqLEqImsS4xlosDD9Mgb3BckegQIdIBoRezqn+JrM8glU2iEq5VxAuhZBkqNT76BHdUA8KbO5yOqRRbqpOQf7iTGRqBgNHtuwZg+HbQcff\/t\/fxx\/COdD1w==
  • 第五步: 商户系统收到返回结果后,为保证支付安全,强烈建议商户对返回数据进行验签后再进行相应的业务处理。验签算法如下:

拼接待验签的字符串string,规则如下:

string = UTF8格式的x-ca-noncestr Header值 +
换行符\n + UTF8格式的x-ca-timestamp Header值 +
换行符\n + UTF8格式的返回结果的完整JSON数据

然后对待验签字符串string进行Base64运算得到verify值,传入 返回Header的x-ca-signature值、verify值、支付平台数据公钥platform_pubKey这三个参数执行SHA1WithRSA验签算法。

Prev
业务流程
Next
返回编码