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
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; |