From 7a65b250f7ccc64db03abd92c4572e68b2b4e040 Mon Sep 17 00:00:00 2001 From: wkj <278599135@.com> Date: Fri, 5 Jan 2024 17:10:28 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A4=A9=E7=BF=BC=E4=BA=91=E5=8F=91=E7=9F=AD?= =?UTF-8?q?=E4=BF=A1=E6=B5=8B=E8=AF=95=E9=80=9A=E8=BF=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- es/service/ali/Sms.d.ts | 6 +++++- es/service/ctyun/Sms.js | 6 ++++-- lib/service/ali/Sms.d.ts | 6 +++++- lib/service/ctyun/Sms.js | 14 ++++++------ src/service/ali/Sms.ts | 11 ++++++---- src/service/ctyun/Sms.ts | 7 +++--- test/testSms.ts | 46 ++++++++++++++++++++++++++++++++++++++++ 7 files changed, 79 insertions(+), 17 deletions(-) create mode 100644 test/testSms.ts diff --git a/es/service/ali/Sms.d.ts b/es/service/ali/Sms.d.ts index 57b1bd5..73c4221 100644 --- a/es/service/ali/Sms.d.ts +++ b/es/service/ali/Sms.d.ts @@ -7,6 +7,10 @@ type SendSmsRequest = { smsUpExtendCode?: string; outId?: string; }; +type DescribeSmsTemplateListRequest = { + PageIndex: number; + PageSize: number; +}; export declare class AliSmsInstance { accessKeyId: string; accessKeySecret: string; @@ -14,6 +18,6 @@ export declare class AliSmsInstance { client: Dysmsapi20170525; constructor(accessKeyId: string, accessKeySecret: string, endpoint?: string); sendSms(params: SendSmsRequest): Promise<$Dysmsapi20170525.SendSmsResponseBody>; - syncTemplate(params: $Dysmsapi20170525.QuerySmsTemplateListRequest): Promise<$Dysmsapi20170525.QuerySmsTemplateListResponseBody>; + syncTemplate(params: DescribeSmsTemplateListRequest): Promise<$Dysmsapi20170525.QuerySmsTemplateListResponseBody>; } export {}; diff --git a/es/service/ctyun/Sms.js b/es/service/ctyun/Sms.js index 2a84cba..7758f51 100644 --- a/es/service/ctyun/Sms.js +++ b/es/service/ctyun/Sms.js @@ -1,5 +1,4 @@ import crypto from 'crypto'; -import { Buffer } from 'buffer'; import { OakNetworkException, } from 'oak-domain/lib/types/Exception'; function format(date, layout) { function pad(num, digit) { @@ -108,7 +107,10 @@ export class CTYunSmsInstance { return response.json(); } hmacsha256(data, key) { - const hmac = crypto.createHmac('sha1', key).update(data).digest('hex'); + const hmac = crypto + .createHmac('sha256', key) + .update(data) + .digest('hex'); return hmac; } sha256(data) { diff --git a/lib/service/ali/Sms.d.ts b/lib/service/ali/Sms.d.ts index 57b1bd5..73c4221 100644 --- a/lib/service/ali/Sms.d.ts +++ b/lib/service/ali/Sms.d.ts @@ -7,6 +7,10 @@ type SendSmsRequest = { smsUpExtendCode?: string; outId?: string; }; +type DescribeSmsTemplateListRequest = { + PageIndex: number; + PageSize: number; +}; export declare class AliSmsInstance { accessKeyId: string; accessKeySecret: string; @@ -14,6 +18,6 @@ export declare class AliSmsInstance { client: Dysmsapi20170525; constructor(accessKeyId: string, accessKeySecret: string, endpoint?: string); sendSms(params: SendSmsRequest): Promise<$Dysmsapi20170525.SendSmsResponseBody>; - syncTemplate(params: $Dysmsapi20170525.QuerySmsTemplateListRequest): Promise<$Dysmsapi20170525.QuerySmsTemplateListResponseBody>; + syncTemplate(params: DescribeSmsTemplateListRequest): Promise<$Dysmsapi20170525.QuerySmsTemplateListResponseBody>; } export {}; diff --git a/lib/service/ctyun/Sms.js b/lib/service/ctyun/Sms.js index 1c14ad2..a2c6112 100644 --- a/lib/service/ctyun/Sms.js +++ b/lib/service/ctyun/Sms.js @@ -3,7 +3,6 @@ Object.defineProperty(exports, "__esModule", { value: true }); exports.CTYunSmsInstance = void 0; const tslib_1 = require("tslib"); const crypto_1 = tslib_1.__importDefault(require("crypto")); -const buffer_1 = require("buffer"); const Exception_1 = require("oak-domain/lib/types/Exception"); function format(date, layout) { function pad(num, digit) { @@ -85,10 +84,10 @@ class CTYunSmsInstance { const rawString = `${headerStr}\n${calculateContentHash}`; // SETUP5:构造签名 const signTime = this.hmacsha256(timestamp, this.securityKey); - const signAK = this.hmacsha256(this.accessKey, buffer_1.Buffer.from(signTime, 'hex')); - const signDate = this.hmacsha256(timestamp.slice(0, 8), buffer_1.Buffer.from(signAK, 'hex')); - const sign = this.hmacsha256(rawString, buffer_1.Buffer.from(signDate, 'hex')); - const signature = buffer_1.Buffer.from(sign, 'hex').toString('base64'); + const signAK = this.hmacsha256(this.accessKey, Buffer.from(signTime, 'hex')); + const signDate = this.hmacsha256(timestamp.slice(0, 8), Buffer.from(signAK, 'hex')); + const sign = this.hmacsha256(rawString, Buffer.from(signDate, 'hex')); + const signature = Buffer.from(sign, 'hex').toString('base64'); // SETUP:6 构造请求头 const signatureHeader = `${this.accessKey} Headers=ctyun-eop-request-id;eop-date Signature=${signature}`; const headers = { @@ -112,7 +111,10 @@ class CTYunSmsInstance { return response.json(); } hmacsha256(data, key) { - const hmac = crypto_1.default.createHmac('sha1', key).update(data).digest('hex'); + const hmac = crypto_1.default + .createHmac('sha256', key) + .update(data) + .digest('hex'); return hmac; } sha256(data) { diff --git a/src/service/ali/Sms.ts b/src/service/ali/Sms.ts index a6cea1f..598ba28 100644 --- a/src/service/ali/Sms.ts +++ b/src/service/ali/Sms.ts @@ -19,6 +19,11 @@ type SendSmsResponse = { RequestId: string; }; +type DescribeSmsTemplateListRequest = { + PageIndex: number; + PageSize: number; +}; + export class AliSmsInstance { accessKeyId: string; @@ -67,16 +72,14 @@ export class AliSmsInstance { ); const { statusCode, body } = data; if (statusCode != 200) { - throw new Error( - `sendSms接口返回状态码错误,为${statusCode}` - ); + throw new Error(`sendSms接口返回状态码错误,为${statusCode}`); } return body; } catch (error) { throw error; } } - async syncTemplate(params: $Dysmsapi20170525.QuerySmsTemplateListRequest) { + async syncTemplate(params: DescribeSmsTemplateListRequest) { const { PageIndex, PageSize } = params; try { diff --git a/src/service/ctyun/Sms.ts b/src/service/ctyun/Sms.ts index f916a3f..b95f7a8 100644 --- a/src/service/ctyun/Sms.ts +++ b/src/service/ctyun/Sms.ts @@ -1,12 +1,10 @@ import crypto from 'crypto'; -import { Buffer } from 'buffer'; import * as querystring from 'querystring'; import { OakExternalException, OakNetworkException, } from 'oak-domain/lib/types/Exception'; - type SendSmsRequest = { phoneNumber: string; // 接收短信的手机号码。格式:国内短信:无任何前缀的11位手机号码,例如1381111****。多个手机号码使用英文","隔开,最多支持一次提交200个手机号码。 templateCode: string; @@ -187,7 +185,10 @@ export class CTYunSmsInstance { } private hmacsha256(data: any, key: Buffer | string) { - const hmac = crypto.createHmac('sha1', key).update(data).digest('hex'); + const hmac = crypto + .createHmac('sha256', key) + .update(data) + .digest('hex'); return hmac; } diff --git a/test/testSms.ts b/test/testSms.ts new file mode 100644 index 0000000..63312a3 --- /dev/null +++ b/test/testSms.ts @@ -0,0 +1,46 @@ + + +//测试天翼云发短信 +import { CTYunSmsInstance, SmsSdk } from '../src/index'; + +const accessKey = ''; +const securityKey = ''; + +async function sendSms() { + const instance = SmsSdk.getInstance( + 'ctyun', + accessKey, + securityKey, + 'sms-global.ctapi.ctyun.cn' + ) as CTYunSmsInstance; + + const data = await instance.sendSms({ + phoneNumber: '13372548015', + templateCode: 'SMS64124870510', + templateParam: { code: '1111' }, + signName: '天翼云测试', + }); + + console.log(data); +} + +async function syncTemplate() { + const instance = SmsSdk.getInstance( + 'ctyun', + accessKey, + securityKey, + 'sms-global.ctapi.ctyun.cn' + ) as CTYunSmsInstance; + + const data = await instance.syncTemplate({ + pageIndex: 1, + pageSize: 50 + }); + + console.log(data); +} + +// sendSms() +// syncTemplate(); + +