当前位置:   article > 正文

uniapp---H5端(微信公众号支付 和 支付宝支付)_uniapp 微信公众号支付

uniapp 微信公众号支付

文章目录

微信公众号支付

    提示:第一步:当用户完成登录时,判断浏览器环境(微信内置浏览器/手机浏览器);

        第二步:判断用户是否关注了微信公众号;

        最后一步:调起微信公众号支付;

第一步:点击登录完成后,开始判断环境(微信内置浏览器/手机浏览器),如果运行环境是微信的话,请求后端接口判断该账号是否绑定微信公众号,如果没绑定则请求微信官方接口并获得包含code的回调链接;

      os:把判断绑定微信公众号方法写在登录页面,可以让订单支付页面代码更干净;

  1. Login() { //登录
  2. let that = this;
  3. uni.$u.http.post('接口地址', {
  4. data:'参数'
  5. }).then(res => {
  6. if (res.code == 0) {
  7. uni.$u.toast(res.msg);
  8. return false;
  9. }
  10. let userInfo = res.data.userinfo;
  11. uni.setStorageSync('userInfo', userInfo);
  12. uni.setStorageSync('token', userInfo.token);
  13. that.is_wx()
  14. }).catch(err => console.log(err))
  15. },
  16. is_wx() { // 判断是否在微信环境中
  17. let that = this;
  18. let en = window.navigator.userAgent.toLowerCase();
  19. if (en.match(/MicroMessenger/i) == 'micromessenger') { // 微信内置浏览器
  20. uni.$u.http.post('接口路径').then(res => {
  21. if (res.code == 0) { // 未绑定微信公众号
  22. that.getWeChatCode()
  23. } else {
  24. uni.switchTab({
  25. url: '/pages/mine/mine'
  26. })
  27. that.$router.go(0);
  28. }
  29. }).catch(err => console.log(err))
  30. } else { // 手机浏览器
  31. uni.switchTab({
  32. url: '/pages/mine/mine'
  33. })
  34. that.$router.go(0);
  35. }
  36. },

第二步:判断用户是否关注了微信公众号;

  思路:因为授权成功后微信会跳转到我们设置的回调地址,需要提前在onload中设置一下;

  1. onLoad(e) {
  2. const hasWechatLogin = uni.getStorageSync('wechat_login_tag') || null;
  3. if (hasWechatLogin) {
  4. this.checkWeChatCode();
  5. }
  6. },

  思路:把后台所需的code以及其他信息调用接口传参 

  1. // 重定向回来本页面检查有没有code
  2. checkWeChatCode() {
  3. let code = this.getUrlCode('code');
  4. if (code) {
  5. this.bindingXH5(code)
  6. }
  7. },
  8. // 正则匹配请求地址中的参数函数
  9. getUrlCode(name) {
  10. return decodeURIComponent((new RegExp('[?|&]' + name + '=' + '([^&;]+?)(&|#|;|$)').exec(location.href) ||[, ''])[1].replace(/\+/g, '%20')) || null
  11. },
  12. // 看地址中有没有code参数,如果没有code参数的话则请求微信官方的接口并获取包含code的回调链接
  13. getWeChatCode() {
  14. //用于退出登录回来不会再调一次授权登录
  15. uni.setStorageSync('wechat_login_tag', 'true');
  16. const appID = ''; //公众号appID
  17. const callBack = ''; //回调地址
  18. //通过微信官方接口获取code之后,会重新刷新设置的回调地址【redirect_uri】
  19. window.location.href = 'https://open.weixin.qq.com/connect/oauth2/authorize?appid=' +
  20. appID + '&redirect_uri=' + encodeURIComponent(callBack) +
  21. '&response_type=code&scope=snsapi_userinfo&state=1#wechat_redirect'
  22. },
  23. // 绑定微信把后端需要的code以及其他信息调用接口传过去
  24. bindingXH5(code) {
  25. let that = this;
  26. uni.$u.http.post('/user/third', {
  27. code
  28. }).then(res => {
  29. if (res.code == 0) {
  30. uni.$u.toast("绑定失败")
  31. } else {
  32. uni.switchTab({
  33. url: '/pages/mine/mine'
  34. })
  35. that.$router.go(0);
  36. }
  37. }).catch(err => console.log(err))
  38. },

最后一步:页面调起微信公众号支付;

   提示:h5 绑定微信公众号,res是后端返回的数据,里面包含需要的信息;

       appId 参数必填(公众号唯一标识);timeStamp 参数必填(生成签名的时间戳);

       nonceStr 参数必填(生成签名的随机串);signType 参数必填(签名);

  1. wxH5Pay(res) {
  2. let that = this;
  3. var data = res;
  4. WeixinJSBridge.invoke('getBrandWCPayRequest', {
  5. debug: true,
  6. appId: res.data.appId,
  7. timeStamp: res.data.timeStamp,
  8. nonceStr: res.data.nonceStr,
  9. package: res.data.package,
  10. paySign: res.data.paySign,
  11. signType: res.data.signType,
  12. }, function(res) {
  13. if (res.err_msg === 'get_brand_wcpay_request:ok') {
  14. // 支付成功的处理逻辑
  15. uni.showToast({
  16. title: '微信支付成功',
  17. icon: 'none'
  18. })
  19. uni.navigateTo({
  20. url:'/pages/mine/订单列表/订单列表'
  21. })
  22. } else if (response.err_msg == "get_brand_wcpay_request:cancel") {
  23. // 支付过程中取消支付
  24. uni.showToast({
  25. title: '取消支付',
  26. icon: 'none'
  27. })
  28. } else {
  29. uni.showToast({
  30. title: '支付失败',
  31. icon: 'none'
  32. })
  33. }
  34. });
  35. },

支付宝支付

 OS:你没有看错,你不用怀疑!只有两行代码,不信的话你试一下就知道喽!对了对了,怕一些笨蛋不知道怎么用,我就再多嘴几句哈。这里只需要把请求后端接口成功后返回的订单信息,也就是接口成功返回的res赋值就可以了。

  1. document.querySelector('body').innerHTML = res;
  2. document.forms[0].submit();

尾结

  提示:文章会有些思路断点但重点部分没问题,等我下次重新整理一下!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/爱喝兽奶帝天荒/article/detail/914441
推荐阅读
相关标签
  

闽ICP备14008679号