业务功能

  • 主扫支付又叫预下单支付,适用于顾客主动扫码商家动态码的场景,商户调用接口请求预下单支付,系统会返回二维码链接,商家将链接转成二维码供顾客扫描支付。
  • 步骤 1:商家调用此接口展示收款二维码(动态码:商家确认订单金额和其他信息,实时生成二维码);
  • 步骤 2:顾客打开微信/支付宝客户端扫描收款二维码;
  • 步骤 3:顾客确认/输入金额,并完成支付;
  • 步骤 4:商家主动轮询去查询支付结果;
  • 步骤 5:支付成功,系统异步通知商家支付成功结果;

交互模式
请求:后台请求交互模式
返回结果+通知:后台请求交互模式+后台通知交互模式
测试url:
地址:39.107.230.207
端口:10020

请求参数(O-非必传 ,M-必传):

编码格式 参数名称 类型 参数说明 样例 可空
ASCII 交易类型(trans_type) String 必传:A(支付宝主扫) M
ASCII 接入机构标识(assignid) String 代理商线下入网获取 M
ASCII 商户编号(merch_no) String 商户在SaaS平台的编号 M
ASCII 服务商交易订单号(out_trade_no) String 服务商的交易订单编号(同一服务商下唯一) 161018121614000624679888 M
ASCII 订单金额原(total_amount) String 订单总金额,以元为单位 100 M
ASCII 通知地址(notify_url) String 支付成功后的通知地址 http://test.mdun.cn/jd/pay/notice O
ASCII SAAS终端号(pn) String 标准服务商必填(v1.27增加) M
ASCII 签名(sign) String 可以传递16位 M
ASCII terminal_info String 【259新增】商户侧受理终端信息,字段详 细说明参考下文。 该字段可能过长,需要用两字节来表示长度 该参数传参为JSONObject对象toString方法返回字符串{"device_ip":"123.123.13.25","secret_text":"123", "location":"123","encrypt_rand_num":"123"} 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

请求示例:

带通知地址notify_url字节组拼接顺序:
trans_type + assignid +merch_no + out_trade_no + total_amount + notify_url + pn + sign (+ terminal_info)
带通知地址notify_url签名字符串顺序:
assignid + merch_no + out_trade_no +total_amount + notify_url + pn + trans_type (+ terminal_info)

不带通知地址notify_url字节组拼接顺序:
trans_type + assignid +merch_no + out_trade_no + total_amount + pn + sign(+ terminal_info)
不带通知地址notify_url签名字符串顺序:
assignid + merch_no + out_trade_no +total_amount + pn + trans_type(+ terminal_info)

按照文档顺序
1.针对第一个参数交易类型A,使用1个字节来表示交易类型的ASCII长度(注意:每个参数字节组长度不能超过99个),使用bcd编码获取1个字节 bcd(A.getBytes(“ASCII”).length)
2.获取规定编码的字节组,A.getBytes(“ASCII”)
3.将1和2中字节组进行合并;
4.依次针对所有的字段进行拼接;
5.最后发送字节的16进制字符串:01410863706F73746573740838383838383838381374657374303030303030303036043130303016313231393035303530303030303030311645313445323743343045394544343630

返回参数:只针对返回return_code为10000的情况

编码格式 参数名称 类型 参数说明 样例 可空
ASCII 错误码(return_code) int 10000 代表成功,其他是失败 M
ASCII 服务商交易订单号(out_trade_no) String SaaS平台的交易订单编号 M
ASCII SAAS平台订单号(trade_no) String 凭证条码订单号(v1.24增加) 161018121614000624679888 M
ASCII 支付二维码地址(qr_code) String https://qr.95516.com/00010000/01142955972072216394471211817257 M
UTF-8 错误信息(return_msg) String O
ASCII 签名(sign) String M

返回示例:

与请求方式一样,获取SAAS返回字节组,先通过解析第一个字节获并使用bcd编码获取return_code的长度,根据return_code的值,进行成功和失败两种的解析。解析过程中要注意参数的顺序
1.当retrun_code为10000时,SAAS平台返回字节组顺序是:return_code + out_trade_no + trade_no + qr_code + sign
签名顺序:return_code + out_trade_no + trade_no + qr_code
2.当retrun_code不为10000时,SAAS平台返回字节组顺序是:return_code + ret_msg + sign
签名顺序:return_code + return_msg

SAAS返回字节组转化16进制字符串
053130303030137465737430303030303030303726414C3230303432363135313134333933373530303934373234374668747470733A2F2F71722E616C697061792E636F6D2F6261783035343931376C686D75636F6F7076376836306331324136373637414332384145453130314344453736333635324143353145354541

文档更新时间: 2022-03-14 11:27   作者:admin