每一个做过支付对接的少年上辈子都是折翼的天使。——题记
三方支付对接是一件比较有意思的事儿,今天就拿这个话题来掰扯掰扯。相信每个做过支付对接的小伙伴都有段血与火的经历,那段日子只有痛苦与煎熬,恨不得大骂写文档的都是傻逼,堂堂这么大的互联网公司支付文档都是外包出去的么?然后你在搜索引擎(Google)输入”支付的坑“这几个大字就会找到约4240000条结果,清一色的微信支付宝的坑,当然微信占大多数,也许归结于微信业务增长太快发展时间太短的原因吧。
支付对接的坑到底有哪些呢?在这就讲个码农小明的故事:小明接到大鸟派给的一个支付对接任务,第一步当然是去官网查资料呀,哪儿呢?哪儿呢?支付文档怎么没找到呀?小明着急的去问坑友们,终于在官网的一个小角落看到了文档的链接,小明心想,尼玛终于找到啦,赶紧下载下来看看吧。恩?怎么好几份文档呀?到底哪个版本才是啊?这时候小明没辙了,耐着性子挨个版本看了一个遍。还好,官方还提供了Demo,怎么Demo写的跟文档对不起来呀?小明这时急急忙忙联系上了官方客服,等了好久客服终于答复了,没想到这时客服又传过来几份文档,什么鬼?这份文档才是么?小明忍着骂娘的冲动又耐着性子看完了这份文档。打开IDE,小明熟练的对着文档开始调试起Demo,怎么一直失败?小明无奈的又联系上了上次的客服,这个我不清楚,你联系我们这边技术吧。恩?发邮件?等了好几天终于收到了官方技术回复的邮件。这个参数字母应该大写?文档没说啊。这几个参数要有固定顺序拼接?文档也没说啊。这个参数字数超了?文档没有规定字段大小啊?这个参数必填?文档不是写的非必填么?这地方文档写错了是个bug?什么?文档写错了?!您的代码没问题有可能是商户号权限有问题,要不您重新再申请个商户号试试吧。。。
看到了支付对接这么坑,就有商家嗅到了商机做聚合支付接口,比如Ping++,如果预算足够和工期紧,这也是一个不错的方案。当然还是那种“就差一个写代码的”公司最多,所以那个唯一一个写代码的当然必须自己搞啦。
谈完了支付的坑下面聊聊支付对接的一般流程,这里略过开通和审核阶段,只谈下开发流程,笔者偷懒在这贴张银联支付的流程图:
一般流程说明:
用户在商户网站选定商品并下单,在商户支付页面选择对应支付平台图标,进行支付;
商户按照文档提交支付请求接口组织报文,向支付平台发送支付请求;
如果是PC端,会跳转到对应支付平台的支付页面,如果是移动端,会唤起对应的支付工具,用户在支付平台输入支付信息,提交支付;
支付平台将支付结果通知商户;
若支付成功,则支付平台将交易结果异步发送给商户;
商户若未收到交易结果,则商户按照文档查询接口向支付平台发请求查询该交易,以确定消费交易的状态,支付平台收到查询请求时,将同步返回该笔消费交易的交易结果;
商户若收到交易结果,如果未向支付平台反馈已收到交易结果,支付平台会重复发送交易结果。
在这提一点,由于网络原因等异常情况支付平台可能出现多次发送支付结果的情况,通知回调接口商户要注意做好接口幂等,其余的不再多说。
笔者最近抽时间也写了个支付集成的小Demo,里面已集成支付宝(国内、国际、移动端、PC端)、微信、银联(acp、upop)、光大(网关、网页)、邮政支付,Demo已更新到Github上,地址:https://github.com/Martin404/PayMap,感兴趣的小伙伴可以看看。
关注微信订阅号“Martin说”,每天收获更多Martin的闲扯。