用 new Promise(http.get(...)) 来包装,测试通过

This commit is contained in:
陆柯 2021-12-11 11:46:41 +08:00
parent 68e4041388
commit 03b896d0fa

View File

@ -15,21 +15,25 @@ module.exports = {
return await util.promisify(smtpTransporter.sendMail).call(smtpTransporter, option)
},
async sendSms (phone, option) {
async sendSms (phone, { vendor, msg, msgParam, templateCode, signName }={}) {
// 通过option对象对外提供统一的调用参数格式
if (/^\+\d+-\d+$/.test(phone)) {
option = option || {}
if (option.vendor === 'dxton' && option.msg) {
return await this.sendSmsDxton(phone, option.msg)
} else if (option.vendor === 'aliyun' && option.msgParam && option.templateCode && option.signName) {
return await this.sendSmsAliyun(phone, option.msgParam, option.templateCode, option.signName)
if (vendor === 'dxton' && msg) {
return await this.sendSmsDxton(phone, msg)
} else if (vendor === 'aliyun' && msgParam && templateCode && signName) {
return await this.sendSmsAliyun(phone, msgParam, templateCode, signName)
}
}
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) {
// 使用 dxton.com 的短信接口。
var matches = phone.match(/\d+/g)
var smsNumber, smsUrl
if (matches[0] === '86') {
@ -39,50 +43,24 @@ module.exports = {
smsUrl = wo.envi.SMS.dxton.urlWorld // 国际短信不需要签名、模板,可发送任意内容。
smsNumber = matches[0] + matches[1]
}
// let returnValue = await RequestPromise.get(smsUrl + '&mobile=' + smsNumber + '&content=' + encodeURIComponent(msg))
// let returnValue = await axios.get(smsUrl + '&mobile=' + smsNumber + '&content=' + encodeURIComponent(msg))
// following code with http.get is untested:
return util.promisify(http.get)(smsUrl + '&mobile=' + smsNumber + '&content=' + encodeURIComponent(msg))
.then((resp)=>{
let data = ''
resp.on('data', (chunk) => { data += chunk })
resp.on('end', () => {
let returnValue = JSON.parse(data)
let result = { _state: 'SMS_SEND_FAIL', code: returnValue }
switch (parseInt(returnValue)) {
// 短信接口代码http://www.dxton.com/help_detail/2.html
case 100:
return { _state: 'SMS_SENT_SUCCESS', code: '100', msg: 'sendSms: 发送成功 (表示已和我们接口连通)' }
case 101:
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
}
// let returnCode = await RequestPromise.get(smsUrl + '&mobile=' + smsNumber + '&content=' + encodeURIComponent(msg))
// let returnCode = await axios.get(smsUrl + '&mobile=' + smsNumber + '&content=' + encodeURIComponent(msg))
return await new Promise((resolve, reject)=>{
http.get(smsUrl + '&mobile=' + smsNumber + '&content=' + encodeURIComponent(msg), (resp)=>{
let returnCode = ''
resp.on('returnCode', (chunk) => { returnCode += chunk })
resp.on('end', () => {
if (parseInt(returnCode)===100){
resolve({ _state: 'SMS_SENT_SUCCESS', code: returnCode }) // 100: 发送成功 (表示已和我们接口连通)
}else{
resolve({ _state: 'SMS_SEND_FAIL', code: returnCode }) // 短信接口错误代码http://www.dxton.com/help_detail/2.html
}
})
}).on("error",(error)=>{
reject({ _state: 'SMS_SEND_ERROR', msg: error.message })
})
}).catch((error)=>{
return { _state: 'SMS_SEND_FAIL', error }
})
},
async sendSmsAliyun (phone, msgParam, templateCode, signName) {