聚合被扫支付API(微信、支付宝、银联二维码)
业务功能
收银员使用扫码设备读取用户微信/支付宝APP付款码/银联二维码以后,二维码或条码信息传送至商户收银台,由商户收银台或者商户后台调用该接口发起支付对用户进行收款。
被扫免密情况下,同步会返回微信、支付宝的attach原生参数,非免密情况下不返回
交互模式
请求:后台请求交互模式
返回结果:后台请求交互模式
测试url:
http://47.95.131.62:8080/api/v1/pay/polymeric/passivepay
请求参数(O-非必传 ,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 |
auth_code | 支付授权码 | String | 支付授权码 | 130022933989643883 | M |
appid | 微信公众号appid | String | 微信适用,非必填 | O | |
ledger_type | 分账类型 | String | 不传默认不分账 REALTIME_SETTLE:实时分账 DELAY_SETTLE:延时分账 |
如果上送此字段,需要保证服务商分账业务已开通,否则不允许交易 | O |
ledger_relation | 分账交易关系组 | JSONArray | 分账交易关系组(v1.18增加) | ledger_flag为Y时必传 | O |
notify_url | 通知地址 | String | 支付成功后的通知地址 | http://test.mdun.cn/jd/pay/notice | O |
sn | 厂商终端号 | String | O | ||
pn | SAAS终端号 | String | SAAS终端号 | 259号文要求,通过商户终端绑定接口获得 | M |
remark | 交易备注 | String(255) | 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 |
scene_info | 场景信息 | object | 微信适用,非必填项,该字段用于上报场景信息,目前支持上报实际门店信息。该字段为 JSON 对象数据,对象格式为{"store_info":{"id":"门店 ID","name": "名称","area_code": " 编 码","address": " 地 址" }} | {"store_info":{"id":"门店 ID","name": "名称","area_code": " 编 码","address": " 地 址" }} | O |
terminal_info | 终端信息 | object | 【259新增】商户侧受理终端信息,字段详 细说明参考下文。 | 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 | |
goodsInfo | 商品信息 | JSONArray | 商品明细内容 | O |
(银联二维码)订单信息:orderInfo
参数 | 参数名称 | 类型 | 参数说明 | 样例 | 可空 |
---|---|---|---|---|---|
title | 标题 | String | 标题 | M | |
description | 订单描述 | String | 订单描述 | O | |
dctAmount | 可优惠金额 | String | 当前订单可以参与优惠计算的金额 | O | |
addnInfo | 附加信息 | String | 银联扫码点餐相关参数,格式参考银联侧要求{brandId=值&storeId=值&tableNo=值} | O |
(银联二维码)商品信息:goodsInfo
参数 | 参数名称 | 类型 | 参数说明 | 样例 | 可空 |
---|---|---|---|---|---|
id | 标题 | String | 标题 | M | |
name | 商品名称 | String | 订单描述 | M | |
price | 商品单价 | String | 以分为单位 | M | |
quantity | 商品数量 | String | M | ||
category | 商品类目 | String | O | ||
addnInfo | 附加信息 | String | 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 编码后的结果。加密前8位,加密后应为12位 | O | |
app_version | 应用程序版本号 | String(8) | 终端应用程序的版本号。应用程序变更应保证版本号不重复。当长度不足时,右补空格 | O |
请求示例:
{
"accessid": "cpostest",
"merch_no": "88888888",
"out_trade_no": "20200325141703575",
"total_amount": "26",
"auth_code": "287667597892433290",
"notify_url": "http://47.95.131.62:8080/saas/trade/success/notice/test",
"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": "50D6DFBB25DA2181A61AA1FEBFED8AC8"
}
说明:
参数 previous_trade_no 和 time_consume 要一起上传,单独上传任意一个没有意思,如果没有信息,可以不传
返回参数:
参数 | 参数名称 | 类型 | 参数说明 | 样例 | 可空 |
---|---|---|---|---|---|
out_trade_no | 服务商交易订单号 | String | 服务商的交易订单编号 | 161018121614000624679888 | M |
trade_no | 交易订单号 | String | SaaS平台的交易订单编号 | M | |
channel_trade_no | 凭证条码订单号 | String | 凭证条码订单号(v1.24增加) | 161018121614000624679888 | M |
trade_type | 被扫类型 | String | 微信支付:WX 支付宝支付:ALI 银联二维码支付:UNIONQR | M | |
trade_status | 交易状态(v1.40改为都返回) | String | 1:交易成功
2:交易失败 |
1 | O |
accept_status | 业务受理状态(仅银联二维码返回) | String | 1:交易已受理 2:交易受理失败 本字段只是交易的受理状态,并非支付结果,仅表示当前交易在银联方是否已经受理。最终支付结果需要调用交易查询接口或者等候支付成功的异步通知 |
1 | O |
error_code | 交易错误码 | String | 交易错误码 | 80002 | O |
error_msg | 交易错误信息 | String | 交易的错误信息 | 授权码过期请刷新 | O |
trade_end_time | 支付完成时间 | String | 微信支付宝取通道返回的支付完成时间,银联二维码取接收成功通知的时间 | 2019-11-18 14:11:23 | O |
attach | 支付宝/微信原生参数 | JSON | O |
微信原生参数:attach
参数 | 参数名称 | 类型 | 参数说明 | 样例 | 可空 |
---|---|---|---|---|---|
sub_appid | 子商户公众账号ID | String | wx8888888888888888 | O | |
sub_mch_id | 子商户号 | String | 1900000109 | M | |
device_info | 设备号 | String | O | ||
sub_openid | 用户子标识 | String | O | ||
trade_type | 交易类型 | String | 调用接口提交的交易类型,取值如下 JSAPI,NATIVE,APP,MICROPAY | M | |
trade_state | 交易状态 | String | SUCCESS-支付成功 REFUND-转入退款 NOTPAY-未支付 CLOSED-已关闭 REVOKED- 已撤销(刷卡支付) USERPAYING-用户支付中 PAYERROR-支付失败(其他原因,如银行返回失败) |
M | |
bank_type | 付款银行 | String | CMC | M | |
promotion_detail | 优惠券详情 | String | “[{“amount”:100,”merchant_contribute”:”100”,”other_contribute”:”0”,”promotion_id”:”15171754411”,”type”:”DISCOUNT”,”wxpay_contribute”:”0”,”scope”:”GLOBAL”,”activity_id”:”15079378”,”name”:”翠微测试”}]” | O | |
total_fee | 标价金额 | int | 订单总金额,单位为分,只能为整数 | 888 | M |
fee_type | 标价币种 | String | CNY | O | |
settlement_total_fee | 应结订单金额 | String | 单位:分 | O | |
cash_fee | 现金支付金额 | String | 单位:分 | M | |
cash_fee_type | 现金支付币种 | String | CNY | O | |
transaction_id | 银联/网联订单号 | String | M | ||
out_trade_no | 商户订单号 | String | M | ||
time_end | 支付完成时间 | String | M | ||
trade_state_desc | 交易状态描述 | String | M | ||
coupon_fee | 代金券金额 | String | 单位:分 | O |
微信优惠参数:promotion_detail
参数 | 参数名称 | 类型 | 参数说明 | 样例 | 可空 |
---|---|---|---|---|---|
promotion_id | 券ID | String | 券或者立减优惠id | 109519 | M |
name | 优惠名称 | String | 优惠名称 | 单品惠-6 | O |
scope | 优惠范围 | String | GLOBAL- 全场代金券 SINGLE- 单品优惠 | SINGLE | O |
type | 优惠类型 | String | COUPON- 代金券,需要走结算资金的充值型代金券,(境外商户券币种与支付币种一致)DISCOUNT- 优惠券,不走结算资金的免充值型优惠券,(境外商户券币种与标价币种一致 | DISCOUNT | O |
amount | 优惠券面额 | String | 用户享受优惠的金额 | 5 | M |
activity_id | 活动ID | String | 在微信商户后台配置的批次ID | 931386 | M |
wxpay_contribute | 微信出资 | String | 特指由微信支付商户平台创建的优惠,出资金额等于本项优惠总金额,单位为分 | 0 | O |
merchant_contribute | 商户出资 | String | 特指商户自己创建的优惠,出资金额等于本项优惠总金额,单位为分 | 0 | O |
other_contribute | 其他出资 | String | 其他出资方出资金额,单位为分 | 7 | O |
goods_detail | 单品列表 | Json | 单品信息,使用Json格式 | O |
单品信息:goods_detail
参数 | 参数名称 | 类型 | 参数说明 | 样例 | 可空 |
---|---|---|---|---|---|
goods_id | 商品编码 | String | 由半角的大小写字母、数字、中划线、下划线中的一种或几种组成 | 商品编码 | M |
goods_remark | 商品备注 | String | goods_remark为备注字段,按照配置原样返回,字段内容在微信后台配置券时进行设置。 | 1001 | O |
discount_amount | 商品优惠金额 | String | 单品的总优惠金额,单位为:分 | 3 | M |
quantity | 商品数量 | int | 用户购买的数量 | 1 | M |
price | 商品价格 | int | 单位为:分。如果商户有优惠,需传输商户优惠后的单价(例如:用户对一笔100元的订单使用了商场发的纸质优惠券100-50,则活动商品的单价应为原单价-50) | 528800 | M |
支付宝原生参数:attach
参数 | 参数名称 | 类型 | 参数说明 | 样例 | 可空 |
---|---|---|---|---|---|
trade_no | 银联/网联交易号 | String | 2013112011001000000121536 | M | |
out_trade_no | 原支付订单商户订单号 | String | M | ||
buyer_logon_id | 买家支付宝账号 | String | 159****5620 | M | |
trade_status | 交易状态 | String | 交易状态:WAIT_BUYER_PAY(交易创建,等待买家付款)、TRADE_CLOSED(未付款交易超时关闭,或支付完成后全额退款)、 TRADE_SUCCESS(交易支付成 功)、TRADE_FINISHED(交易结束,不可退款) | M | |
total_amount | 订单交易金额 | Price | 交易的订单金额,单位为元,两位小数该参数的值为支付时传入的 total_amount | M | |
buyer_pay_amount | 买家实付金额 | String | 单位:元 | O | |
invoice_amount | 交易中可给用户开具发票的金额 | Price | O | ||
alipay_store_id | 支付宝店铺编号 | String | O | ||
receipt_amount | 商家入账金额(未扣除手续费) | String | 单位:元 | O | |
store_id | 商户门店编号 | String | O | ||
terminal_id | 商户机具终端编号 | String | O | ||
fund_bill_list | 资金渠道信息 | JSONArray | [{“amount”:”36.00”,”fund_channel”:”ALIPAYACCOUNT”}] | O | |
store_name | 交易门店名称 | String | O | ||
buyer_user_id | 买家在支付宝的用户id | String | M | ||
discount_goods_detail | 本次交易支付所使用的单品券优惠的商品优惠信息 | String | [{“goods_id”:”STANDARD1026181538”,”goods_name”:”雪 碧”,”discount_amount”:”100.00”,”voucher_id”:”2015102600073002039000002D5O”}] | O | |
voucher_detail_list | 本交易支付时使用的所有优惠券信息 | JSONArray | 详见下文说明 | O | |
mdiscount_amount | 商家入账金额 | String | 单位:元 | O | |
discount_amount | 平台优惠金额 | String | 单位:元 | O |
资金渠道信息:fund_bill_list
参数 | 参数名称 | 类型 | 参数说明 | 样例 | 可空 |
---|---|---|---|---|---|
fund_channel | 交易使用的资金渠道 | String | ALIPAYACCOUNT | M | |
bank_code | 银行卡支付时的银行代码 | String | CEB | O | |
amount | 该支付工具类型所使用的金额 | String | 单位:元 | O | |
fund_channel | 交易使用的资金渠道 | String | 单位:元 | O | |
real_amount | 渠道实际付款金额 | String | 单位:元 | O |
优惠券信息:voucher_detail_list
参数 | 参数名称 | 类型 | 参数说明 | 样例 | 可空 |
---|---|---|---|---|---|
id | 券id | String | M | ||
name | 券名称 | String | M | ||
type | 类型 | String | ALIPAY_FIX_VOUCHER-全场代金券 ALIPAY_DISCOUNT_VOUCHER-折扣券 ALIPAY_ITEM_VOUCHER- 单品优惠 注:不排除将来新增其他类型的可能,商家接入时注意兼容性避免硬编码 |
M | |
amount | 券面额 | Price | 优惠券面额,它应该会等于商家出资加上其他出资方出资 | M | |
merchant_contribute | 商家出资 | Price | 商家出资(特指发起交易的商家出资金额) | O | |
other_contribute | 其他出资 | Price | 其他出资方出资金额,可能是支付宝,可能是品牌商,或者其他方,也可能是他们的一起出资 | O | |
memo | 备注 | String | O |
返回示例:
{
"out_trade_no": "20200325141703575",
"channel_trade_no": "010920032514191297612MC",
"trade_no": "AL200325141943092770216077",
"trade_status": 3,
"trade_type": "ALI",
"return_code": 10000,
"sign": "9FECADCB0C6902A0539CBACB05F9BCDA"
}
文档更新时间: 2025-02-11 11:12 作者:admin