开发第三方支付功能(续)

上次有讲到最近开发支付功能,开发中碰到的一些问题,因为之前很少接触支付功能的开发,所以项目要求在H5中要迅速打通微信支付功能以及支付宝支付功能,我在前一篇文章中选择了支付宝当面付支付以及微信Native扫码付支付。

        但是在H5中使用支付宝当面付支付以及微信Native扫码付支付真的合适么,如果我们抛开用户体验来讲,确实支付宝当面付支付可以满足我们的需求了,用户在H5中保存二维码,然后进入支付宝进行扫码付款操作,整个流程是没问题的。但是微信Native扫码付支付呢,这里面其实就有个坑,微信Native扫码付只能进行扫码支付,而且不能支持从相册中选择二维码,也就是说微信Native扫码付支付只支持当面扫码支付,而用户使用不可能总是携带两个手机,一只显示二维码,一个用户扫码支付,这有点不切实际。而我写上篇文章的时候测试因为用电脑显示二维码,手机直接扫码支付所以当时没发现这个问题。所以说在不考虑用户体验的角度来说,支付宝当面付支付可以满足我的需求了,但是微信Native需求满足不了我的基本需求了,所以微信Native扫码付支付方式被我pass掉了,然后我去查阅文档发现,其实微信是有提供H5端直接跳转微信进行支付操作的,而这刚好是我需要的,而且直接跳转微信进行支付大大提高了用户的体验性,所以我最后改写支付功能的时候我选择了微信H5支付。接下来说说微信H5支付遇到的一些坑。

微信支付踩过的坑

1.网络环境未能通过安全验证,请稍后再试

微信H5支付需要传递用户支付的真实ip给微信进行校验。这个bug其实是因为用户实际调起支付时微信侧检测到的终端IP和商户端我们传给微信的用户的终端ip不一致导致的。其实在公司内网进行测试的时候是没问题的,可以获取到用户当前操作的真实ip,测试支付功能完全没问题。但是我上传外网的时候就出问题了,外网测试获取到的ip不是用户的真实ip,导致微信端获取到的ip与我们获取到的ip不一致,导致网络环境无法通过校验。


上图就是我在外网测试得到的用户ip,因为外网有nginx反向代理。所以我们获取到的ip其实是nginx的代理地址,而真实ip我们是无法得到的。后来经过查阅文档发现配置nginx可以将用户真实ip进行传递。

我在外网nginx添加以上配置,果然就可以获取到当前用户进行支付时的真实ip

2.商家参数格式有误,请联系商家解决

这是微信官方文档对这个问题的解释,这是什么意思呢?其实进行微信支付时微信会返回一个mweb_url给你进行支付,我们在申请H5支付时会设置授权域名,网页调取支付H5支付返回的mweb_url ,必须要获取H5支付页面自带的referer才行(问题是当前调起H5支付的referer为空导致),导致referer为空的原因其实是因为微信返回的mweb_url我们直接进行访问导致的,而直接访问mweb_url就会导致无法获取到H5支付页面自带的referer,所以我们在H5中进行点击跳转到mweb_url中就解决了这个问题了。

3.商家存在未配置的参数,请联系商家解决

这个问题比较简单,当前调起H5支付的域名(微信侧从referer中获取)与申请H5支付时提交的授权域名不一致,我们登录商户平台--"产品中心"--"开发配置"配置当前调起支付的授权域名即可。

微信H5支付因为是从Native支付方式进行改写的,所以难度相比重新开发小了很多。在开发过程中主要时碰到了上述三个问题,在这里记录一下。

欢迎关注我的个人公众号:周先生自留地


把微信H5支付完善了之后,你看到两个支付功能一个截图再去扫码,一个直接跳转微信支付,其实你会不知不觉的开始考虑用户体验,所以我就去看了支付宝官方文档,支付宝可不可以实现我们直接从H5端直接跳转支付宝进行支付呢,答案是可以的,支付宝有手机网站支付方式,用户手机安装支付宝会直接跳转支付宝进行支付,用户没有安装支付宝可以在H5端登录支付宝进行支付。于是我又开始了把支付宝当面付功能改写成支付宝H5支付方式。下面讲讲支付宝H5支付碰到的一些问题。

1.签名问题

这个问题其实是由于公司账号申请支付宝H5支付的时候使用了RSA2加密算法,但是之前用的当面付还是使用的RSA算法,因为工作交接不彻底的缘故我不清楚,所以导致签名验证一直失败。后面我将app_id更换成H5支付的app_id,加密算法改成了RSA2算法,就解决签名问题了。

2.无效的app_id参数

这个问题真的是不应该犯的错误,因为我用了正式环境的app_id,但是我地址却使用了沙箱环境的地址,两者不匹配导致的无效的app_id,我改成正式地址之后就解决这个问题了。

可能是因为支付宝集成的比较好,我从当面付支付改写成H5支付没有遇到什么比较困难的问题,而且文档写的也比较清楚,支付宝H5支付相比于当面付其实就是支付方式从alipay.trade.precreate改成了apipay.trade.wap.pay,以及biz_content添加一个product_code的固定参数,所以思路比较清晰,改写起来没有花费特别多的时间就完成了。

到这里,支付宝H5端支付与微信H5端支付都完成了内外网测试,解决了需求了。这篇文章就写到这里了,谢谢观看。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • (转)常用dos命令 一,ping 它是用来检查网络是否通畅或者网络连接速度的命令。作为一个生活在网络上的管理员或...
    都不许我哭阅读 255评论 0 0
  • 转载:社交榜 Top 5 产品,4 个月骗取 3000 万+ 文章转自:iGrowth增长侦探社 在文章的开头,探...
    村里的颜值担当阅读 1,142评论 0 0
  • xin激流勇进阅读 347评论 0 0
  • 原来是我会错意了,我想的太多,不好意思,余生也不需要指教了。这段时间当我喂给狗了 我现在需要做的,不是死乞白赖的问...
    软萌小草莓阅读 166评论 0 0
  • 刚才翻看了2016年的总结和2017年的规划,我惊讶地发现,自以为一事无成的2016年,我竟然做了那么多的事。 2...
    怡记阅读 831评论 4 14