H5如何拉起微信扫一扫

扫一扫功能

项目开发中有很多场景需要拉起微信扫一扫,在这里主要记录下开发过程中遇到的一些问题,以及解决方案。仅供参考

拉起方法

官方的sdk文档关于使用方法写的很详细
http://qydev.weixin.qq.com/wiki/index.php?title=%E5%BE%AE%E4%BF%A1JS-SDK%E6%8E%A5%E5%8F%A3
基本上对照官方文档的做法都能完成


问题记录

1.签名失效
2.首次加载签名失效,刷新正常
3.ios 首次进入签名正常,permission denied,刷新无效


问题解决方法及原因

首先说明H5项目开发的框架是VUE SPA单页面应用

1。 签名失效

– 首先利用js校验工具
http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=jsapisign 去校验下签名是否正确

– 再确认页面url是否正确(location.href.split(‘#’)[0]),包括’http(s)://’部分,以及’?’后面的GET参数部分,但不包括’#’hash后面的部分

– appId是否正确,config 中的 appid 与用来获取 jsapi_ticket 的 appid
以上是签名失效的检查顺序,并且要确保项目开发的安全域名已经在公众号内配置。
我这里检查完都没有问题,最后发现是因为安全域名配置引起的。
因此当问题阻塞时,还是从头理清楚
2。spa单页面应用,服务端渲染index页面返回客户端,本地页面切换不存在服务端刷新,因此,在需要调起扫一扫的页面传递的url与服务端url不一致,当强制刷新页面时,服务端的url与当前页面一致,因此可以成功获取。
解决方法 再进入该页面后强制刷新一次(reload)
当然要要标记下首次进入才需要刷新,否则会造成很对不必要的刷新
3。ios的签名要在入口页获取,解决了签名失效的问题

其他

  • 安卓在当前页面注入config,获取签名
  • 如果需要在完成注入后立即调用函数需要放在we.ready()中,而用户操作后的行为不需要
  • ios不存在需要在当前页刷新的问题(迷)
  • 公众号切换确认是否配置安全域名,因为产线公众号只能配一个安全域名

推荐阅读

其他相关报错请移步:
http://blog.youkuaiyun.com/xc765926174/article/details/45227609

在React中,如果你想要让H5页面集成微信功能,你需要通过微信的JavaScript SDK来实现。首先,需要在你的项目里引入微信的`js-sdk`,通常的做法是在HTML文件的`<head>`部分加入如下的代码: ```html <script src="https://res.wx.qq.com/open/js/jweixin-1.6.0.js" charset="utf-8"></script> ``` 然后,在需要使用的地方,你可以创建个按钮并添加事件监听器,例如: ```jsx import WeixinJSBridge from 'weixin-jsbridge'; function scanButton() { if (typeof WeixinJSBridge === 'undefined') { // 如果微信SDK尚未准备好,注册回调函数 window.addEventListener('load', function () { if (typeof WeixinJSBridge === 'undefined') { document.getElementById('scan-button').onclick = scanButton; } else { WeixinJSBridge.call('scanCode', { success: function (res) { console.log('描结果:', res); // 这里处理码后的逻辑 }, cancel: function () { // 用户取消码操作 } }, { scanType: ['qrCode', 'barCode'], // 可选码类型 needResult: 1, // 默认为true,0表示直接返回描结果,1表示弹出可以选择保存的图片或者文字 saveToAlbum: false // 默认false,如果设置为true则可以将图片保存到手机相册 }); } }); } else { // 如果已经准备好,直接调用 WeixinJSBridge.on('menu:share:appmessage', function (params) { // 成功后的回调 }); WeixinJSBridge.call('scanCode'); } } // 在渲染阶段添加按钮并触发事件 render() { return ( <button id="scan-button" onClick={scanButton}></button> ); } ``` 记得在实际应用中替换上述示例中的回调处理逻辑,并且在用户首次访问页面时检查是否已授权微信JS-SDK,如果没有,需引导用户手动授权。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值