聚合公众号支付API
业务功能
聚合公众号支付(统一下单支付),支持微信公众号支付、微信小程序支付、支付宝生活号支付、银联JS支付。服务商可通过该接口包装成静态码收款、动态码收款等收单业务,前端公众号、小程序等页面需要服务商自行包装。
注:使用自己主体appid的服务商,微信支付宝业务需要按官方文档要求授权获取openid,银联JS使用海科提供的接口两种方式二选一获取,文档链接如下:
1)微信公众号(子商户):
获取userid(openid): https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=4_4
调js支付: https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_7&index=6
2)支付宝生活号
获取userid: https://docs.alipay.com/fw/api/105942
调js支付:https://alipay.open.taobao.com/docs/doc.htm?&docType=1&articleId=105591
3)银联js支付
重定向方式获取userid:http://39.106.84.215:8181/docs/saas/saas-1bjio41r2aqmm
POST方式获取userid:http://39.106.84.215:8181/docs/saas/saas-1ermmm684v7sa
测试url:
http://47.95.131.62:8080/api/v1/pay/polymeric/jsapipay
请求参数(O-非必传 ,M-必传):
参数 | 参数名称 | 类型 | 参数说明 | 样例 | 可空 |
---|---|---|---|---|---|
trade_type | 支付方式 | String | 微信支付:WX 支付宝支付:ALI 银联二维码支付:UNIONQR | WX | M |
merch_no | 商户编号 | String | 商户在SaaS平台的编号 | a10253390 | M |
channel_no | (支付宝/微信)渠道号 | String | 服务商通过海科在(支付宝/微信)申请的渠道编号 | O | |
channel_merch_no | 渠道商户编号 | String | 商户在(支付宝/微信)申请的编号 | O | |
out_trade_no | 服务商交易订单号 | String | 服务商的交易订单编号(同一服务商下唯一) | 161018121614000624679888 | M |
total_amount | 订单金额 | String | 订单总金额,以元为单位 | 100 | M |
userid | 用户唯一标识 | String | (支付宝/微信/银联二维码)的用户唯一标识 | M | |
qrCode | 二维码地址 | String | 银联二维码交易必填,qrCode必传的值是展示的行业码的内容的值。例如:扫码点餐场景下,qrCode就是传桌面上张贴的二维码的url值 | M | |
userAuthCode | 用户授权码 | String | 银联二维码交易必填,用户授权码 | M | |
appid | 微信公众号appid | String | 微信交易必须上送 | O | |
ledger_type | 分账类型 | String | 不传默认不分账 REALTIME_SETTLE:实时分账 DELAY_SETTLE:延时分账 |
如果上送此字段,需要保证服务商分账业务已开通,否则不允许交易 | O |
ledger_relation | 分账交易关系组 | JSONArray | 分账交易关系组(v1.18增加) | 如果上送此字段,需要保证服务商分账业务已开通,否则不允许交易 | O |
notify_url | 通知地址 | String | 支付成功后的通知地址 | http://test.mdun.cn/jd/pay/notice | O |
sn | 厂商终端号 | String | (v1.05增加) | O | |
pn | SAAS终端号 | String | SAAS终端号 | 若使用海科商户后台或绑定海科语音设备则上送pn值,pn值通过终端绑定接口获得 | O |
remark | 交易备注 | String(255) | (v1.05增加) | O | |
limit_pay | 限制贷记卡支付 | String | (v1.19增加) 0:不限制贷记卡支付 1:禁止使用贷记卡支付。 不上送此参数时,limit_pay默认为0,即:不限制贷记卡支付 |
O | |
subsidy_info | 手续费补贴信息 | JSON | 1、需要保证服务商补贴业务已开通,否则不允许交易 2、手续费补贴费率、手续费执行费率和手续费补贴金额三选一进行上送 |
O | |
goods_name | 商品名称 | String(256) | 商品名称(支付宝和微信支持) | 矿泉水 | O |
goods_tag | 订单优惠标记 | String | 订单优惠标记,使用代金券或立减优惠功能时需要的参数,说明详见微信参数代金券或立减优惠 | sz_haihui | O |
goods_detail | 商品详情 | JSONArray | 商品详细描述,参考下表(商户信息:goods_detail) | [ { "goods_id": "商品编码", "wxpay_goods_id": "1001", "goods_name": "", "quantity": 1, "price": 528800 }, { "goods_id": "商品编码", "wxpay_goods_id": "1002", "goods_name": "iPhone6s 32G", "quantity": 1, "price": 608800 } ] | O |
operator_id | 商户操作员编号 | String | 支付宝可用 | 001 | O |
store_id | 商户门店编号 | String | 支付宝可用 | 001 | O |
terminal_id | 商户机具终端编号 | String | 支付宝可用 | 11111111 | O |
device_info | 设备号 | String | 微信可用 | 11111111 | O |
termid | 银联终端号 | String | 银联终端号,参加银联云闪付活动时上送 | 11111111 | O |
pnrInsIdCd | 银联服务商机构号 | String | 银联服务商机构号,参加银联云闪付活动时上送 | 11111111 | O |
acq_addn_data | (银联二维码)收款方附加数据 | JSON | 涉及扫码点餐业务,交易需要在此上送商品信息 | O | |
previous_trade_no | 前一笔SaaS平台返回的订单编号 | String | SaaS平台的交易订单编号 | AL200325141943092770216077 | O |
time_consume | 交易耗时 | String | 前一笔交易耗时(请求开始到请求结束),毫秒(ms) | 200 | O |
net_type | 网络类型 | String | 前一笔交易时使用的网络类型(2G,4G,WIFI) | 2G | O |
terminal_info | 终端信息 | object | 【259新增】商户侧受理终端信息,字段详 细说明参考下文。 | O | |
scene_info | 场景信息 | object | 微信适用,非必填项,该字段用于上报场景信息,目前支持上报实际门店信息。该字段为 JSON 对象数据,对象格式为{"store_info":{"id":"门店 ID","name": "名称","area_code": " 编 码","address": " 地 址" }} | {"store_info":{"id":"门店 ID","name": "名称","area_code": " 编 码","address": " 地 址" }} | O |
hb_fq_num | 花呗分期数 | String | 仅支持传入3/6/12(仅支付宝支持) 接入指引:https://gw.alipayobjects.com/os/bmw-prod/936d185f-6fda-4369-b0a0-34c5e7dfe7e3.pdf | O | |
food_order_type | 点餐场景类型(仅支付宝支持) | String | 点餐场景类型: qr_order(店内扫码点餐) pre_order(预点到店自提) home_delivery (外送到家) direct_payment(直接付款) other(其它) |
O | |
frontUrl | 支付成功跳转地址 | String | 支付成功跳转地址(银联主扫支付时) | O | |
frontFailUrl | 支付失败跳转地址 | String | 支付失败跳转地址(银联主扫支付时) | O |
手续费补贴信息subsidy_info 字段说明
参数 | 参数名称 | 类型 | 参数说明 | 样例 | 可空 |
---|---|---|---|---|---|
fee_subsidy_agent_no | 手续费补贴代理商编号 | Sting | 1、涉及到多营销主体补贴时该字段必填。2、运营提供手续费补贴代理商编号 | C | |
fee_subsidy_party | 手续费补贴方账户 | String | 1、手续费补贴方联系商务或者运营获取 | M | |
fee_subsidy_rate | 手续费补贴费率 | object | 1、手续费补贴费率、手续费执行费率和手续费补贴金额三选一进行上送 2、手续费补贴费率不能大于(可以等于)商户该笔交易手续费费率 3、费率单位:费率值0.38%,则上送0.38 , 封顶金额以元为单位:1.5元,则上送1.5 |
银联二维码手续费补贴时上送一组费率{"union_debit_rate":"银联二维码借记卡费率","union_debit_max":"银联二维码借记卡手续费封顶","union_credit_rate":"银联二维码贷记卡费率","union_mix_rate":"银联二维码1000元以下包括1000元费率"} | C |
fee_execute_rate | 手续费执行费率 | object | 1、手续费补贴费率、手续费执行费率和手续费补贴金额三选一进行上送 2、手续费执行费率只能小于(不可以等于)商户该笔交易手续费费率 3、商户该笔交易费率减去手续费执行费率就是该笔交易补贴费率 4、费率单位:费率值0.38%,则上送0.38 , 封顶金额以元为单位:1.5元,则上送1.5 |
银联二维码手续费补贴时上送一组费率{"union_debit_rate":"银联二维码借记卡费率","union_debit_max":"银联二维码借记卡手续费封顶","union_credit_rate":"银联二维码贷记卡费率","union_mix_rate":"银联二维码1000元以下包括1000元费率"} | C |
fee_subsidy_amount | 手续费补贴金额 | String | 1、手续费补贴费率、手续费执行费率和手续费补贴金额三选一进行上送 2、手续费补贴金额不能大于手续费金额(可以等于手续费金额) 3、传递补贴手续费金额大于该笔手续费金额,按照该笔交易实际手续费金额补贴 4、金额以元为单位:1.5元,则上送1.5 |
C |
分账关系组:ledger_relation
参数 | 参数名称 | 类型 | 参数说明 | 样例 | 可空 |
---|---|---|---|---|---|
receive_no | 收账方(海科商户号) | String | 收账方(海科商户号)ledger_relation组内参数 | M | |
amt | 分账金额 | String | 分账金额(单位:元) | 20 | M |
(微信支付宝)商户信息:goods_detail
参数 | 参数名称 | 类型 | 参数说明 | 样例 | 可空 |
---|---|---|---|---|---|
goods_id | 商品的编号 | String | 微信支付宝通用 | M | |
goods_name | 商品名称 | String | 微信支付宝通用 | M | |
quantity | 商品数量 | int | 微信支付宝通用 | M | |
price | 商品单价 | int/price | 微信单位为分(使用int上送),支付宝单位为元(使用price上送) | M | |
goods_category | 商品类目 | String | 支付宝参数 | O | |
categories_tree | 商品类目树 | String | 支付宝参数 | O | |
body | 商品描述信息 | String | 支付宝参数 | O | |
show_url | 商品的展示地址 | String | 支付宝参数 | O |
(银联二维码)收款方附加数据:acq_addn_data
参数 | 参数名称 | 类型 | 参数说明 | 样例 | 可空 |
---|---|---|---|---|---|
orderInfo | 订单信息 | JSON | 订单明细内容,如订单标 题、订单描述等 | O |
(银联二维码)订单信息:orderInfo
参数 | 参数名称 | 类型 | 参数说明 | 样例 | 可空 |
---|---|---|---|---|---|
addnInfo | 附加信息 | String | 银联扫码点餐相关参数,格式参考银联侧要求,例如{brandId=值&storeId=值&tableNo=值} | O |
终端信息terminal_info 字段说明
参数 | 参数名称 | 类型 | 参数说明 | 样例 | 可空 |
---|---|---|---|---|---|
location | 终端实时经纬度信息 | String | 受理终端设备实时经纬度信息,格式为纬度/经度, +表示北纬、东经,-表示南纬、西经 | +37.12/-121.213 | O |
device_ip | 商户端设备 IP | String | 商户端终端设备 IP 地址。注: 如经、维度信息未上送,该字段必送。 | O | |
encrypt_rand_num | 加密随机因子 | String(10) | 仅在被扫支付类交易报文中出现:若付款码为 19 位数字,则取后6 位;若付款码为 EMV二维码,则取其tag 57 的卡号/token 号的后 6 位 | O | |
secret_text | 密文数据 | String(16) | 仅在被扫支付类交易报文中出现:64bit 的密文数据, 对终端硬件序列号和加密随机因子加密后的结果。本子域取值为: 64bit 密文数据进行base64 编码后的结果。 | O | |
app_version | 应用程序版本号 | String(8) | 终端应用程序的版本号。应用程序变更应保证版本号不重复。当长度不足时,右补空格 | O |
请求示例:
{
"accessid": "cpostest",
"trade_type": "WX",
"merch_no": "88888888",
"out_trade_no": "2020032513292797",
"total_amount": "20",
"appid": "WX88888888888",
"userid": "azasadrfdhgfffdderty",
"sn": "WSY196",
"pn": "S0000053",
"remark": "地方都是",
"limit_pay": "0",
"ledger_relation": [
{
"receive_no": "833584358120001",
"amt": "1"
}
],
"goods_name": "矿泉水",
"previous_trade_no":"AL200325141943092770216077",
"time_consume":"200",
"net_type":"2G",
"sign": "F87FD1F2C281453F60F92CC63BEA79BD"
}
说明:
参数 previous_trade_no 和 time_consume 要一起上传,单独上传任意一个没有意思,如果没有信息,可以不传
返回参数:
参数 | 参数名称 | 类型 | 参数说明 | 样例 | 可空 |
---|---|---|---|---|---|
out_trade_no | 服务商交易订单号 | String | 服务商的交易订单编号 | 161018121614000624679888 | M |
trade_no | 交易订单号 | String | SaaS平台的交易订单编号 | M | |
channel_trade_no | 凭证条码订单号 | String | 仅支付宝和微信会返回(v1.24增加) | 161018121614000624679888 | O |
jspay_url | 银联支付页面地址 | String | 银联二维码支付下单成功后会返回,下单成功后需重定向到此地址完成支付 | O | |
alipay_no | 预下单订单号 | String | 支付宝交易下单成功后会返回 | 123456789 | O |
appid | 微信支付的appid | String | 微信交易下单成功后会返回 | O | |
timestamp | 交易时间戳 | String | 微信交易下单成功后会返回 | O | |
noncestr | 随机字符串 | String | 微信交易下单成功后会返回 | O | |
package | 订单详情扩展字符串 | String | 微信交易下单成功后会返回 | prepay_id=123456789 | O |
signtype | 签名方式 | String | 微信交易下单成功后会返回 | RSA | O |
paysign | 签名 | String | 微信交易下单成功后会返回 | C380BEC2BFD727A4B6845133519F3AD6 | O |
返回示例:
{
"out_trade_no": "202008271714035339186523",
"trade_no": "WX200827171426749573189299",
"channel_trade_no": "0111200827171447819307MC",
"appid": "wx2a0bae9e7b3aff33",
"openid": "o6t4W5waQRWf4v_ZFeiG70v15q1Q",
"timestamp": "1598519667",
"noncestr": "sz3Sl6qq4M7zMi3oHlZi0HHncVmqf6wt",
"package": "prepay_id=wx27171427618873be05ec39a3992e7c0000",
"signtype": "RSA",
"paysign": "KqIrBCQo80b5+KF2YbrDWYHtpVlSC7voOuUpXS6SaNIn7rM7+6xjZ7Dpt3LhP0RysM8jHW2RwLFkM4Gqf6hOKvi+piZIBGc8vLW/8qhLFCk5vrX93bWFsUIJMJsf75cEkpFjHelMjSb5dMcfmVL8qDi6qeLA5Iz4LfZ7T/UEidWFCYKjXz9m6CmXyWEb49oXezO5Uocq5b97uytY1jWP+D+/HqiHpdTflBAm45SZ8pxZevtt7DNzmgODJDBmmxD9drPZOyogOT3+eFGdUwIdK/bRACgTNOwVWKHtcHYIVla8mKwigv8a/ziJfxKZEpOy6gIDYrJ4hkX9hOnbjBOOYw==",
"return_code": 10000,
"sign": "741138032EFC152AED03ECD754DB1225"
}