微信网页开发——集成微信扫一扫

96
陈一季
2017.11.11 18:54* 字数 1280

遇到过这样两个需求:

1.为大学城做一个APP,打开APP后直接第三方登录。APP有展示大学城的H5页面和扫描二维码功能,扫描后可以关注大学城的公众号,并且将openId传送给一个第三方的服务器。

2.在公众号的底部菜单打开一个网页,这个网页要集成微信原生的扫一扫功能。

首先是第一个需求,我认为并不需要单独做一个APP的。学生只要通过微信扫一扫来关注大学城的公众号,然后在大学城的底部菜单做一个展示用的H5页面就可以。至于获取关注学生的openId可以通过微信提供的接口调取。

(ps:没有学生会愿意在大街上用自己的流量下载一个APP的)

获取公众号的关注用户openId,需要有一个后台服务器,服务器访问“https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET”这个url,传入开发者appId和appsecret(公众号后台管理系统里面左侧菜单“开发”里面的“基本配置”中可以查看),他会返回一个ACCESS_TOKEN。再访问接口“https://api.weixin.qq.com/cgi-bin/user/get?access_token=ACCESS_TOKEN&next_openid=NEXT_OPENID”来获取1000个关注用户的openId,如果超过1000个用户,可以传入“NEXT_OPENID”(第一次调取的第1000位用户的openId)来获取之后的1000个用户的openId。

第二个需求是要用到微信的JS-SDK库,这是一个JS的库,直接用于H5页面里面。通过它可以调用微信APP的一些原生功能。

这个库的使用很简单,但是它有一些前提条件:

1.有一个已经在国家工信部备案的域名,这个是在国家备案的,省里的备案无效。在大连如果使用华为云,可以直接使用华为的备案服务。其它云比如腾讯云,也可以利用腾讯提供的服务备案。

2.可以联络微信公众号的管理员获取开发者密码(appsecret)。这个参数在公众号后台管理系统里获取,只有公众号管理员可以获取,其他人不可以。

3.需要一个后台的服务器,通过它进行验签。

集成扫一扫的步骤:

1.登陆公众号后台管理系统,获取appid和appsecret(需要管理员权限)

2.在后台中访问接口“https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET”,传入appid和appsecret,获取ACCESS_TOKEN。

3.继续访问接口“https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=ACCESS_TOKEN&type=jsapi”,传入上一步获取的ACCESS_TOKEN,得到“jsapi_ticket”。

4.进行签名

需要的参数:

noncestr=Wm3WZYTPz0wzccnW(随机字符串)

jsapi_ticket=sM4AOVdWfPE4DxkXGEs8VMCPGGVi4C3VM0P37wVUCFvkVAy_90u5h9nbSlYy3-Sl-HhTdfl2fzFy1AOcHKP7qg

timestamp=1414587457(时间戳)

url=http://mp.weixin.qq.com?params=value(前台使用的url,如果是多个页面使用,不可共用。前台的url使用的域名必须是在后台管理系统中配置过的安全域名)

对所有待签名参数按照字段名的ASCII 码从小到大排序(字典序)后,使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串string1:

jsapi_ticket=sM4AOVdWfPE4DxkXGEs8VMCPGGVi4C3VM0P37wVUCFvkVAy_90u5h9nbSlYy3-Sl-HhTdfl2fzFy1AOcHKP7qg&noncestr=Wm3WZYTPz0wzccnW×tamp=1414587457&url=http://mp.weixin.qq.com?params=value

字符串string1进行SHA1加密算法得到签名“signature”。

5.前台导入JS-SDK库后,进行配置:

wx.config({

    debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的        参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。调试结束后,请设置为“false”

    appId: '', // 必填,公众号的唯一标识

    timestamp: , // 必填,生成签名的时间戳

    nonceStr: '', // 必填,生成签名的随机串

    signature: '',// 必填,签名

    jsApiList: [

    scanQRCode

] // 必填,需要使用的JS接口列表

});

6.通过API(下面的)进行扫描即可。

wx.scanQRCode({

    needResult: 1, // 默认为0,扫描结果由微信处理,1则直接返回扫描结果,

    scanType: ["qrCode","barCode"], // 可以指定扫二维码还是一维码,默认二者都有

    success: function (res) {

    var result = res.resultStr; // 当needResult 为 1 时,扫码返回的结果(注意:这个的字符串如果是条形码,首先是条形码的格式,然后是“,”,之后才是扫描出的结果,如果只需要扫码的结果,需要进行截取“,”之后的字符串)

}

});

以上

软件开发