网页抓取手机号(微信小程序文档中给出如下示例获取微信用户绑定的手机号)
优采云 发布时间: 2022-01-06 12:11网页抓取手机号(微信小程序文档中给出如下示例获取微信用户绑定的手机号)
以下示例在微信小程序文档中给出
获取微信用户绑定的手机号,需要先调用登录界面。
因为用户需要主动触发手机号接口,所以这个函数不是API调用的,需要通过组件的点击来触发。
注:此接口目前对已完成小程序认证的非个人开发者开放。请谨慎使用。如用户举报较多或被发现在不必要的场景中使用,微信有权永久撤销小程序的界面权限。
指示
组件open-type的值需要设置为getPhoneNumber。用户点击同意后,可以通过bindgetphonenumber事件回调获取微信服务器返回的加密数据,然后第三方服务器结合session_key和app_id进行解密,得到手机号码。
注意
在回调中调用 wx.login 登录可能会刷新登录状态。这时服务器使用code交换的sessionKey并不是加密时使用的sessionKey,导致解密失败。建议开发者提前登录;或者在回调中使用checkSession检查登录状态,防止登录刷新登录状态。
例子
Page({
getPhoneNumber: function(e) {
console.log(e.detail.errMsg)
console.log(e.detail.iv)
console.log(e.detail.encryptedData)
}
})
返回参数说明
{encryptedData 解密后为如下json结构,详见加密数据解密算法
"phoneNumber": "13580006666",
"purePhoneNumber": "13580006666",
"countryCode": "86",
"watermark":
{
"appid":"APPID",
"timestamp":TIMESTAMP
}
}
但在这里你会发现,它并不详尽,尤其是解密和错误代码。
首先,如手册所述,我不太了解加密数据包的解析。我会为你发布一个例子。
getPhoneNumber: function (e) {
console.log(e.detail.iv);
console.log(e.detail.encryptedData);
wx.login({
success: res => {
console.log(res.code);
wx.request({
url: 'https://你的解密地址',
data: {
'encryptedData': encodeURIComponent(e.detail.encryptedData),
'iv': e.detail.iv,
'code': res.code
},
method: 'GET', // OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, CONNECT
header: {
'content-type':'application/json'
}, // 设置请求的 header
success: function (res) {
if (res.status ==1) {//我后台设置的返回值为1是正确
//存入缓存即可
wx.setStorageSync('phone', res.phone);
}
},
fail: function (err) {
console.log(err);
}
})
}
})
}
后台解析代码就是利用传入的三个值来分析每种语言。解析方法不同。请下载样本
微信官方提供多种编程语言的示例代码(点击下载)。每种语言类型的接口名称都相同。调用方法可参考示例。
注意解析方法和解析用户信息是一样的!!!!
编辑器在这里遇到了一个问题,虽然解析回来的形式和文档是一样的!
但是数据看起来是这样的:
这种情况其实是开发的基础库版本库太低造成的
配置位置在这里:
编辑器修改为v1.9.1后,呈现形式与官网手册相同
{
"phoneNumber": "13580006666",
"purePhoneNumber": "13580006666",
"countryCode": "86",
"watermark":
{
"appid":"APPID",
"timestamp":TIMESTAMP
}
}
至此,微信绑定用户的手机号获取完成!
还有一点要注意,你的开发版本已经up了,但是用户可能没有更新
所以微信后台就有这样的配置~
剩下的问题欢迎下方评论。第一次写博客,希望对大家有帮助!!!