使用微信小程序雲函數實現注冊短信驗證碼的管理,並不是一件分分鍾的事,目前想要存儲驗證碼只能放到數據庫中,因為存儲后才能和用戶提交上來的驗證碼做比較。
管理驗證碼主要涉及到:生成、存儲、校驗、有效期管理、2條短信間隔時間控制等、雲數據庫的操作,小編可是用了整整一天才完成的。
下面推薦一個第三方的短信接口,支持小程序雲函數發送短信驗證碼,而且SDK已經實現了上述的所有功能,不妨試一試。
下載地址: http://smsow.zhenzikj.com/doc/sdk.html
如何使用
1.安裝
下載后的SDK在cloudfunctions文件夾下會包含zhenzisms文件夾,您直接把這個文件夾拷到您的項目中即可。
miniprogram文件夾下包含使用示例,您可以參考這個完成開發。
注: 使用雲函數開發無需配置域名的
2.申請賬號,獲取AppId、AppSecret
免費注冊地址: http://sms_developer.zhenzikj.com/zhenzisms_user/register.html
使用注冊賬號登錄用戶中心,在"我的應用"-> "詳情"中可以查詢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為請求地址,個人開發者使用https://sms_developer.zhenzikj.com,企業開發者使用https://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為請求地址,個人開發者使用https://sms_developer.zhenzikj.com,企業開發者使用https://sms.zhenzikj.com
參數$url:方法名稱,固定不變的
參數number:發送短信的手機號碼
參數code:用戶輸入的驗證碼
返回結果是json對象,其中code項是錯誤代碼,msg項是錯誤描述。code說明 success: 校驗成功,empty:未調用sendCode方法生成驗證碼, code_expired:驗證碼已過期,過期時間是通過sendCode方法的參數seconds控制,code_error:驗證碼錯誤