微信H5支付

项目涉及到微信H5支付,记录一下,省的再用的时候跑去翻别人的

H5支付 : 手机web页面唤醒微信客户端进行支付

申请 : 以前需要联系微信客服申请,现在可以在微信商户平台里开通

H5支付开发步骤:

https://pay.weixin.qq.com/wiki/doc/api/H5.php?chapter=15_4

常见问题:

1    回调页面判定问题

    正常情况下,正常流程用户支付完成后会返回至发起支付的页面 ,如下图,我们在微信客户端支付成功后,系统会自动切换到浏览器的该页面(不会刷新页面)


微信H5支付_第1张图片

官方文档里建议引导用户手动确认支付结果,即下图中的弹窗,那么在  什么时刻去弹出这个引导框 呢,

微信H5支付_第2张图片

我做了一下测试,从微信支付完成 到 切换回 浏览器支付前页面这一过程,并没有一个明确的事件可以让我们用来界定 切换 回来,使用 js 里的 beforeunload、unload、或者监听 窗口的 hidden 属性 都或多或少的存在兼容性问题,我测试了几种效果,最终选择 点击确认支付 按钮后使用setTimeout(,2000) 来弹出该引导框 

2 商家参数格式有误问题

开发文档里标注是由于 当前调起H5支付的referer为空导致,什么时候会造成referer为空呢?

$_SERVER['HTTP_REFERER'] 完全来源于浏览器。并不是所有的用户代理(浏览器)都会设置这个变量,而且有的还可以手工修改 HTTP_REFERER。因此,$_SERVER['HTTP_REFERER'] 不总是真实正确的。

$_SERVER['HTTP_REFERER'] 会无效:

1、直接输入网址访问该网页。

2、Javascript 打开的网址。

3、Javascript 重定向(window.location)网址。

4、使用 meta refresh 重定向的网址。

5、使用 PHP header 重定向的网址。

6、flash 中的链接。

7、浏览器未加设置或被用户修改。

所以一般来说,只有通过 超链接 href以及 POST 或 GET 表单访问的页面,$_SERVER['HTTP_REFERER'] 才有效。

另外还有一个问题需要注意 ,要在支付页面打开 唤醒微信客户端链接,尽量避免中间穿插跳转,一些手机厂商自带的浏览器会对 referer 的判定不一样,由于背景原因,我在这里入坑一次

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

 商户侧统一下单传的终端IP(spbill_create_ip)与用户实际调起支付时微信侧检测到的终端IP不一致导致

例如:(无代理情况下)

我在局域网中开发,手机使用charles代理访问微信统一下单接口,此时 后台php获取到的 clientIP为 

192.168.32.100 ,为局域网IP,但是微信服务器验证我的IP时,却使用的是我的外网IP 与 局域网IP做对比,所以开发时需要先 固定spbill_create_ip为公网 ipv4 地址,然后访问统一下单接口。

你可能感兴趣的:(微信H5支付)