(vue中js-sdk配置)微信公众号开发

最近在开发公众号,遇到了很多坑,网上的很多搜索自己用的时候才发现到处都是雷,大家都不测试就随便发的吗?
因为要用到微信的扫码,以及获取当前位置等功能,所以就有了下面的踩坑之路

搜索-网上找到了大家引入weixin-js-sdk的教程,于是欢天喜地的install了

npm install weixin-js-sdk

后来vue文件中引入,结果引入却打印不出来

import wx from 'weixin-js-sdk'
console.log(wx)   // undefined是个什么鬼

折腾好久始终打印不出来我终于放弃了
然后我继续搜索。。。。。
终于让我找到了神奇的weixin-jsapi,然后就欢天喜地的成功了

npm install weixin-jsapi
import wx from 'weixin-jsapi
console.log(wx)  // 终于成功打印出来了

然后就有了愉快的wx.config一系列操作(推荐配置项通过后台接口拿到哦,我看不少小伙伴直接是页面写死的),代码在微信公公众平台的开发文档都有,请移步微信公众平台网页开发–js-sdk

wx.config({
  debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
  appId: '******************', // 必填,公众号的唯一标识
  timestamp: , // 必填,生成签名的时间戳
  nonceStr: '', // 必填,生成签名的随机串
  signature: '',// 必填,签名
  jsApiList: ['scanQRCode','getLocation'] // 必填,需要使用的JS接口列表 用了扫码,当前定位功能举例子
});

我愉快的用了里面的扫码功能以及当前定位功能,然后成功的了,就这样愉快的过了两周,直到新需求的到来。。。。。。
新加了页面分享功能,WTF?so easy,那就写吧
先查了官方文档,说是onMenuShareAppMessage(分享给朋友)等等好几个分享功能即将废用,那咱当然用推荐使用的api了,得,就用updateAppMessageShareData了,在wx.config中配置好

jsApiList: ['getLocation', 'scanQRCode', 'updateAppMessageShareData']

然后我接着就开心的去使用了

 wx.updateAppMessageShareData({
    title: '测试分享', // 分享标题
    desc: '这是一个不错的分享哦', // 分享描述
    link:'http://www.baidu.com', // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
    imgUrl: 'https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1587654057447&di=fc8eb02f92f4d5f5b21a2de8f25bb922&imgtype=0&src=http%3A%2F%2Fimg4.jiuxing.com%2F1845405%2Fglory%2Fnwm_orig_800%2F481baa92af58b0eb3c57ffb4d2355335.jpg', // 分享图标
    success: function () {
      // 设置成功
      console.log('分享成功')
    }
})

结果,没有成功,没有理由啊。。。。。找了许久,难不成是我用的weixin-jsapi版本太旧,我跑到了npm的官网,发现了最后一次更新竟然是2017年,三年前,当然,那时候新的微信分享api肯定还没有出生,怎么办?又想到了前面踩坑没有成功的weixin-js-sdk,特意去了npm上查了一下,版本是十几天前刚更新的,并且更新版本非常频繁。那就转回官方推荐的weixin-js-sdk了
install ==》引用成功就大功告成了,重点就是跳引用的坑了

npm isntall weixin-js-sdk
import wx from 'weixin-js-sdk'
cosnole.log(wx) // undefined 

最后的最后发现原因是我在public目录的index.html中引入过了js-sdk的CDN,导致出现的问题(刚开始开发,跟着腾公众号的开发文档加上的,天坑)

<script type="text/javascript" src="http://res.wx.qq.com/open/js/jweixin-1.6.0.js"></script>

把上面的一行代码注释掉之后就可以正常的import,并且能正常的打印了
总结,vue中使用js-sdk的两种方式如下:
第一种:使用cdn(尝试console.log(window[‘wx’]))

// index.html入口文件中引入
<script type="text/javascript" src="http://res.wx.qq.com/open/js/jweixin-1.6.0.js"></script> 
// 要使用的页面引入方式
const wx = window['wx']
// 下面进行wx配置
wx.config({....}) // 不再举例

第二种:使用npm 插件 ‘weixin-js-sdk’

// 安装
npm install 'weixin-js-sdk'
// 使用
import wx from 'weixin-js-sdk'
import Vue from 'vue'
wx.config({....})

如果不止一个vue页面用到的话,记得挂载到原型中,不然每个页面都要去wx.config

// 挂载
Vue.prototype.$wx = wx 
// 页面中的使用
this.$wx.scanQRCode({...}) // 扫码示例,不再枚举

切记,cdn和npm引入不能同时使用,会导致import不出来数据的哈

最后,撒花,终于可以下班了。。。。。。

### UNI-APP 开发微信公众号 (H5) 并集成微信支付 #### 一、准备工作 为了在 Uni-app 中开发微信公众号 H5 应用并集成微信支付功能,需先完成如下准备: 1. **注册微信公众平台账号** - 获取 AppID 和 AppSecret。 2. **配置服务器域名** - 在微信公众平台上设置合法的业务域名、JS接口安全域名等必要信息[^1]。 3. **安装必要的插件和库文件** 对于微信支付的支持,在项目中引入 `wx.js` 文件用于调用微信 JS SDK 接口。同时确保已安装最新版本Vue CLI 工具以便更好地管理项目资源。 #### 二、实现流程 ##### (一)初始化环境变量 创建 `.env.development` 或者其他适合当前环境下的配置文件来保存敏感数据如 appId, mchId(商户号), key(密钥),这些参数将在后续请求过程中被使用到。 ```bash VUE_APP_WX_APP_ID=your_app_id_here VUE_APP_MCH_ID=your_merchant_id_here VUE_APP_API_KEY=your_api_key_here ``` ##### (二)获取预支付订单编号(prepay_id) 当用户确认付款金额后,前端应向自己的服务端发起 POST 请求传递商品详情给后台处理逻辑;此时后端负责生成交易单据并向 WeChat Pay API 发送 HTTPS 请求以获得 prepay_id 参数作为响应的一部分返回给客户端应用。 注意:此过程涉及敏感操作建议采用 HTTPS 协议传输数据,并且严格按照官方文档说明构建签名字符串防止篡改攻击风险。 ##### (三)调起微信内嵌浏览器中的支付控件 收到有效的 prepay_id 后即可按照下述方式组装所需参数并通过 wx.chooseWXPay 方法启动内置 Webview 支付界面供顾客输入密码验证身份从而完成整个购物流程: ```javascript // 假设已经获得了prepay_id和其他必需的信息 const payParams = { "appId": process.env.VUE_APP_WX_APP_ID, "timeStamp": new Date().getTime(), "nonceStr": Math.random().toString(36).substr(2), "package": 'prepay_id=' + prepay_id_from_server,// 注意这里的拼接规则可能依据实际情况有所变化 "signType": "MD5", }; // 计算 sign 字段的具体方法请参照 https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_7&index=6 let stringA = Object.keys(payParams) .filter(key => payParams[key]) .map(key => `${key}=${encodeURIComponent(payParams[key])}`) .join('&'); stringA += '&key=' + encodeURIComponent(process.env.VUE_APP_API_KEY); payParams.sign = hex_md5(stringA.toUpperCase()); // 调用 chooseWXPay 进行支付 WeixinJSBridge.invoke( 'getBrandWCPayRequest', payParams, function(res){ if(res.err_msg === "get_brand_wcpay_request:ok"){ alert('支付成功!'); }else{ console.error(`支付失败:${res.err_code}`); } }); ``` 上述代码片段展示了如何利用 JavaScript 实现微信支付的核心部分——即通过 WeixinJSBridge 对象访问原生组件进而引导用户至最终结算环节。值得注意的是实际部署之前还需要针对不同场景做充分测试确保兼容性和稳定性。 #### 三、常见问题排查 如果遇到无法正常唤起支付窗口的情况,请检查以下几点: - 是否正确设置了 jsApiList 数组内的权限项; - 检查 URL 地址是否被列入了公众平台的安全白名单之中; - 确认所有参与计算 Sign 的字段都已被正确定义并且顺序无误; - 测试环境中使用的证书是否有效过期等问题也可能会引起异常行为。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值