Service implement api or sdk of 3rd party.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 

90 lines
3.2 KiB

'use strict';
const Dysmsapi20170525 = require('@alicloud/dysmsapi20170525');
const OpenApi = require('@alicloud/openapi-client');
const Util = require('@alicloud/tea-util');
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;
}
//返回值:发送状态,可选值:[-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;