微信支付

1、配置js sdk安全域名

2、调用后端接口,微信初始化配置:

  1. wx.config({
  2. debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
  3. appId: data.appid, // 必填,公众号的唯一标识
  4. timestamp: data.timestamp, // 必填,生成签名的时间戳
  5. nonceStr: data.nonceStr, // 必填,生成签名的随机串
  6. signature: data.signature,// 必填,签名。后端签名的url地址要动态获取,因为分享出去的微信会自带参数
  7. jsApiList: ['onMenuShareAppMessage', 'chooseWXPay'] // 必填,需要使用的JS接口列表
  8. })

3、调用微信授权接口open.weixin…(前后端都可以处理),获取code,再通过code拿到access_token,openid(支付只需要openid,不需要获取头像等信息,所以使用静默授权即可)。这里有个坑,注意后端配置授权回调到前端的地址的时候,如果是是vue单页应用,路径应该test-app.xxx.com/app/index.html?#/pay。app后面的 /? 不能少,最好带上index.html(安卓分享会有兼容性问题)。否则ios会忽略后面的hash路径,授权后直接跳转到 / 路径,安卓是没问题的。

3、公众号上配置支付授权目录,配置前端项目当前域名即可。整个域名下的所有路径都可以支付
4、获取ip

  1. <script src="https://pv.sohu.com/cityjson?ie=utf-8"></script>
  2. <script type="text/javascript">
  3. window.ip = returnCitySN["cip"]
  4. </script>

5、调用后台接口,后台会去请求微信预支付订单,返回预支付订单信息res 包含appId、timeStamp、nonceStr、signType、paySign信息.

6、调用微信支付接口:

  1. wx.chooseWXPay({
  2. timestamp: params.timestamp, // 支付签名时间戳
  3. nonceStr: params.noncestr, // 支付签名随机串,不长于 32 位
  4. package: 'prepay_id=' + params.prepayId, // 统一支付接口返回的prepay_id参数值,提交格式如:prepay_id=\*\*\*)
  5. signType: 'MD5', // 签名方式,默认为'SHA1',使用新版支付需传入'MD5'
  6. paySign: params.sign, // 支付签名
  7. success: function (res) {
  8. alert('支付成功')
  9. // 支付成功后的回调函数
  10. },
  11. fail: function (err) {
  12. console.log('error', err)
  13. },
  14. complete:function(){
  15. alert('complete')
  16. }
  17. })

ios在微信里面的url永远是第一次进入的时候的url。

网页授权无法返回的问题:
任意页面a进入——b页面授权——重定向到中间页,在中间页跳到a。如果在a点击返回,在中间页处理返回时页面跳转到哪的问题。避免跳到b页面,造成无法返回