对接浦发银行支付(三)-- QR扫码付

一、使用场景

扫码付,指的是支付平台,给每个用户的具体订单生成一个QR二维码,用户本人或者他人扫码付款。
付款用户可以直接识别二维码,或者下载到本地,通过微信或支付宝扫一扫识别,第二步将跳转至对应的支付页面H5–第三方支付提供。
二维码其实就是一个h5地址,既要支持微信扫,又要支持支付宝扫。

简单的流程如下:
在这里插入图片描述

从上述要求寻找浦发银行的支付方式,交易类型tranType,选择“OK-聚合动态码支付”。

下面将具体介绍浦发银行的扫码付。

二、扫码付接口

和jsapi支付是同一个接口,交易类型不同,且不必要openId。

  • 接口名称:对公收款支付
  • 接口URI:/api/corporateAccounts/payments/orders
  • 请求方式:POST

请求报文

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

  • terminalNo:终端号,在申请商户的时候,由浦发银行分配给我们
  • cmdtyDsc:商品描述
  • tranAmt:交易金额,单位是元
  • iPAdress:这个最容易踩坑,地址的英文明明是address,它偏偏要少写一个d;其次该字段在Lombok自动生成getter/setter的时候,会变成“IPAdress”。
  • mrchlInfmAdr:支付回调的异步通知地址
  • tranType:选择“OK”
  • mrchId:商户号,在联调接口前,先在浦发后台申请好商户(注意:不是浦发开放平台,这也是我想不明白的地方:既然有开放平台,怎么不把商户后台相关功能一并开放给商户呢?这一点还是微信商户后台做得好,真的是让银行望尘莫及了)
  • mrchOrdrNo:平台支付流水号,这个字段命名也是醉了(好端端的订单编号OrderNo,被他给取成了OrdrNo,每次都生怕写错了)

响应报文

  • tranOrdrNo:浦发银行支付流水号,需要保存至支付订单
  • trandDate:交易日期,本来没什么用,查询支付结果接口中需要用到它,且必传参数。
  • qRCdLind:二维码链接,这就是我们本文的主要成果,目标就是为了得到它。
    在这里插入图片描述

示例报文

  • 请求报文
{
    "terminalNo": "98A00162",
    "mrchOrdrNo": "052B40408140404004512",
    "cmdtyDsc": "商品描述",
    "tranType": "OK",
    "mrchId": "310319982990001",
    "IPAdress": "127.0.0.1",
    "mrchTm": "20240408140404",
    "mrchlInfmAdr": "http://122.xx.xx.xx:6008/pay/api/v1/xxx/xxx",
    "tranAmt": "0.01"
}
  • 响应报文
{
    "statusCode": "0000",
    "transNo": "04972404086861405202210686",
    "isSbscrbFlg": "",
    "isFlag": "",
    "pyBnkInfo": "",
    "totalAmt": "",
    "clueDtl": "",
    "byrOfAlipayAcctNO": "",
    "actRcvAmt": "",
    "byrPayAmt": "",
    "usPntsPayAmt": "",
    "toUsEstbInvAmt": "",
    "inrChlCnlNo": "",
    "aLPAYCdBal": "",
    "mrchStrNm": "xxx公司",
    "userId": "",
    "addItInNal": "",
    "fldData": "",
    "clrgDate": "",
    # 支付中状态
    "ordrSt": "09",
    "tranType": "OK",
    "tranAmt": "0.01",
    "thdPtySeq": "",
    "tranOrdrNo": "1901040814042900150041165352",
    "tranDate": "20240408",
    "qRCdLink": "https://etest2.spdb.com.cn/msemk-cli-h5app/#/H5CompanyPay?H5Channel=400&qrCode=https%3A%2F%2Fqr.95516.com%2F03100001%2Fccas%2F129%2FOK%2F5CD652D479B73FE9BCF0BAD1241A4F65AE3E1B9E2F9E1F3CB3DADB91D27CBF52",
    "praPayCmmFlg": "",
    "mrchId": "310319982990001",
    "mrchTm": "20240408140429",
    "signature": "",
    "sgnData": "",
    "aLTrnCrc": "",
    "pymtMd": "",
    "busInfo": "",
    "dscntAmnt": "",
    "mdsctAmnt": "",
    "byUserType": "",
    "apndPyMd": "",
    "pblcAcctId": "",
    "trdMerMechNo": "",
    "weChatSubMechNo": "",
    "bussRetInfo": "",
    "errCode": "",
    "errInfo": "",
    "trdChnl": "",
    "bnkngbsnssSeqNo": "",
    "rsrvFld1": "",
    "rsrvFld2": "",
    "rsrvFld3": "",
    "rsrvFld4": "",
    "rsrvFld5": "",
    "rsrvFld6": "",
    "remark": ""
}

得到了返回字段qRCdLink,在通过下文的在线生成qr二维码,即可测试支付。

三、在线生成二维码

这里介绍一款在线生成二维码的工具:qr-code-generator

在这里插入图片描述

扫描后,跳转到https://etest2.spdb.com.cn/msemk-cli-h5app

交易单号,即浦发银行支付流水号,它是以1901开头的一串数字。

在这里插入图片描述

四、遇到的问题

1、下单账号与支付账号不一致,请核实后再支付

在这里插入图片描述

解决办法:上文讲到了,扫码付虽然不要求openId,但是浦发银行的测试环境要求我们必须把微信用户openId加到白名单。

也就说,我们必须先找到微信公众号appId及其下的openId。

2、“errCode”:“CBAS004”,“errInfo”:“缺少必要字段spbill_create_ip(UP0802100)”

从这个报错信息,根本就无法直观地看出是缺少了哪个必要字段。这是因为下单支付接口请求和响应,找遍了也找不到字段spbill_create_ip。

其实就是请求入参缺少了字段iPAdress。想不明白,为什么接口的字段命名得如此随意。

3、当前页面的URL未注册

在这里插入图片描述

这个错误很常见,解决途径就是在微信商户后台,【产品中心】–》【开发配置】–》【支付授权目录设置】,添加浦发银行的h5页面。
在这里插入图片描述

对接浦发银行系列文章目录:

对接浦发银行支付(一)-- 总体概述与准备工作

对接浦发银行支付(二)-- 公众号JSAPI支付

对接浦发银行支付(三)-- QR扫码付

对接浦发银行支付(四)-- 支付回调接口

对接浦发银行支付(五)-- 主动查询支付结果

对接浦发银行支付(六)-- 请求退款接口与查询退款结果接口

对接浦发银行支付(七)-- 关单接口

对接浦发银行支付(八)-- 对账接口

  • 23
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值