sms.js 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. const {
  2. setMobileVerifyCode
  3. } = require('./verify-code')
  4. const {
  5. getVerifyCode
  6. } = require('../../common/utils')
  7. /**
  8. * 发送短信
  9. * @param {object} param
  10. * @param {string} param.mobile 手机号
  11. * @param {object} param.code 可选,验证码
  12. * @param {object} param.scene 短信场景
  13. * @param {object} param.templateId 可选,短信模板id
  14. * @returns
  15. */
  16. async function sendSmsCode ({
  17. mobile,
  18. code,
  19. scene,
  20. templateId
  21. } = {}) {
  22. const requiredParams = [
  23. 'name',
  24. 'codeExpiresIn'
  25. ]
  26. const smsConfig = (this.config.service && this.config.service.sms) || {}
  27. for (let i = 0; i < requiredParams.length; i++) {
  28. const key = requiredParams[i]
  29. if (!smsConfig[key]) {
  30. throw new Error(`Missing config param: service.sms.${key}`)
  31. }
  32. }
  33. if (!code) {
  34. code = getVerifyCode()
  35. }
  36. let action
  37. switch (scene) {
  38. case 'login-by-sms':
  39. action = this.t('login')
  40. break
  41. default:
  42. action = this.t('verify-mobile')
  43. break
  44. }
  45. const sceneConfig = (smsConfig.scene || {})[scene] || {}
  46. if (!templateId) {
  47. templateId = sceneConfig.templateId
  48. }
  49. if (!templateId) {
  50. throw new Error('"templateId" is required')
  51. }
  52. const codeExpiresIn = sceneConfig.codeExpiresIn || smsConfig.codeExpiresIn
  53. await setMobileVerifyCode.call(this, {
  54. mobile,
  55. code,
  56. expiresIn: codeExpiresIn,
  57. scene
  58. })
  59. await uniCloud.sendSms({
  60. smsKey: smsConfig.smsKey,
  61. smsSecret: smsConfig.smsSecret,
  62. phone: mobile,
  63. templateId,
  64. data: {
  65. name: smsConfig.name,
  66. code,
  67. action,
  68. expMinute: '' + Math.round(codeExpiresIn / 60)
  69. }
  70. })
  71. return {
  72. errCode: 0
  73. }
  74. }
  75. module.exports = {
  76. sendSmsCode
  77. }