From 03b896d0fa158b6d4d3f97b07ded623134ddce5b Mon Sep 17 00:00:00 2001 From: Luk Lu Date: Sat, 11 Dec 2021 11:46:41 +0800 Subject: [PATCH] =?UTF-8?q?=E7=94=A8=20new=20Promise(http.get(...))=20?= =?UTF-8?q?=E6=9D=A5=E5=8C=85=E8=A3=85=EF=BC=8C=E6=B5=8B=E8=AF=95=E9=80=9A?= =?UTF-8?q?=E8=BF=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- messenger.js | 76 +++++++++++++++++++--------------------------------- 1 file changed, 27 insertions(+), 49 deletions(-) diff --git a/messenger.js b/messenger.js index 5d0ef10..d230137 100644 --- a/messenger.js +++ b/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) {