概述
小程序手機(jī)號(hào)快速驗(yàn)證和實(shí)時(shí)驗(yàn)證都已經(jīng)開(kāi)始收費(fèi)了。
- 手機(jī)號(hào)實(shí)時(shí)驗(yàn)證組件,在每次請(qǐng)求時(shí),平臺(tái)均會(huì)對(duì)用戶選擇的手機(jī)號(hào)進(jìn)行實(shí)時(shí)驗(yàn)證;每次組件調(diào)用成功,收費(fèi)0.04元
- 手機(jī)號(hào)快速驗(yàn)證組件,平臺(tái)會(huì)對(duì)號(hào)碼進(jìn)行驗(yàn)證,但不保證是實(shí)時(shí)驗(yàn)證。每次組件調(diào)用成功,收費(fèi)0.03元
- 兩者的區(qū)別簡(jiǎn)單理解就是實(shí)時(shí)驗(yàn)證能確保手機(jī)號(hào)是可用的(比如微信會(huì)要求使用者輸入驗(yàn)證碼確保手機(jī)號(hào)可用性),而快速驗(yàn)證就是把微信綁定的手機(jī)號(hào)返回去,不管有沒(méi)有注銷或者欠費(fèi)
基礎(chǔ)庫(kù)選擇
快速驗(yàn)證組件其實(shí)就是最開(kāi)始的獲取手機(jī)號(hào)碼組件,調(diào)用流程比較復(fù)雜,需要wx.login,然后再使用encryptedData和iv得到手機(jī)號(hào)。新版本的也還能繼續(xù)使用這種,但同時(shí)也增加了一個(gè)code(基礎(chǔ)庫(kù)從2.21.2開(kāi)始),可以直接用code而忽略encryptedData和iv。
所以,建議基礎(chǔ)庫(kù)直接選擇2.21.2或者以上的,這樣實(shí)時(shí)和快速的兩種能統(tǒng)一處理掉。
基礎(chǔ)庫(kù)版本修改位置: 開(kāi)發(fā)者工具右上角的詳情->本地設(shè)置->修改調(diào)試基礎(chǔ)庫(kù)
后端代碼
后端代碼非常簡(jiǎn)單,根據(jù)code來(lái)得到手機(jī)號(hào),進(jìn)行自己業(yè)務(wù)的邏輯,為了方便查看,我把響應(yīng)值直接返回給小程序了,真實(shí)業(yè)務(wù)自行調(diào)整成保存數(shù)據(jù)庫(kù)或者其他邏輯。
獲取access_token,這個(gè)是小程序的,appid和secert可通過(guò)小程序后臺(tái)獲取到。access_token的有效期是2小時(shí),可以做成個(gè)定時(shí)任務(wù)。
public void runmicro(){
log.info("進(jìn)入獲取micro accessToken 定時(shí)任務(wù)");
try {
String url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + Cons.APPID_MICRO + "&secret=" + Cons.SECRET_MICRO;
String result = Jsoup.connect(url).ignoreContentType(true).method(Connection.Method.GET).execute().body();
log.info(result);
Cons.accessTokenMicro = JSON.parseObject(result).getString("access_token");
} catch(Exception e) {
e.printStackTrace();
}
}
有了access_token,就可以正常獲取手機(jī)號(hào)碼了。
其中,requestBody中參數(shù)格式必須是code:codeValue,我直接限制小程序按照這個(gè)格式傳遞了,沒(méi)有做合法校驗(yàn)。
@PostMapping("/mobile")
@Log("查詢手機(jī)號(hào)碼")
@ApiOperation("查詢手機(jī)號(hào)碼")
@AnonymousAccess
public ResponseEntity<JSONObject> mobile(@RequestBody JSONObject param){
try {
System.out.println(param.toString());
String url = "https://api.weixin.qq.com/wxa/business/getuserphonenumber?access_token=" + Cons.accessTokenMicro;
String result = Jsoup.connect(url).method(Connection.Method.POST).ignoreContentType(true).ignoreHttpErrors(true).requestBody(param.toString()).execute().body();
return new ResponseEntity<>(JSON.parseObject(result),HttpStatus.OK);
} catch(Exception e) {
e.printStackTrace();
}
return new ResponseEntity<>(HttpStatus.OK);
}
小程序布局
使用了weui樣式。這個(gè)無(wú)所謂,根據(jù)個(gè)人喜好了。
在wxss中進(jìn)行引入
@import "/pages/style/weui.wxss";
在wxml中寫(xiě)兩個(gè)按鈕,測(cè)試兩個(gè)獲取手機(jī)號(hào)。其中實(shí)時(shí)組件的open-type是getRealtimePhoneNumber,同時(shí)通過(guò)bindgetrealtimephonenumber來(lái)指定獲取到以后調(diào)用的方法;快速組件的open-type是getPhoneNumber,同時(shí)通過(guò)bindgetphonenumber來(lái)指定獲取到以后調(diào)用的方法。
<page-meta root-font-size="system"/>
<view class="page" data-weui-theme="{{theme}}" data-weui-mode="{{mode}}">
<view class="page__bd">
<view class="weui-cells__title">手機(jī)號(hào)實(shí)時(shí)驗(yàn)證組件</view>
<view class="weui-cells weui-cells_after-title">
<view aria-labelledby="js_cell_l1_bd" class="weui-cell weui-cell_access" hover-class="weui-cell_active">
<button type="primary" style="width: 100%;" open-type="getRealtimePhoneNumber" bindgetrealtimephonenumber="getrealtimephonenumber" >獲取手機(jī)號(hào)(實(shí)時(shí))</button>
</view>
</view>
<view class="weui-cells__title">手機(jī)號(hào)快速驗(yàn)證組件</view>
<view class="weui-cells weui-cells_after-title">
<view aria-labelledby="js_cell_l1_bd" class="weui-cell weui-cell_access" hover-class="weui-cell_active">
<button type="primary" style="width: 100%;" open-type="getPhoneNumber" bindgetphonenumber="getPhoneNumber" >獲取手機(jī)號(hào)(快速)</button>
</view>
</view>
<view class="weui-cells__title" style="padding-top: 30px;">手機(jī)號(hào)實(shí)時(shí)驗(yàn)證組件,在每次請(qǐng)求時(shí),平臺(tái)均會(huì)對(duì)用戶選擇的手機(jī)號(hào)進(jìn)行實(shí)時(shí)驗(yàn)證。每次組件調(diào)用成功,收費(fèi)0.03元。
</view>
<view class="weui-cells__title" >手機(jī)號(hào)快速驗(yàn)證組件,平臺(tái)會(huì)對(duì)號(hào)碼進(jìn)行驗(yàn)證,但不保證是實(shí)時(shí)驗(yàn)證。每次組件調(diào)用成功,收費(fèi)0.04元。</view>
</view>
</view>
小程序公共調(diào)用方法
因?yàn)閮煞N獲取手機(jī)號(hào)的方式都是統(tǒng)一的通過(guò)code,所以在js中寫(xiě)個(gè)公共的方法,都可以直接調(diào)用。url是上面后臺(tái)部署好的地址。
mobileRequest: function(code) {
wx.request({
url: 'https://eladmin.luotayixing.com/api/wechat/mobile',
method: 'POST',
data: {
code: code
},
header: {
'content-type': 'application/json'
},
success (res) {
wx.showModal({
title: '返回結(jié)果',
content: JSON.stringify(res.data),
showCancel: false,
success (res) {
}
})
}
})
},
組件事件回調(diào)
上面兩個(gè)組件的事件回調(diào)方法比較簡(jiǎn)單,都是直接把code拿到。
這里需要增加下判斷,比如用戶點(diǎn)擊了取消不要調(diào)用,其他出錯(cuò)情況不要調(diào)用等。我為了方便偷懶了。
getrealtimephonenumber (e) {
this.mobileRequest(e.detail.code)
},
getPhoneNumber (e) {
this.mobileRequest(e.detail.code)
},
官方給出的幾個(gè)參數(shù)可以用,比如errno來(lái)判斷是否失敗了。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-836565.html
console.log(e.detail.code) // 動(dòng)態(tài)令牌
console.log(e.detail.errMsg) // 回調(diào)信息(成功失敗都會(huì)返回)
console.log(e.detail.errno) // 錯(cuò)誤碼(失敗時(shí)返回)
完整代碼獲取
可以通過(guò)公眾號(hào)“洛塔志達(dá)服務(wù)”進(jìn)行聯(lián)系,發(fā)送“微信”,可添加好友溝通。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-836565.html
到了這里,關(guān)于小程序獲取手機(jī)號(hào):快速驗(yàn)證和實(shí)時(shí)驗(yàn)證的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!