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

您可能感兴趣的与本文相关的镜像

GPT-SoVITS

GPT-SoVITS

AI应用

GPT-SoVITS 是一个开源的文本到语音(TTS)和语音转换模型,它结合了 GPT 的生成能力和 SoVITS 的语音转换技术。该项目以其强大的声音克隆能力而闻名,仅需少量语音样本(如5秒)即可实现高质量的即时语音合成,也可通过更长的音频(如1分钟)进行微调以获得更逼真的效果

### 实现H5页面调用微信API 要在HTML5网页中集成微信描二维码的功能,需遵循特定流程并确保满足相应条件。具体而言,在使用微信JS-SDK前,服务器端应获取签名所需参数,并将其传递给前端。 #### 获取签名信息 首先,服务器端需要向微信公众平台发送请求以获得用于签名的数据包。此过程涉及通过接口`/cgi-bin/ticket/getticket`来取得jsapi_ticket[^1]。旦获得了有效的jsapi_ticket,则可以根据URL生成对应的signature字符串。 ```csharp public IActionResult GetSignature(string url) { var ticket = GetJsApiTicket(); // 自定义方法获取jsapi_ticket var noncestr = Guid.NewGuid().ToString("N"); var timestamp = DateTimeOffset.UtcNow.ToUnixTimeSeconds(); using (var sha1 = SHA1.Create()) { byte[] inputBytes = Encoding.UTF8.GetBytes($"jsapi_ticket={ticket}&noncestr={noncestr}&timestamp={timestamp}&url={url}"); byte[] hashBytes = sha1.ComputeHash(inputBytes); StringBuilder sb = new StringBuilder(); foreach (byte b in hashBytes) sb.Append(b.ToString("X2")); ViewBag.Signature = sb.ToString(); ViewBag.Timestamp = timestamp; ViewBag.NonceStr = noncestr; } } ``` #### 前端初始化与调用 接着,在客户端加载页面时引入Weixin JS SDK库文件并通过config接口注入权限验证配置。完成这些准备工作之后就可以安全地调用微信提供的scanQRCode API来进行码操作了。 ```html <script src="https://res.wx.qq.com/open/js/jweixin-1.6.0.js"></script> <script type="text/javascript"> wx.config({ debug: false, appId: '@ViewBag.AppId', timestamp: @ViewBag.Timestamp, nonceStr: '@ViewBag.NonceStr', signature: '@ViewBag.Signature', jsApiList: ['checkJsApi', 'scanQRCode'] }); // 调用 scanQRCode 方法 function startScan() { wx.ready(function () { wx.scanQRCode({ needResult: 1, // 默认为0,描结果由微信处理;1则直接返回描结果 scanType: ["qrCode"], // 可选值:"qrCode" | "barCode" success: function (res) { alert('描成功:' + res.resultStr); }, fail: function (res) { console.error('描失败:', res.errMsg || ''); } }); }); wx.error(function (res){ console.log('微信JS桥未准备好'); }); } </script> <button onclick="startScan()">点击这里开始描</button> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值