一、背景
在完成对接浦发的沙盒环境后,天真地认为:对接生产商户的过程将会是水到渠成。
被残酷的现实摧残打击之后,打算补充一篇文章,把对接浦发的生产环境踩过的坑整理出来。
有句话不吐不快,生产环境下又得把沙盒环境的操作再来一遍,花费那么多时间对接沙盒环境真的是多此一举,无疑是浪费双方的时间。
沙盒环境和生产环境的相关性极低,只有浦发银行API开放平台是共用的,无需你再次去申请APP。
不同的地方就太多了,见下表:
是否相同 | 备注 | |
---|---|---|
商户号 | 否 | 对应字段mrchId |
终端号 | 否 | 对应字段terminalNo |
Secret | 否 | |
clientId | 是 | 一个APP一个clientId,对应上图的X-SPDB-Client-ID |
开发者sm2密钥对 | 是 | |
浦发银行sm2公钥 | 是 | |
rsa密钥对 | 是 | 用于支付回调的报文解密和验签 |
订阅API接口 | 是 | host不同,uri相同 |
1、对接浦发沙盒环境
2、对接浦发生产环境
因为浦发银行支付回调的地址,不仅要登记我们的出口IP地址,而且对端口有要求,只回调80/443端口。
从上图可以看到,我们的生产环境默认就是提供80/443端口,这一点没问题。
但是,公司的研发环境下,第三方支付要访问到内网机器,是通过内外网映射做到的。
也就是说,无法像生产环境那样提供80/443端口让第三方支付回调进来。
这是需要浦发银行走审批流程的,沙盒环境下一天能完成,而生产环境至少3个工作日才能完成。(望知晓这个漫长的等待时间)
二、需要重复做的事项
太多弯弯绕了,对接的时候,就让把所有的手续走完,浦发就愣是走一步算一步。不到你联调说报错了,打死不说还需要做两个事情–这个和那个。(这也是我为什么要写这篇文章的原因,希望你能少走弯路,仅限于希望,实际还是被牵着鼻子走)
- 申请生产商户
- 分配终端号给我们
- 微信商户和支付宝商户的认证,完善资料
- 出口IP报备
填写的是弹性公网IP(我们是在阿里云购买的EIP服务,将EIP绑定到ECS实例,使ECS实例可以连接公网。我们这里是绑定到NAT网关,在NAT网关中维护SNAT条目)
-
需要登记微信公众号appId(我这里涉及到一个公众号和两个小程序)
-
订阅api接口(前文说过的六个接口:对公收款支付、对公收款交易查证、对公收款支付退货、对公收款订单关闭、对公收单API对账单下载、公共文件下载)(支付回调接口是由我们提供)
三、联调遇到过的报错
1、“errCode”:“CBAS003”,“errInfo”:“交易不支持,(请在控制台配置API交易白名单)”
我这边的错误原因是,请求浦发生产环境的时候,商户号和终端号还是使用沙盒环境下的。
为什么会犯这个错呢?
作为对接方,首先不知道商户号会不会变更,群里问过对方,要他们核实过。
当然,我以为商户号是不变的,问他们终端号变还是不变的!!
2、“errCode”:“CBAS000”,“errInfo”:“交易处理失败”
这里要说,它们的报错提示信息都很抽象,抽象到你无法知晓错在哪,一脸懵逼!!!
我这里是因为只更新了商户号,漏了把沙盒环境下的终端号改为生产环境下的终端号。
3、“errCode”:“CBAS006”,“errInfo”:“商户终端经纬度校验未通过”
那是那几句话,不知道错在哪,只能交由浦发银行对接人员去排查。
怎么解决的,我也无从知晓。
该错是在对接jsapi支付的时候报的,后面对方解决了哈。
4、支付成功,没有收到回调
我们是通过接口传参,把支付回调地址给到浦发银行的。
联调沙盒环境的时候,能够收到支付回调。
支付回调地址不变,对接浦发生产环境,死活收不到对方的支付回调,别问我是什么原因,知识已严重超纲了。
幸好我是调用主动查询支付结果接口,更新支付订单的状态,要不然后面的退款都无法测试下去了。
5、扫码付,提示我们去完善商户资料
联系相关人员进行微信支付认证和支付宝支付认证,等待商户号完成认证。
在沙盒环境下,我们已做过这些认证。但是,因为商户号变了,故又需要对新的商户号进行认证。
四、浦发银行API开发平台的IP白名单配置
在联调的时候,报错-- “errCode”:“CBAS003”,“errInfo”:“交易不支持,(请在控制台配置API交易白名单)”,让我们把外网出口IP配置到“IP白名单”里。
后来发现,不是那么回事。只是这个发现的周期有点长。。。
所以,我这里把IP白名单给禁用了,不影响接口调用。
五、总结
前文我也说过,和扫码付不同,jsapi支付一定是需要入参openId,而且在得到了支付元数据后,需要微信APP方能测试支付。
之前在公司研发环境下,对接浦发沙盒环境,公众号的jsapi支付一直都未能通过,报错jsapi授权目录不对 – “当前页面的URL未注册”。(后来使用小程序测试jsapi支付才跳过此错误,因为小程序不需要像公众号那样进行授权)
但是对接浦发生产环境,公众号的jsapi支付一把就测试通过了,也不会再报上述错误了。
从这也看得出来,浦发的沙盒环境的存在是显得多么多余。
如果你也对接浦发银行支付,希望通过我整理的这一系列文章,能够少踩坑,像考驾照那样一把过!