反扫码支付
1、修订记录
修订记录 | 日期 | 说明 |
---|---|---|
1.0 | 2023.11.01 | 初版 |
2、业务说明
(1)接口说明
场景说明:
商家需使用扫码枪等条码识别设备,扫描用户钱包上的 条码/二维码 完成收款,用户仅需出示付款码,所有收款操作由商家端完成。适用于各类商家系统,如大型商超、餐饮,连锁品牌等商家。
注意事项:
1、整合银联云闪付、微信、支付宝反扫接口,调用该接口进行反扫支付
2、收银员使用扫码设备读取用户 APP 展示的二维码后,商家系统识别付款APP, 通过系统调用该接口发起支付
3、当收单机构返回支付中或交易状态不明时, 需要调用交易查询接口查询订单实际支付状态。
4、notifyUrl 通知字段,支持成功时异步通知。
请求主体类型:application/json
请求方式:POST
3、请求地址
环境 | HTTPS请求地址 |
---|---|
测试环境 | https://appdev.ysepay.com/openapi/unify/scan/barcodepay |
正式环境 | https://ysgate.ysepay.com/openapi/unify/scan/barcodepay |
4、请求参数说明
4.1、公共请求参数
参数 | 类型(长度) | 必填 | 参数说明 |
---|---|---|---|
timeStamp | String | Y | 发送请求的时间,格式"yyyy-MM-dd HH:mm:ss" |
method | String(128) | Y | 接口名称,固定值:unify.scan.barcodepay |
charset | String(10) | Y | 请求使用的编码格式,如utf-8,gbk,gb2312等,固定为utf-8 |
sign | String | Y | 商户请求参数的签名串(签名算法默认为国密),详见demo,注意:请用商户私钥进行签名 |
check | String | Y | 银盛公钥加密随机生成的字符串(key)得到的加密值,详见demo |
bizContent | String | Y | 业务参数的集合,最大长度不限,除公共参数外所有请求参数都必须放在这个参数中传递。注意:需要通过AES以及随机生成的字符串(key)加密业务参数集合,得到bizContent |
reqId | String | Y | 请求唯一流水号,商户系统唯一,要求32个字符内(最少14个字符),只能是数字、大小写字母_-且在同一个商户号下唯一。最后12位要求格式为"yyMMddHHmmss" 示例值:xy1415220315145602 |
certId | String | Y | 发起方商户号,服务商在银盛给自己开设的商户号,即可当作发起方商户号,由银盛生成并下发。 注意:不同于子商户号,服务商发展的商户即为子商户号 |
version | String | Y | 调用的接口版本,固定为:1.0 |
4.2、业务请求参数
(bizContent加密前的json数据明文字符串)
参数 | 类型(长度) | 必填 | 参数说明 |
---|---|---|---|
orderId | String(32) | Y | 商户订单号,商户系统生成的订单号,要求如下: 1、须保证在商户端不重复。 2、只能由大小写英文字母、数字、下划线及横杠组成。 建议前8位为交易日期,如20220525,范围跨度支持包含当天在内的前后一天,示例值:202205256843192280647118。 |
shopDate | String(8) | Y | 交易日期 |
note | String(250) | Y | 订单备注 |
amount | String(10) | Y | 订单总金额,该笔订单的资金总额,必须为正整数,单位为:分。 |
currency | String(3) | N | 交易币种,默认CNY(人民币)。 |
payeeMercId | String(20) | Y | 收款商户号,收款商户号(银盛支付生成并下发)。 |
payeeMercName | String | N | 收款方商户名称,收款商户号对应商户名称。 |
timeOutExpress | String(5) | Y | 交易超时时间,订单失效时间, 单位分钟,最小1分钟,最长不超过21600分钟.。 |
extendParams | String(500) | N | 业务扩展参数,业务扩展参数,一个json字符串,orderMode订单模式,暂时可选的值为:00 代表购物车模式;sellerList参与分账的收款方信息数组,每个元素包含sellerId收款方银盛支付用户号。实时分账业务,orderMode和sellerList均不能为空,orderMode的值必须为00。样列:{ "cartType": "00", "orderMode": "00", "sellerList": [{ "sellerId": "123" }, { "sellerId": "456" }] }。示例值:样例8.8 |
extraCommonParam | String(2000) | N | 公用回传参数, 商户自定义数据域,原样返回。 |
busiCode | String(10) | Y | 业务代码,请联系银盛客户经理获取。注意:业务代码非固定值,不同到账方式需要传不同的业务代码。 |
bankType | String(9) | N | 二维码行别,微信:1902000;支付宝:1903000;中国银联:9001002;招商银行:3085840。 |
scene | String(32) | N | 支付场景,条码支付取值:bar_code 声波支付取值:wave_code 刷脸支付:security_code。注:当bankType域为支付宝:1903000时,此域为必填字段。 |
authCode | String(1000) | Y | 扫码支付授权码,扫码支付授权码(APP中的付款码),设备读取用户展示的条码或者二维码信息。 |
deviceInfo | String(32) | N | 终端设备号,当bank_type域为中国银联:9001002时,此域为必填字段。银联反扫必传8位整数 ,支付宝上送终端号共用此字段。 |
subMerchantInfo | Object | N | 二级商户信息 |
consigneeInfo | Object | N | 收货人信息 |
appId | String(32) | N | 微信公众号账号ID,微信分配的子商户公众号账号ID 示例值:wx8888888888888888。 |
limitCreditPay | String(2) | N | 是否限制信用卡,类型如下: 0:不限制(默认值); 1:禁用信用卡; 2:禁用花呗; 3:禁用花呗分期; 4:禁用所有信用支付类型 |
hbFqNum | String(2) | N | 花呗分期期数,仅支付宝支付的时候生效,目前期数支持6,12 示例值:6。 |
allowRepeatPay | String(1) | N | 是否允许多次支付,Y:允许;N:不允许; 当参数为空或者Y时,如果该笔订单交易状态非成功状态时,支持选择其他支付方式继续付款; 当参数为N时表示当该笔订单交易状态为失败状态时,不支持选择其他支付方式继续付款; |
failNotifyUrl | String(190) | N | 失败通知地址,交易状态为失败时,银盛支付服务器主动通知商户网站里指定的页面http路径,支持多个url进行异步通知,多个url用分隔符“,”分开,格式如:url1,url2,url3 注:只有不允许多次支付的交易才会通知。 |
notifyUrl | String(500) | Y | 通知地址,交易成功异步通知到商户的后台地址,支持多个url进行异步通知,多个url用分隔符“,”分开,格式如:url1,url2,url3。 |
detail | Object | N | 微信商品详情 |
aliGoodsDetails | Array | N | 支付宝营销信息 |
srcIP | String(16) | Y | 发起方IP |
submerIp | String(16) | N | 子商户ip |
storeId | String(32) | N | 商户门店编号 |
alipayStoreId | String(32) | N | 支付宝的店铺编号 |
operatorId | String(28) | N | 商户操作员编号 |
unionQrcodeParams | Object | N | 银联259号文条码改造字段 |
terminalParams | String | N | 设备终端信息,支付宝刷脸支付时,商户传入设备终端字段,json格式。 |
businessParams | String | N | 支付宝刷脸支付参数,支付宝刷脸支付时,商户传入的业务参数,应用于安全,营销参数等直接传入场景,json格式。 |
extendParamsChannel | String | N | 支付宝业务拓展参数,支付宝业务拓展参数json格式,示例: { "food_order_type": "qr_order" }。 |
fqType | String(2) | N | 分期类型,值为00表示花呗分期,值01表示信用卡分期。不填默认为花呗分期 |
4.2.1 subMerchantInfo具体参数
参数 | 类型(长度) | 必填 | 参数说明 |
---|---|---|---|
merName | String(50) | N | 二级商户名称 |
merShortName | String(50) | N | 二级商户简称 |
merAddr | String(200) | N | 二级商户地址 |
telephone | String(13) | N | 客户手机号 |
merNo | String(32) | N | 二级商户编号 |
category | String(20) | N | 类目编号 |
mrchntCertId | String(18) | N | 身份证号,只支持身份证格式。 |
4.2.2 consigneeInfo具体参数
参数 | 类型(长度) | 必填 | 参数说明 |
---|---|---|---|
consigneeName | String(150) | N | 收货人姓名 |
consigneeAddr | String(200) | N | 收货地址 |
transportationInfo | String(200) | N | 物流配送信息,物流名称+订单号。 |
commodityName | String(150) | N | 商品名称 |
commodityNumber | String(10) | N | 商品数量 |
4.2.3 detail具体参数
参数 | 类型(长度) | 必填 | 参数说明 |
---|---|---|---|
costPrice | String(10) | N | 订单原价,单位分。 |
receiptId | String(32) | N | 商品小票ID,长度不能超过32位。 |
goodsDetails | Array | N | 商品列表 |
4.2.3.1 goodsDetails具体参数
参数 | 类型(长度) | 必填 | 参数说明 |
---|---|---|---|
goodsId | String(32) | Y | 商户商品编码,由半角的大小写字母,数字,下划线,中划线中的一种或者几种组成,长度不能超过32位 示例:Shouji_abcef_001-001。 |
wxpayGoodsId | String(32) | N | 微信商品编号 |
goodsName | String(256) | N | 商品实际名称,长度不能超过256。 |
quantity | String(10) | Y | 数量,只能是正整数。 |
price | String | Y | 商品单价,单位分。 |
4.2.4 aliGoodsDetails具体参数
参数 | 类型(长度) | 必填 | 参数说明 |
---|---|---|---|
goodsId | String(32) | Y | 商品编号 |
alipayGoodsId | String(32) | N | 支付宝商品编号,支付宝定义的统一商品编号。 |
goodsName | String(256) | Y | 营销单品名称 |
quantity | String(10) | Y | 营销单品数量,不超过10位的正整数。 |
price | String(12) | Y | 营销单品单价,单位分。 |
goodsCategory | String(24) | N | 营销单品类目 |
categoriesTree | String(128) | N | 营销单品类目树 |
body | String(1000) | N | 营销单品描述 |
showUrl | String(400) | N | 营销单品展示地址 |
4.2.5 unionQrcodeParams具体参数
参数 | 类型(长度) | 必填 | 参数说明 |
---|---|---|---|
terminalNo | String(8) | N | 终端号 |
terminalType | String(2) | N | 终端类型,线下交易场景必填,类型如下: 01-自动柜员机(含 ATM 和 CDM)和多媒体自助终端 02-传统 POS 03-mPOS 04-智能 POS 05-II 型固定电话 06-云闪付终端 07-保留使用 08-手机 POS 09-刷脸付终端 10-条码支付受理终端 11-辅助受理终端 12-行业终端(公交、地铁用于指定行业的终端) 13-MIS 终端 |
serialNum | String(50) | N | 终端序列号 |
networkLicense | String(5) | N | 入网认证编号,银行卡受理终端产品入网认证编号。 |
appVersion | String(5) | N | 终端应用版本号,终端应用程序的版本号。 |
terminalGps | String(32) | N | 交易设备位置信息,格式:纬度/经度,东经为正数,西经为负数;北纬为正数,南纬为负数,线下交易场景、terminal_ip和terminal_gps 二者选其一 必填。 |
terminalIp | String(8) | N | 终端设备IP,如经、维度信息未上送,该字段必送。 |
encrypRandNum | String(10) | N | 加密随机因子 |
secretText | String(16) | N | 密文数据 |
5、响应参数说明
请注意:银盛后期会对返回参数保留扩展的权力,扩展方式为新增参数但不会删除参数,请商户在解析银盛返回参数时要支持银盛可能扩展参数这种情况。5.1、公共响应参数
参数 | 类型(长度) | 必填 | 参数说明 |
---|---|---|---|
code | String(5) | Y | 网关响应码,示例值:00000 ,详见网关公共响应码 |
msg | String(50) | Y | 网关响应码描述 |
subCode | String | Y | 业务响应码,参见具体的API接口文档 |
subMsg | String | Y | 业务响应描述 |
timeStamp | String | Y | 响应时间,格式"yyyy-MM-dd HH:mm:ss" |
norce | String(128) | Y | 随机参数 |
sign | String | Y | 响应参数的签名串,详见demo, 注意:请用银盛公钥进行验签 |
businessData | String | Y | 业务响应参数集合, 注意:银盛网关通过AES加密业务响应参数集合,得到businessData,商户需要对其进行解密,详情请见demo |
5.2、业务响应参数
响应业务参数businessData(json数据)
参数 | 类型(长度) | 必填 | 参数说明 |
---|---|---|---|
reqMsgId | String | Y | 请求流水号,同⼊参请求流水号 |
systemCode | String | N | 系统编码 |
businessData | Object | Y | 响应结果对象 |
5.2.1 businessData具体参数
参数 | 类型(长度) | 必填 | 参数说明 |
---|---|---|---|
orderId | String | Y | 商户订单号,同请求订单号。 |
tradeSn | String | N | 交易流水号 |
tradeStatus | String | Y | 交易状态,如下: 00-交易成功 01-支付成功 02-支付成功,人工入账 10-待支付 11-处理中,已向渠道发起 13-全部已支付(担保交易使用)等待发货 14-未确认收货(等待付款方确认) 50-业务超时 80-部分退款 81-全部退款 93-订单撤销 96-交易失败 97-客户主动关闭 98-支付失败 99-到时关闭' |
tradeStatusExt | String | N | 交易扩展状态,如下: 11-用户支付中,需要输入密码,可对该交易做查询,避免重复支付。 |
amount | String | Y | 订单总金额,该笔订单的资金总额,单位分。 |
accountDate | String(19) | N | 入账日期,银盛入账日期,格式"yyyy-MM-dd" ,示例值:2017-05-01。 |
openId | String | N | 用户唯一标识,子商户appid下用户唯一标识。 |
couponInfo | String | N | 银联优惠信息,couponInfo优惠信息活动对象为多个时,couponInfo中就有多方优惠信息spnsrId出资方,值为1时银联出资,值为2时付款方出资,值为3时商户出资,offstAmt优惠金额(单位分) 。 |
settlementAmount | String(10) | N | 结算金额,单位分,示例值:100。 |
isDiscount | String | N | 是否参与优惠,Y:是,N:否。 |
totalDiscountFee | String(10) | N | 总优惠手续费,单位:分。 |
totalDiscount | String(10) | N | 总优惠金额,单位:分。 |
extraCommonParam | String(2000) | N | 商户自定义数据域 |
paySuccessTime | String(19) | N | 支付完成时间,格式"yyyy-MM-dd HH:mm:ss", 示例值:2014-07-24 03:07:50。 |
buyerUserId | String(128) | N | 支付宝用户Uid |
cardType | String(5) | N | 支付卡类型,类型如下: credit-信用卡 debit-借记卡 示例值:credit。 |
riskInfo | String | N | 风险信息json串 |
preferentialAmount | String(10) | N | 惠金额,单位:分。 |
preferentialFee | String(10) | N | 优惠手续费,单位:分。 |
marketingRuleJson | String | N | 营销规则,JSON字符串。 |
6、业务响应码 网关公共响应码
响应码 | 响应码描述 | 解决方案 |
---|---|---|
0000 | 交易成功 | 请求成功后,根据参数businessData里面的业务信息进行业务处理。 |
9999 | 失败 | 具体原因查看描述。 |
5000 | 交易超时 | 订单超时后,调用查询接口进行查询订单状态。 |
A029998 | 网关非法参数 | 检查请求参数,修改后重新发起请求。 |
B020100 | 前置无提供者 | 检查请求参数,修改后重新发起请求。 |
B021100 | 前置系统参数验证错误 | 检查请求参数,修改后重新发起请求。 |
B022011 | 发起方商户号和商户号的归属关系校验失败 | 检查发起方商户号和商户号的归属关系。 |
B023006 | 订单重复支付 | 检查订单号是否重复,重新生成订单号。 |
B029901 | 业务失败 | 根据实际返回消息分析具体原因。 |
B049900 | 获取支付网关编号失败 | 检查行别。 |
B044012 | 查询第三方商户号出错 | 输入正确的商户号。 |
B044335 | 获取支付网关编号失败 | 注意金额、行别需要填正确 |
B059999 | 失败 | 具体原因查看描述。 |
B049999 | 失败 | 具体原因查看描述。 |
A029994 | 前置无提供者异常 | 检查请求参数,修改后重新发起请求。 |