使用微信小程序雲函數實現註冊短信驗證碼的管理,並非一件分分鐘的事,目前想要存儲驗證碼只能放到數據庫中,由於存儲後才能和用戶提交上來的驗證碼作比較。html
管理驗證碼主要涉及到:生成、存儲、校驗、有效期管理、2條短信間隔時間控制等、雲數據庫的操做,小編但是用了整整一天才完成的。數據庫
下面推薦一個第三方的短信接口,支持小程序雲函數發送短信驗證碼,並且SDK已經實現了上述的全部功能,不妨試一試。json
下載地址: smsow.zhenzikj.com/doc/sdk.htm…小程序
如何使用微信小程序
1.安裝api
下載後的SDK在cloudfunctions文件夾下會包含zhenzisms文件夾,您直接把這個文件夾拷到您的項目中便可。bash
miniprogram文件夾下包含使用示例,您能夠參考這個完成開發。微信
注: 使用雲函數開發無需配置域名的app
2.申請帳號,獲取AppId、AppSecret函數
免費註冊地址: sms_developer.zhenzikj.com/zhenzisms_u…
使用註冊帳號登陸用戶中心,在"個人應用"-> "詳情"中能夠查詢AppId、AppSecret
AppId、AppSecret是用於開發者使用帳號和祕鑰, 如下的全部api中都須要用到
3.修改SDK中的AppId、AppSecret
打開SDK中雲函數的index.js文件,填寫appId、appSecret
4.發送短信
此方法sendCode是專用於發送短信驗證碼的,調用該方法會自動生成驗證碼並存儲在數據庫中,當用戶提交信息後能夠經過validateCode方法比對驗證碼是否正確。
首先,您須要在雲開發控制檯中建立名稱爲sms-record的集合,用於存放驗證碼信息的,這個集合您無需維護。以下圖:
其次,修改集合的權限,以下圖:
使用方法:
wx.cloud.callFunction({
name: 'zhenzisms',
data: {
$url: 'sendCode',
apiUrl: 'https://sms_developer.zhenzikj.com',
message: '您的驗證碼爲:{code}',
number: '18511111111',
messageId: 'aaabbb',
seconds: 60
}
}).then((res) => {
console.log(res.result.msg);
}).catch((e) => {
//console.log(e);
});複製代碼
apiUrl爲請求地址,我的開發者使用sms_developer.zhenzikj.com,企業開發者使用sms.zhenzikj.com
send方法用於單條發送短信
參數$url:方法名稱,固定不變的
參數message:發送短信的模板,您能夠修改爲您須要的,其中{code}會自動替換爲驗證碼的
參數number:接收者手機號碼
參數messageId:該條信息的惟一標識,可用於查詢
參數seconds:驗證碼的有效期,單位秒
參數length:驗證碼的長度,好比經常使用的4位或6位
返回結果是json格式的字符串, code: 發送狀態,0爲成功。非0爲發送失敗,可從data中查看錯誤信息
注: 測試發送短信內容不要使用"你好"或"12132"全數字形式,這種短信內容沒有具體的意義,可能會被運營商屏蔽
注:目前兩條驗證碼短信獲取的間隔時間是60秒,如需取消間隔時間或從新設置您須要修改sdk中的index.js文件,以下圖:
6.校驗驗證碼
此方法validateCode須要和方法sendCode配合使用,用於校驗用戶提交上來的驗證碼和系統生成的是否一致
wx.cloud.callFunction({
name: 'zhenzisms',
data: {
$url: 'validateCode',
apiUrl: 'https://sms_developer.zhenzikj.com',
number: '18511111111',
code: '6313'
}
}).then((res) => {
console.log(res.result.msg);
}).catch((e) => {
console.log(e);
});複製代碼
apiUrl爲請求地址,我的開發者使用sms_developer.zhenzikj.com,企業開發者使用sms.zhenzikj.com
參數$url:方法名稱,固定不變的
參數number:發送短信的手機號碼
參數code:用戶輸入的驗證碼
返回結果是json對象,其中code項是錯誤代碼,msg項是錯誤描述。code說明 success: 校驗成功,empty:未調用sendCode方法生成驗證碼, code_expired:驗證碼已過時,過時時間是經過sendCode方法的參數seconds控制,code_error:驗證碼錯誤