微信环境下支付
在微信环境下,调用微信支付,按照jssdk
文档里的写法,直接调用支付方法就行。
wx.chooseWXPay({
timestamp: 0, // 支付签名时间戳,注意微信jssdk中的所有使用timestamp字段均为小写。但最新版的支付后台生成签名使用的timeStamp字段名需大写其中的S字符
nonceStr: '', // 支付签名随机串,不长于 32 位
package: '', // 统一支付接口返回的prepay_id参数值,提交格式如:prepay_id=\*\*\*)
signType: '', // 签名方式,默认为'SHA1',使用新版支付需传入'MD5'
paySign: '', // 支付签名
success: function (res) {
// 支付成功后的回调函数
}
});
需要注意的地方:
- 调用
chooseWXPay
方法时,需要确保wx.ready
状态下 - 在这种支付下,微信支付后台会配置相应的路径,前端
hash
模式的路由,需要进行处理。
用户访问的页面为:
http://test.com/index.html#/pay/12312312
在这样的页面路径下,发起支付,会报错。需要处理成:
http://test.com/index.html?#/pay/12312312
带上?
让微信支付忽略#
及后面的内容
移动端网页H5
支付
微信h5
支付更简单一些。
正常操作下,前端从后台接口能直接拿到MWEB_URL
, 使用location.href=MWEB_URL
就可以直接跳转支付。
在微信支付文档里列出来的常见问题中,出在前端的,主要是referer
值问题。正常情况下,用a
标签或location.href
方式,都会带上referer
值,只有当从https
链接是往http
链接跳转时,才不会带上。
** 缺用户真实IP导致 支付时出现商家参数格式错误**。
就是后端生成链接时,没有带上用户访问页面的真实ip
导致的。官方文档获取ip
指引。
前端是无法获取用户真实ip
的,真实ip
需要后端拿。
解决这个问题:
- 方法一、后端自己取用户访问链接时的真实
ip
,然后生成支付链接 - 方法二、后端单独出一个获取
ip
的接口,前端先调接口拿到ip
,再在调生成支付链接接口时,把这个ip
作为参数传往后台。