用 new Promise(http.get(...)) 来包装,测试通过
This commit is contained in:
		
							parent
							
								
									68e4041388
								
							
						
					
					
						commit
						03b896d0fa
					
				
							
								
								
									
										76
									
								
								messenger.js
									
									
									
									
									
								
							
							
						
						
									
										76
									
								
								messenger.js
									
									
									
									
									
								
							@ -15,21 +15,25 @@ module.exports = {
 | 
				
			|||||||
    return await util.promisify(smtpTransporter.sendMail).call(smtpTransporter, option)
 | 
					    return await util.promisify(smtpTransporter.sendMail).call(smtpTransporter, option)
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
  async sendSms (phone, option) {
 | 
					  async sendSms (phone, { vendor, msg, msgParam, templateCode, signName }={}) {
 | 
				
			||||||
    // 通过option对象,对外提供统一的调用参数格式
 | 
					    // 通过option对象,对外提供统一的调用参数格式
 | 
				
			||||||
    if (/^\+\d+-\d+$/.test(phone)) {
 | 
					    if (/^\+\d+-\d+$/.test(phone)) {
 | 
				
			||||||
      option = option || {}
 | 
					      if (vendor === 'dxton' && msg) {
 | 
				
			||||||
      if (option.vendor === 'dxton' && option.msg) {
 | 
					        return await this.sendSmsDxton(phone, msg)
 | 
				
			||||||
        return await this.sendSmsDxton(phone, option.msg)
 | 
					      } else if (vendor === 'aliyun' && msgParam && templateCode && signName) {
 | 
				
			||||||
      } else if (option.vendor === 'aliyun' && option.msgParam && option.templateCode && option.signName) {
 | 
					        return await this.sendSmsAliyun(phone, msgParam, templateCode, signName)
 | 
				
			||||||
        return await this.sendSmsAliyun(phone, option.msgParam, option.templateCode, option.signName)
 | 
					 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    return null // 手机号格式错误,或者 option.vendor 错误。
 | 
					    return null // 手机号格式错误,或者 option.vendor 错误。
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
 | 
					  /*  使用 dxton.com 的短信接口 http://www.dxton.com/help_detail/38.html
 | 
				
			||||||
 | 
					      - 测试接口:
 | 
				
			||||||
 | 
					        - 国内: http://sms.106jiekou.com/utf8/sms.aspx?account=9999&password=接口密码&mobile=13900008888&content=您的订单编码:888888。如需帮助请联系客服。
 | 
				
			||||||
 | 
					        - 国外: http://sms.106jiekou.com/utf8/worldapi.aspx?account=9999&password=接口密码&mobile=手机号码&content=尊敬的用户您已经注册成功,用户名:{0} 密码:{1} 感谢您的注册!     
 | 
				
			||||||
 | 
					        - response 的 content-type 为 text/html
 | 
				
			||||||
 | 
					  */
 | 
				
			||||||
  async sendSmsDxton (phone, msg) {
 | 
					  async sendSmsDxton (phone, msg) {
 | 
				
			||||||
    // 使用 dxton.com 的短信接口。
 | 
					 | 
				
			||||||
    var matches = phone.match(/\d+/g)
 | 
					    var matches = phone.match(/\d+/g)
 | 
				
			||||||
    var smsNumber, smsUrl
 | 
					    var smsNumber, smsUrl
 | 
				
			||||||
    if (matches[0] === '86') {
 | 
					    if (matches[0] === '86') {
 | 
				
			||||||
@ -39,50 +43,24 @@ module.exports = {
 | 
				
			|||||||
      smsUrl = wo.envi.SMS.dxton.urlWorld // 国际短信不需要签名、模板,可发送任意内容。
 | 
					      smsUrl = wo.envi.SMS.dxton.urlWorld // 国际短信不需要签名、模板,可发送任意内容。
 | 
				
			||||||
      smsNumber = matches[0] + matches[1]
 | 
					      smsNumber = matches[0] + matches[1]
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    // let returnValue = await RequestPromise.get(smsUrl + '&mobile=' + smsNumber + '&content=' + encodeURIComponent(msg))
 | 
					    // let returnCode = await RequestPromise.get(smsUrl + '&mobile=' + smsNumber + '&content=' + encodeURIComponent(msg))
 | 
				
			||||||
    // let returnValue = await axios.get(smsUrl + '&mobile=' + smsNumber + '&content=' + encodeURIComponent(msg))
 | 
					    // let returnCode = await axios.get(smsUrl + '&mobile=' + smsNumber + '&content=' + encodeURIComponent(msg))
 | 
				
			||||||
    // following code with http.get is untested:
 | 
					    return await new Promise((resolve, reject)=>{
 | 
				
			||||||
    return util.promisify(http.get)(smsUrl + '&mobile=' + smsNumber + '&content=' + encodeURIComponent(msg))
 | 
					      http.get(smsUrl + '&mobile=' + smsNumber + '&content=' + encodeURIComponent(msg), (resp)=>{
 | 
				
			||||||
    .then((resp)=>{
 | 
					        let returnCode = ''
 | 
				
			||||||
      let data = ''
 | 
					        resp.on('returnCode', (chunk) => { returnCode += chunk })
 | 
				
			||||||
      resp.on('data', (chunk) => { data += chunk })
 | 
					        resp.on('end', () => {
 | 
				
			||||||
      resp.on('end', () => {
 | 
					          if (parseInt(returnCode)===100){
 | 
				
			||||||
        let returnValue = JSON.parse(data)
 | 
					            resolve({ _state: 'SMS_SENT_SUCCESS', code: returnCode }) // 100: 发送成功 (表示已和我们接口连通)
 | 
				
			||||||
        let result = { _state: 'SMS_SEND_FAIL', code: returnValue }
 | 
					          }else{
 | 
				
			||||||
        switch (parseInt(returnValue)) {
 | 
					            resolve({ _state: 'SMS_SEND_FAIL', code: returnCode }) // 短信接口错误代码:http://www.dxton.com/help_detail/2.html
 | 
				
			||||||
          // 短信接口代码:http://www.dxton.com/help_detail/2.html
 | 
					          }
 | 
				
			||||||
          case 100:
 | 
					        })
 | 
				
			||||||
            return { _state: 'SMS_SENT_SUCCESS', code: '100', msg: 'sendSms: 发送成功 (表示已和我们接口连通)' }
 | 
					      }).on("error",(error)=>{
 | 
				
			||||||
          case 101:
 | 
					        reject({ _state: 'SMS_SEND_ERROR', msg: error.message })
 | 
				
			||||||
            result.msg = 'sendSms: 验证失败(账号、密码可能错误)'
 | 
					 | 
				
			||||||
          case 102:
 | 
					 | 
				
			||||||
            result.msg = 'sendSms: 手机号码格式不正确'
 | 
					 | 
				
			||||||
          case 103:
 | 
					 | 
				
			||||||
            result.msg = 'sendSms: 会员级别不够'
 | 
					 | 
				
			||||||
          case 104:
 | 
					 | 
				
			||||||
            result.msg = 'sendSms: 内容未审核 (试用或小批量应用,只能用系统后台公共模板格式,标点符号都要一致!)'
 | 
					 | 
				
			||||||
          case 105:
 | 
					 | 
				
			||||||
            result.msg = 'sendSms: 内容过多或无合适匹配通道'
 | 
					 | 
				
			||||||
          case 106:
 | 
					 | 
				
			||||||
            result.msg = 'sendSms: 账户余额不足'
 | 
					 | 
				
			||||||
          case 107:
 | 
					 | 
				
			||||||
            result.msg = 'sendSms: Ip受限'
 | 
					 | 
				
			||||||
          case 108:
 | 
					 | 
				
			||||||
            result.msg = 'sendSms: 手机号码发送太频繁(一天5个),请换号或隔天再发'
 | 
					 | 
				
			||||||
          case 109:
 | 
					 | 
				
			||||||
            result.msg = 'sendSms: 帐号被锁定'
 | 
					 | 
				
			||||||
          case 110:
 | 
					 | 
				
			||||||
            result.msg = 'sendSms: 手机号发送频率持续过高,黑名单屏蔽数日'
 | 
					 | 
				
			||||||
          case 120:
 | 
					 | 
				
			||||||
            result.msg = 'sendSms: 系统升级'
 | 
					 | 
				
			||||||
          default:
 | 
					 | 
				
			||||||
            console.error(result)
 | 
					 | 
				
			||||||
            return result
 | 
					 | 
				
			||||||
        }  
 | 
					 | 
				
			||||||
      })
 | 
					      })
 | 
				
			||||||
    }).catch((error)=>{ 
 | 
					 | 
				
			||||||
      return { _state: 'SMS_SEND_FAIL', error }
 | 
					 | 
				
			||||||
    })
 | 
					    })
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  async sendSmsAliyun (phone, msgParam, templateCode, signName) {
 | 
					  async sendSmsAliyun (phone, msgParam, templateCode, signName) {
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user