vue 微信公众号支付 jssdk

最近项目搞了公众号  涉及到支付和登陆授权   微信公众号开发没啥特别 不像小程序  这里主要讲一下 这两个地方  

首先要支付就必须要微信登陆 所以就先说一下微信登陆授权  其实很简单 可以看一下 下面的文档  

https://www.cnblogs.com/0201zcr/p/5131602.html

看了这个文档登录没问题的

 

 登陆不是我做的但是因为有很多地方的要用到 还有bug 处理 所以还是去看了下 也看懂了  支付那里主要需要这个登陆获取来的openid 发到后端进行计算 就是拼接加密之类的 反给你签名   所以就一定要微信登陆授权之后才能来研究支付了  

开发支付之前还需要去公众号平台那 进行一些开发者配置 

1、在进行微信支付时,除了需要一个公众号之外,你还需要一个微信商户。根据商户申请规则进行商户申请

2、开始配置开发所需要的参数如下所示:

这是公众号的基本开发配置,这里在微信授权的时候就已经需要配置了 但是注意AppSecret在你第一次配置的时候就需要备份下来,如果没有备份那么下次使用的话你就需要去重置它

网页域名授权,你需要填写正确的可以访问的项目域名,确保微信可以访问

3、公众号配置好后我们需要开始配置微信商户平台的内容了

商户平台需要进行的配置是:商户号,支付密钥

商户号一般都是和自己公众号的商户号是一样的

主要是一个支付密钥的配置

然后是域名配置 和公众号差不多

配置支付的参数完成之后就可以开始进行开发了  不过在支付开发中可能会有些许的麻烦  那就是你不能在线下本机测试,因为IP白名单的限制  除非你将自己的本机地址进行地址映射,但是映射操作比较繁琐,如果自己的项目不是很大的话那就自己麻烦一点部署项目然后进行测试吧,如果你想进行映射之后本机测试这里可以推荐一个组件给你访问链接https://natapp.cn/
 

 

jssdk 引入

然后需要在vue项目中引入jssdk,微信为了方便用户使用,将官方的jssdk发布到了npm上,有一个叫weixin-js-sdk的,但我们需要使用的不是这个,网上很多在vue中引用的是这个,但是这个是为commonjs发布的版本,只能通过require引入,很多人发现在vue中引入import wx from 'weixin-js-sdk',console.log(wx)会出现undefined,实际为了方便es6使用,官方发布了一个weixin-jsapi,这个才是我们能在vue中引用的jssdk。我也在这里被坑了很久。

然后拿到后台返回的配置参数,通过wx.config来验证配置后,在wx.ready里面就可以调用jssdk提供的api了 看代码

import wx from 'weixin-jsapi'
import * as API from "@/api/affirm";
export default {
  data () {
    return {
      
    }
  },
  mounted () {
    API.getconfig(这里如果后端要url 是#前面的部分不包括#号).then((data) => {
      console.log(wx)
       wx.config({
          debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
          appId: data.appId, // 必填,公众号的唯一标识
          timestamp: data.timestamp, // 必填,生成签名的时间戳
          nonceStr: data.nonceStr, // 必填,生成签名的随机串
          signature: data.signature,// 必填,签名,见附录1
         jsApiList: ['chooseWXPay']
        })
      
  })
},
  methods: {
    click(){   //点击触发
     API.getpay(这里是后端要你传的参数).then((data) => {
        var args = data
        wx.ready(function(){
           wx.chooseWXPay({
             timestamp: args.timeStamp, // 支付签名时间戳,注意微信jssdk中的所有使用timestamp字段均为小写。但最新版的支付后台生成签名使用的timeStamp字段名需大写其中的S字符
             nonceStr: args.nonceStr, // 支付签名随机串,不长于 32 位
             package: args.package, // 统一支付接口返回的prepay_id参数值,提交格式如:prepay_id=***)
             signType: 'MD5', // 签名方式,默认为'SHA1',使用新版支付需传入'MD5'
             paySign: args.paySign, // 支付签名
             success: function (res) {
                 这里写成功后的动作 我试过跳转路由好像不灵 或者是执行太快后端处理订单未变化呢 我改成了这个   window.location.href="你所要跳转的页面";
             },
             cancel: function (res) {
                 alert('已取消支付');
             },
             fail: function (res) {
                 alert('购买失败,请重新创建订单')
             }
           });
        });
     }) 
  }
}
}




 

请注意 这里有两个签名 他们是不一样的!!!! debug: true 调试的时候这里这样设置 我报了一个错误 验证签名失败 后来找到服务端 发现是他算法有问题 支付签名算法上网搜一下 后端计算时候可能会出错 我这里是因为timestamp 这个时间戳什么大小写的问题 他改了之后我就可以支付了

这里的

统一支付接口返回的prepay_id参数值,提交格式如:prepay_id=***)

package这个参数格式要注意  如果后端没有加上 你自己加上  

 

支付的内个api 后端要我传ip 这个也是我刚接触的东西 

这里分享一个方法

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />

        <title>获取ip地址</title>
    </head>
    <body >

    </body>
    <script src="http://pv.sohu.com/cityjson?ie=utf-8"></script>
    <script>
    //浏览器返回结果:(前提是需要有网络)
    //var returnCitySN = {"cip": "14.153.20.119", "cid": "440300", "cname": "广东省深圳市"};
        console.log(returnCitySN.cip);

    </script>

</html>

根据项目框架不同自己研究下   怎么引入   

 

 

支付报错的话 根据打印出的错误信息 一个一个排除吧 我这里遇到的都写出来了  

 

开发时有个坑,就是在@click事件中刚进入页面有300ms的延时,导致无法执行点击唤起微信支付;后来改为@touchstart事件可以了;看相关文章https://www.jianshu.com/p/6f85e957a725移动端事件总结

这方面的知识我也是第一次接触而且有些地方的坑可能忘记了 回头会补上 

有什么问题欢迎大家提问一起解决

 

 

  • 7
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
要在Vue2中接入微信公众号JSSDK,您需要按照以下步骤进行操作: 1. 在公众号后台配置JS接口安全域名,确保您的域名已经添加到了微信公众平台的安全域名列表中。 2. 安装使用`weixin-js-sdk`库,可以通过npm进行安装: ``` npm install weixin-js-sdk ``` 3. 在需要使用JSSDK的组件或页面中引入`weixin-js-sdk`库: ```javascript import wx from 'weixin-js-sdk'; ``` 4. 在组件或页面的`mounted`生命周期钩子函数中初始化JSSDK,并进行相关配置: ```javascript mounted() { this.initWeChatJSSDK(); }, methods: { initWeChatJSSDK() { // 异步请求后端接口获取微信配置信息 axios.get('/api/getWeChatConfig') .then(response => { const { appId, timestamp, nonceStr, signature } = response.data; wx.config({ debug: false, appId, timestamp, nonceStr, signature, jsApiList: ['chooseImage', 'scanQRCode'] // 需要使用的JSSDK接口 }); wx.ready(() => { // JSSDK配置成功后的回调函数 console.log('JSSDK配置成功'); }); wx.error((res) => { // JSSDK配置失败后的回调函数 console.error('JSSDK配置失败', res); }); }) .catch(error => { console.error('获取微信配置信息失败', error); }); } } ``` 5. 在需要使用JSSDK的地方调用对应的接口,比如选择图片接口`chooseImage`: ```javascript methods: { chooseImage() { wx.chooseImage({ count: 1, success: function (res) { // 选择图片成功后的处理逻辑 const localIds = res.localIds; // ... }, fail: function (error) { // 选择图片失败后的处理逻辑 console.error('选择图片失败', error); } }); } } ``` 以上是在Vue2中接入微信公众号JSSDK的基本步骤,您可以根据实际需求进行相应的配置和调用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值