用 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)
|
||||
},
|
||||
|
||||
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) {
|
||||
|
Loading…
Reference in New Issue
Block a user