|
|
|
@ -7,46 +7,84 @@ const Tea = require('@alicloud/tea-typescript');
@@ -7,46 +7,84 @@ const Tea = require('@alicloud/tea-typescript');
|
|
|
|
|
|
|
|
|
|
class AliyunSMSClient { |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 使用AK&SK初始化账号Client |
|
|
|
|
* @return Client |
|
|
|
|
* @throws Exception |
|
|
|
|
*/ |
|
|
|
|
static createClient(myConfig) { |
|
|
|
|
// 工程代码泄露可能会导致 AccessKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考。
|
|
|
|
|
// 建议使用更安全的 STS 方式,更多鉴权访问方式请参见:https://help.aliyun.com/document_detail/378664.html。
|
|
|
|
|
let config = new OpenApi.Config({ |
|
|
|
|
accessKeyId: myConfig.ALIBABA_CLOUD_ACCESS_KEY_ID, |
|
|
|
|
accessKeySecret: myConfig.ALIBABA_CLOUD_ACCESS_KEY_SECRET, |
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
// Endpoint 请参考 https://api.aliyun.com/product/Dysmsapi
|
|
|
|
|
config.endpoint = `dysmsapi.aliyuncs.com`; |
|
|
|
|
return new Dysmsapi20170525.default(config); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static async send(myConfig, signName, templateCode, templateParam, phoneNumber) { |
|
|
|
|
let sendSmsRequest = new Dysmsapi20170525.SendSmsRequest({ |
|
|
|
|
signName: signName, |
|
|
|
|
templateCode: templateCode, |
|
|
|
|
templateParam: templateParam, |
|
|
|
|
phoneNumbers: phoneNumber, |
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
let runtime = new Util.RuntimeOptions({ }); |
|
|
|
|
let client = AliyunSMSClient.createClient(myConfig); |
|
|
|
|
|
|
|
|
|
let done = false; |
|
|
|
|
|
|
|
|
|
try { |
|
|
|
|
await client.sendSmsWithOptions(sendSmsRequest, runtime); |
|
|
|
|
done = true; |
|
|
|
|
} catch (error) { |
|
|
|
|
console.error("AliyunSMSClient send sms message failed: %s", error.message); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return done; |
|
|
|
|
} |
|
|
|
|
/** |
|
|
|
|
* 使用AK&SK初始化账号Client |
|
|
|
|
* @return Client |
|
|
|
|
* @throws Exception |
|
|
|
|
*/ |
|
|
|
|
static createClient(myConfig) { |
|
|
|
|
// 工程代码泄露可能会导致 AccessKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考。
|
|
|
|
|
// 建议使用更安全的 STS 方式,更多鉴权访问方式请参见:https://help.aliyun.com/document_detail/378664.html。
|
|
|
|
|
let config = new OpenApi.Config({ |
|
|
|
|
accessKeyId: myConfig.ALIBABA_CLOUD_ACCESS_KEY_ID, |
|
|
|
|
accessKeySecret: myConfig.ALIBABA_CLOUD_ACCESS_KEY_SECRET, |
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
// Endpoint 请参考 https://api.aliyun.com/product/Dysmsapi
|
|
|
|
|
config.endpoint = `dysmsapi.aliyuncs.com`; |
|
|
|
|
return new Dysmsapi20170525.default(config); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static async send(myConfig, signName, templateCode, templateParam, phoneNumber) { |
|
|
|
|
let sendSmsRequest = new Dysmsapi20170525.SendSmsRequest({ |
|
|
|
|
signName: signName, |
|
|
|
|
templateCode: templateCode, |
|
|
|
|
templateParam: templateParam, |
|
|
|
|
phoneNumbers: phoneNumber, |
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
let runtime = new Util.RuntimeOptions({ }); |
|
|
|
|
let client = AliyunSMSClient.createClient(myConfig); |
|
|
|
|
|
|
|
|
|
let done = false; |
|
|
|
|
|
|
|
|
|
try { |
|
|
|
|
await client.sendSmsWithOptions(sendSmsRequest, runtime); |
|
|
|
|
done = true; |
|
|
|
|
} catch (error) { |
|
|
|
|
console.error("AliyunSMSClient send sms message failed: %s", error.message); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return done; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
//返回值:发送状态,可选值:[-1, 0, 1, 2, 3]
|
|
|
|
|
//分别对应:默认值,没发送过,发送中,发送失败,发送成功
|
|
|
|
|
static async queryLastOneDetail(myConfig, phoneNumber) { |
|
|
|
|
let today = new Date(); |
|
|
|
|
let year = today.getFullYear(), |
|
|
|
|
month = (today.getMonth() + 1).toString().padStart(2, '0'), |
|
|
|
|
date = today.getDate().toString().padStart(2, '0'); |
|
|
|
|
let querySmsRequest = new Dysmsapi20170525.QuerySendDetailsRequest({ |
|
|
|
|
phoneNumber: phoneNumber, |
|
|
|
|
sendDate: `${year}${month}${date}`, |
|
|
|
|
pageSize: 10, //只查询最新的一条,此参数API貌似忽略了
|
|
|
|
|
currentPage: 1, |
|
|
|
|
//bizId: '' //可选
|
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
let runtime = new Util.RuntimeOptions({ }); |
|
|
|
|
let client = AliyunSMSClient.createClient(myConfig); |
|
|
|
|
|
|
|
|
|
let done = -1; |
|
|
|
|
|
|
|
|
|
try { |
|
|
|
|
let queryResp = await client.querySendDetails(querySmsRequest); |
|
|
|
|
let dtos = queryResp.body.smsSendDetailDTOs.smsSendDetailDTO; |
|
|
|
|
|
|
|
|
|
let total = queryResp.body.totalCount; |
|
|
|
|
if (total == 0) { |
|
|
|
|
done = 0; |
|
|
|
|
}else { |
|
|
|
|
let dto = dtos[0]; //取最新的一条
|
|
|
|
|
done = dto.sendStatus; |
|
|
|
|
} |
|
|
|
|
} catch (error) { |
|
|
|
|
console.error("AliyunSMSClient query sms send detail failed: %s", error.message); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return done; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
exports.default = AliyunSMSClient; |