mirror of
https://github.com/cool-team-official/cool-admin-midway-packages.git
synced 2026-04-18 18:38:09 +00:00
91 lines
2.0 KiB
TypeScript
91 lines
2.0 KiB
TypeScript
import { Config, Provide } from '@midwayjs/core';
|
|
import { CoolSmsYpConfig } from './interface';
|
|
import { CoolCommException } from '@cool-midway/core';
|
|
import axios from 'axios';
|
|
|
|
/**
|
|
* 云片短信
|
|
*/
|
|
@Provide()
|
|
export class SmsYp {
|
|
@Config('cool.sms.yp')
|
|
config: CoolSmsYpConfig;
|
|
|
|
/**
|
|
* 配置
|
|
* @param config
|
|
*/
|
|
setConfig(config: CoolSmsYpConfig) {
|
|
this.config = config;
|
|
}
|
|
|
|
/**
|
|
* 发送短信
|
|
* @param phones 手机号 数组,需要加国家码如 ["+8612345678901"]
|
|
* @param params 参数
|
|
* @param config signName 签名 template 模板
|
|
* @returns
|
|
*/
|
|
async send(
|
|
phones: string,
|
|
params: {
|
|
[key: string]: string;
|
|
},
|
|
config?: {
|
|
signName: string;
|
|
template: string;
|
|
}
|
|
) {
|
|
const { apikey } = this.config;
|
|
if (!config) {
|
|
config = {
|
|
signName: this.config.signName,
|
|
template: this.config.template,
|
|
};
|
|
}
|
|
if (!apikey) {
|
|
throw new CoolCommException('请配置云片短信');
|
|
}
|
|
|
|
const headers = {
|
|
Accept: 'application/json;charset=utf-8',
|
|
'Content-Type': 'application/x-www-form-urlencoded;charset=utf-8',
|
|
};
|
|
const data = {
|
|
apikey: apikey,
|
|
mobile: phones,
|
|
tpl_id: config.template,
|
|
tpl_value: this.smsTplValue(params),
|
|
};
|
|
const result = await axios.post(
|
|
'https://sms.yunpian.com/v2/sms/tpl_single_send.json',
|
|
data,
|
|
{ headers }
|
|
);
|
|
if (result.data.code === 0) {
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
/**
|
|
* 获得短信模板值
|
|
* @param obj
|
|
* @returns
|
|
*/
|
|
protected smsTplValue(obj) {
|
|
const urlParams = [];
|
|
|
|
for (let key in obj) {
|
|
// eslint-disable-next-line no-prototype-builtins
|
|
if (obj.hasOwnProperty(key)) {
|
|
const encodedKey = encodeURIComponent(`#${key}#`);
|
|
const encodedValue = encodeURIComponent(obj[key]);
|
|
urlParams.push(`${encodedKey}=${encodedValue}`);
|
|
}
|
|
}
|
|
|
|
return urlParams.join('&');
|
|
}
|
|
}
|