🚀API对接指南
为了确保交易数据的安全性和完整性,调用支付网关的所有API接口都需要使用HTTPS协议和 HMAC-SHA512签名。
协议规则
以下指定了访问支付网关时调用 API 的规则:
传输协议
必须使用HTTPS传输数据
提交模式
POST或GET,取决于API
数据格式(内容类型)
提交的数据和响应都是 application/json 格式
字符编码
使用 UTF-8 字符编码
签名算法
HMAC-SHA512
签名要求
请求和接收数据需要进行签名检查
逻辑判断
确定协议字段、服务字段和交易状态
请求头
content-type
string
是
application/json
内容类型
HiicashPay-Timestamp
int64
是
只处理 1 秒内发送的请求,以确保机器时间与网络同步
Unix 时间戳,以毫秒为单位
HiicashPay-Nonce
string
是
必须是 32 位字符
一个 32 字节的随机字符串
HiicashPay-AppId
string
是
由支付网关生成的 AppID
新建应用时生成的app_id
HiicashPay-Signature
string
是
使用 SHA512 生成的签名,并为大写字符串
生成签名
签名算法
注意:
'\n'为LF,ASCII值为'0x0A'
参数名称区分大小写
当检查返回的数据或消息推送的签名时,需将HiicashPay-Signature参数排除在外。
当提交json时,请仔细检查引号,'跟"不一样。
对内容进行签名
支付接口
商户业务系统通过支付订单接口发起支付收款订单,支付网关会根据商户配置的支付通道路由支付通道完成支付下单。支付网关根据不同的支付方式返回对应的支付参数,业务系统使用支付参数发起收款。
创建订单
请求URL:/pay/order/create
请求方式:POST
请求类型:application/json
请求参数
商户号
mchNo
是
String(30)
8812345812345678
商户号
应用ID
appId
是
String(24)
60cc09bce4b0f1c0b83761c9
应用ID
商户订单号
mchOrderNo
是
String(30)
20160427210604000490
商户生成的订单号
支付金额
amount
是
int
100
支付金额,单位分
支付数据类型
payDataType
是
String
Cashier
支付参数类型 收银台方式-Cashier 网关方式-Gateway
货币代码
currency
是
String(3)
USD
三位货币代码,美元:USD
客户端IP
clientIp
否
String(32)
210.73.10.148
客户端IPV4地址
商品标题
subject
是
string(64)
电子产品
商品的标题
商品信息
body
否
String(256)
{[ "title" : "xxxxxx", "price": 100, "qt": 1]}
商品详细信息列表 title-标题 price-价格 qt-数量
失效时间
expiredTime
否
int
3600
订单失效时间,单位秒,默认1小时.订单在(创建时间+失效时间)后失效
示例数据
返回参数
返回状态
code
是
int
0
0-处理成功,其他-处理有误,详见错误码
返回信息
msg
否
String(128)
签名失败
具体错误原因,例如:签名失败、参数格式校验错误
返回数据
data
否
String(512)
{}
返回下单数据,json格式
Data数据格式
支付订单号
payOrderId
是
String(30)
U12021022311124442600
返回支付系统订单号
商户订单号
mchOrderNo
是
String(30)
8812345812345678123
返回商户传入的订单号
订单状态
orderState
是
int
2
支付订单状态 0-订单生成 1-支付中 2-支付成功 3-支付失败 4-已撤销 5-已退款 6-订单关闭
支付数据类型
payDataType
是
String
Cashier
支付参数类型 收银台方式-Cashier 网关方式-Gateway
渠道错误码
errCode
否
String
ACQ.PAYMENT_AUTH_CODE_INVALID
上游渠道返回的错误码
渠道错误描述
errMsg
否
String
Business Failed 失败
上游渠道返回的错误信息描述
成功示例数据
失败示例数据
接入演示
以 Python 为例
Body 请求体
Headers 请求头
下面我们来一步一步接入
按照上面的步骤,最终生成的签名应该是:
20628DE35D2B36F9530F91B1F58E8084E3B032B5F9A124EC5E20B3C1F8208A7E281366E66AA37F665744013923F2B4A3FE330F288B001BA4AB5EDD39F95A8CF2
如果你的签名不一致,请不要着急先传入参数,先按照上方全部付复制,不要修改任何变量,直到签名计算正确为止。
下面来发送请求
将 main() 方法方法中的
三个变量的值换为你商户后台的应用网关信息
删除以下代码
打开注释
Body 信息改为你自己的
如果一切顺利,你得到的值为:
返回值中的 data 的 payDataType 就是收银台支付链接,直接跳转即可。
查询订单
商户通过该接口查询订单,支付网关会返回订单最新的数据
请求URL:/pay/order/query
请求方式:POST
请求类型:application/json
请求参数
商户号
mchNo
是
String(30)
8812345812345678
商户号
应用ID
appId
是
String(24)
60cc09bce4b0f1c0b83761c9
应用ID
支付订单号
payOrderId
是
String(30)
U12021022311124442600
返回支付系统订单号,与mchOrderNo二者传一即可
商户订单号
mchOrderNo
是
String(30)
20160427210604000490
商户生成的订单号,与payOrderId二者传一即可
示例数据
返回参数
返回状态
code
是
int
0
0-处理成功,其他-处理有误,详见错误码
返回信息
msg
否
String(128)
签名失败
具体错误原因,例如:签名失败、参数格式校验错误
返回数据
data
否
String(512)
{}
返回下单数据,json格式
Data数据格式
支付订单号
payOrderId
是
String(30)
U12021022311124442600
返回支付系统订单号
商户号
mchNo
是
String(30)
8812345812345678
商户号
商户订单号
mchOrderNo
是
String(30)
8812345812345678123
返回商户传入的订单号
应用ID
appId
是
String(24)
60cc09bce4b0f1c0b83761c9
应用ID
支付方式
wayCode
是
String(30)
VOUCHER
支付方式,如Voucher:VOUCHER,用户余额:BALANCE
支付接口
ifCode
是
String(30)
WEB
支付接口,WEB、APP、MINIPRAM……
支付金额
amount
是
int
100
支付金额,单位分
货币代码
currency
是
String(3)
cny
三位货币代码,美元:USD 人民币:CNY
订单状态
orderState
是
int
2
支付订单状态 0-订单生成 1-支付中 2-支付成功 3-支付失败 4-已撤销 5-已退款 6-订单关闭
客户端IP
clientIp
否
String(32)
210.73.10.148
客户端IPV4地址
商品标题
subject
是
string(64)
电子产品
商品的标题
商品信息
body
否
String(256)
{[ "title" : "xxxxxx", "price": 100, "qt": 1]}
商品详细信息列表 title-标题 price-价格 qt-数量
渠道订单号
channelOrderNo
否
String
20160427210604000490
对应渠道的订单号
渠道用户
channelUser
否
String
882010423410394
渠道用户号 voucher卡号或者user_id
扩展参数
extParam
否
String(512)
134586944573118714
商户扩展参数,回调时会原样返回
渠道错误码
errCode
否
String
ACQ.PAYMENT_AUTH_CODE_INVALID
上游渠道返回的错误码
渠道错误描述
errMsg
否
String
Business Failed 失败
上游渠道返回的错误信息描述
创建时间
createdAt
是
long
1622016572190
订单创建时间,13位时间戳
成功时间
successTime
否
long
1622016572190
订单支付成功时间,13位时间戳
示例数据
关闭订单
商户通过该接口关闭订单,支付网关会对订单完成关闭处理。
请求URL:/pay/order/close
请求方式:POST
请求类型:application/json
请求参数
商户号
mchNo
是
String(30)
8812345812345678
商户号
应用ID
appId
是
String(24)
60cc09bce4b0f1c0b83761c9
应用ID
支付订单号
payOrderId
是
String(30)
U12021022311124442600
返回支付系统订单号,与mchOrderNo二者传一即可
商户订单号
mchOrderNo
是
String(30)
20160427210604000490
商户生成的订单号,与payOrderId二者传一即可
示例数据
返回参数
返回状态
code
是
int
0
0-处理成功,其他-处理有误,详见错误码
返回信息
msg
否
String(128)
签名失败
具体错误原因,例如:签名失败、参数格式校验错误
返回数据
data
否
String(512)
{}
返回下单数据,json格式
Data数据格式
渠道错误码
errCode
否
String
ACQ.PAYMENT_AUTH_CODE_INVALID
上游渠道返回的错误码
渠道错误描述
errMsg
否
String
Business Failed 失败
上游渠道返回的错误信息描述
示例数据
支付通知
当订单支付成功时,支付网关会向商户系统发起回调通知。如果商户系统没有正确返回,支付网关会延迟再次通知。
请求URL:链接是通过创建订单接口提交的参数notifyUrl设置,或者商家在后台设置的回调URL
请求方式:POST
请求类型:application/json
请求头
content-type
string
application/json
HiicashPay-Timestamp
int64
网关返回Unix时间戳
HiicashPay-Nonce
string
32位字符
HiicashPay-Signature
string
网关返回签名
示例数据
请求参数
支付订单号
payOrderId
是
String(30)
U12021022311124442600
返回支付系统订单号
商户号
mchNo
是
String(30)
8812345812345678
商户号
商户订单号
mchOrderNo
是
String(30)
8812345812345678123
返回商户传入的订单号
应用ID
appId
是
String(24)
60cc09bce4b0f1c0b83761c9
应用ID
支付方式
wayCode
是
String(30)
VOUCHER
支付方式,如Voucher:VOUCHER,用户余额:BALANCE
支付接口
ifCode
是
String(30)
WEB
支付接口,WEB、APP、MINIPRAM……
支付金额
amount
是
int
100
支付金额,单位分
货币代码
currency
是
String(3)
cny
三位货币代码,美元:USD 人民币:CNY
订单状态
orderState
是
int
2
支付订单状态 0-订单生成 1-支付中 2-支付成功 3-支付失败 4-已撤销 5-已退款 6-订单关闭
客户端IP
clientIp
否
String(32)
210.73.10.148
客户端IPV4地址
商品标题
subject
是
string(64)
电子产品
商品的标题
商品信息
body
是
String(256)
{[ "title" : "xxxxxx", "price": 100, "qt": 1]}
商品详细信息列表 title-标题 price-价格 qt-数量
渠道订单号
channelOrderNo
否
String
20160427210604000490
对应渠道的订单号
渠道用户
channelUser
否
String
882010423410394
渠道用户号 voucher卡号或者user_id
扩展参数
extParam
否
String(512)
134586944573118714
商户扩展参数,回调时会原样返回
渠道错误码
errCode
否
String
ACQ.PAYMENT_AUTH_CODE_INVALID
上游渠道返回的错误码
渠道错误描述
errMsg
否
String
Business Failed 失败
上游渠道返回的错误信息描述
创建时间
createdAt
是
long
1622016572190
订单创建时间,13位时间戳
成功时间
successTime
否
long
1622016572190
订单支付成功时间,13位时间戳
示例数据
返回结果
业务系统处理后同步返回给支付中心,返回参数的returnCode为 success 则表示成功,返回非success则表示处理失败,支付中心会再次通知业务系统。 (通知频率为0/30/60/90/120/150,单位:秒)
返回状态
returnCode
是
string(30)
"success"
"success"-处理成功,其他-处理有误
返回信息
returnMsg
否
String(128)
""
具体错误原因
示例数据
签名校验
HiiCash 网关默认返回信息已经是按照键名首字母升序排序,如果你是手动获取的参数,需要将 post 参数按照键名升序排序
通知回调签名校验与创建订单相同,只不过参数变成网关发送的请求数据,签名后再与网关签名进行比对,如果一致则代表订单完成,下面以 Python 为例:
注意
网关支付
支付验证
用户通过该接口进行支付验证,如果是Voucher,验证通过后直接扣款,如果是用户,则返回需要填入的验证码类型
请求URL:/pay/order/verify
请求方式:POST
请求类型:application/json
请求参数
支付订单号
payOrderId
是
String(30)
12021022311124442600
支付系统订单号
渠道用户
channelUser
是
String
882010423410394
渠道用户号 voucher卡号或者user_id
验证数据
verifyData
否
String(30)
密码
示例数据
返回参数
返回状态
code
是
int
0
0-处理成功,其他-处理有误,详见错误码
返回信息
msg
否
String(128)
参数格式校验错误
具体错误原因,例如:签名失败、参数格式校验错误
返回数据
data
否
String(512)
{}
返回验证数据,json格式
Data数据格式
验证类型
verifyType
是
int
0
验证类型 1-邮箱验证码 2-Google验证器
示例数据
申请扣款
用户通过该接口进行申请扣款
请求URL:/pay/order/billing
请求方式:POST
请求类型:application/json
请求参数
字段名
变量名
必填
类型
示例值
描述
支付订单号
payOrderId
是
String(30)
12021022311124442600
支付系统订单号
验证数据
verityData
是
String(30)
验证码内容
示例数据
返回参数
返回状态
code
是
int
0
0-处理成功,其他-处理有误,详见错误码
返回信息
msg
否
String(128)
参数格式校验错误
具体错误原因,例如:签名失败、参数格式校验错误
返回数据
data
否
String(512)
{}
返回验证数据,json格式
示例数据
如需使用以下余额支出接口,请先在 商户后台 -> 设置 -> API 设置 启用 API扣款功能,该功能默认关闭。再次提醒,如果应用密钥不慎泄漏可能会造成您的余额损失。
创建代金券
商户通过该接口进行创建代金券,费用会自动从商户余额中支出
请求URL:/voucher/create
请求方式:POST
请求类型:application/json
请求参数
字段名
变量名
必填
类型
示例值
描述
金额
amount
是
Int
500
创建代金券面值,最小 500($5),最大20000($200)
数量
quantity
是
Int
1
创建代金券数量,单次最少创建1张,最大100张
是否激活
isActive
否
Bool
True/False
是否激活,默认不激活,不激活情况下只返回激活码,需要手动激活一次才能使用,激活的情况下返回代金券卡号和卡密
示例数据
返回参数
返回状态
code
是
int
0
0-处理成功,其他-处理有误,详见错误码
返回信息
msg
否
String(128)
参数格式校验错误
具体错误原因,例如:签名失败、参数格式校验错误
返回数据
data
否
String(512)
{}
返回验证数据,json格式
代金券信息
data -> vouchers
是
Array
数组形式返回多组代金券
示例数据
创建转账
商户通过该接口进行想其他 HiiCash 账户转账,费用会自动从商户余额中支出
请求URL:/wallet/transfer
请求方式:POST
请求类型:application/json
请求参数
字段名
变量名
必填
类型
示例值
描述
金额
amount
是
Int
500
转账金额,单次转账最小金额 200($2),最大不限
账户号
accountNo
是
Int
8888888888888888
接收方 16 位账户号
附言
memo
否
String
测试转账
转账备注信息
示例数据
返回参数
返回状态
code
是
int
0
0-处理成功,其他-处理有误,详见错误码
返回信息
msg
否
String(128)
参数格式校验错误
具体错误原因,例如:签名失败、参数格式校验错误
返回数据
data
否
String(512)
{}
返回验证数据,json格式
转账订单号
data -> transactionId
是
String(128)
转账订单号
示例数据
Last updated