微信H5支付遇到的坑

网页唤醒微信APP时报错

报错提示:商家参数格式有误,请联系商家解决
解决方案:
1. 当前调起H5支付的referer为空导致,一般是因为直接访问页面调起H5支付,请按正常流程进行页面跳转后发起支付,或自行抓包确认referer值是否为空
2. 如果是APP里调起H5支付,需要在webview中手动设置referer,如
(Map extraHeaders = new HashMap();
extraHeaders.put(“Referer”, “商户申请H5时提交的授权域名”);
//例如 http://www.baidu.com ) )
– 需要注意,如果使用微信官方提供的示例H5:
http://wxpay.wxutil.com/mch/pay/h5.v2.php
得配置与之相对应的域名: wxpay.wxutil.com

spbill_create_ip参数的获取

当时使用官方提供的方式,在Java后端获取手机端的IP,结果一直报错:网络环境未能通过安全验证,请稍后再试。
后来尝试,在网页前端使用了一个搜狐的JS库,然后用参数传递给后端,问题解决。

支付后的页面跳转

微信H5之后后的回调地址,是可以自定义的,而且可以添加自定义参数。注意:redirect_url后面加的网址需要encode一下
代码片段:

logger.info("微信支付回调链接为:" + callBackUrl);
try {
    callBackUrl = URLEncoder.encode(callBackUrl, "UTF-8");
}
catch (UnsupportedEncodingException e) {
    logger.error("微信回调链接encode出错", e);
}
wechatUrl = wechatUrl + "&redirect_url=" + callBackUrl;

由于设置redirect_url后,回跳指定页面的操作可能发生在:
1. 微信支付中间页调起微信收银台后超过5秒
2. 用户点击“取消支付“或支付完成后点“完成”按钮。
因此无法保证页面回跳时,支付流程已结束,所以商户设置的redirect_url地址不能自动执行查单操作,应让用户去点击按钮触发查单操作。回跳页面展示效果可参考下图:
微信H5支付遇到的坑_第1张图片
附:
微信H5支付官方文档

你可能感兴趣的:(Java)