微信公众号调用扫一扫的方法及注意事项
调用方法:
- 绑定域名:在微信公众平台设置
- 引入JS文件:<script src=‘https://res.wx.qq.com/open/js/jweixin-1.2.0.js‘></script>
- 通过config接口注入权限验证配置(很重要),通过ready接口处理成功验证,通过error接口处理失败验证
-
<script type="text/javascript"> function scan(){ wx.config({ debug: true, //是否调试,true,会弹窗 appId: ‘<%=appID%>‘, //得到这个东西,首先必须有一个公众号,或者企业号,如果已经拥有了,你可以就知道AppId在哪里了。 timestamp: ‘<%=time%>‘,//生成签名的时间戳,随机数,之后会用这个生成一个签名 nonceStr: ‘<%=randstr%>‘,//生成签名的随机串,随机串,之后会用这个生成一个签名 signature: ‘<%=signstr%>‘,//这个就是签名了,在步骤4,我会详细讲解 jsApiList: [ ‘scanQRCode‘ //开启扫一扫功能,这里还可以添加更多的功能,比如微信支付 ] }); wx.ready(function () { wx.scanQRCode({ desc: ‘scanQRCode desc‘, needResult: 1, // 默认为0,扫描结果由微信处理,1则直接返回扫描结果, scanType: ["qrCode", "barCode"], // 可以指定扫二维码还是一维码,默认二者都有 success: function (res) { var url = res.resultStr; var tempArray = url.split(‘,‘); var tempNum = tempArray[1];//这个就是扫描后返回值扫描值 } }); }); } </script>
注意事项:1. wx.config,wx.ready,wx.scanQRCode等是微信浏览器内置的接口,只有微信浏览器才能识别,用电脑上的IE是调试不了的,会报未定义错误
2. appId,timestamp,nonceStr分别是公众号的APPID,时间戳以及随机数,这个应该没什么疑问
关键是签名signature的算法,步骤如下:
① 根据APPID和APPSECRET获取access_tocken:
接口网址是"https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + appid + "&secret=" + secret
② 根据access_tocken获取jsapi_ticket:
接口网址是 "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=" + accesstocken + "&type=jsapi"
注意:一定是type=jsapi,我一开始签名一直算不对的原因就是写成了type=wx_card(这是调用卡券接口用的,当时直接拷过来给忽略了)造成我算出来的签名使用签名校验工具校验没有问题,但是调用扫一扫接口就是报签名错误,因为这个疏忽浪费了两天时间查原因!
③ 计算签名:
string url = this.Request.Url.ToString();//注意:url要动态获取 string string1 = "jsapi_ticket=" + api_ticket + "&noncestr=" + randstr + "×tamp=" + time + "&url=" + url + ""; //使用sha1加密这个字符串 signature = FormsAuthentication.HashPasswordForStoringInConfigFile(string1, "SHA1"); signature = signstr.ToLower();
按照这个步骤走,应该就没有问题了。