Files
webapp-starter/docs/aliyun-sms.md
D8D Developer 71aaeb9424 ci: 添加 Docker 构建和推送工作流
- 新增 Dockerfile 和 .dockerignore 文件
- 添加 Gitea 持续集成工作流,用于构建和推送 Docker 镜像
- 新增 .gitignore 文件,忽略构建和配置文件
- 添加项目结构和规范文档,包括 TypeScript、模块化、API、数据库等规范
- 新增前端和后端的基础代码结构
2025-06-11 09:35:39 +00:00

2.6 KiB
Raw Blame History

// This file is auto-generated, don't edit it
// 依赖的模块可通过下载工程中的模块依赖文件或右上角的获取 SDK 依赖信息查看
import Dysmsapi20170525, * as $Dysmsapi20170525 from '@alicloud/dysmsapi20170525';
import OpenApi, * as $OpenApi from '@alicloud/openapi-client';
import Util, * as $Util from '@alicloud/tea-util';
import { env } from '../../config/env.ts';

export class SMS {
  /**
   * @remarks
   * 使用AK&SK初始化账号Client
   * @returns Client
   * 
   * @throws Exception
   */
  static createClient(): Dysmsapi20170525 {
    // 工程代码泄露可能会导致 AccessKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考。
    // 建议使用更安全的 STS 方式更多鉴权访问方式请参见https://help.aliyun.com/document_detail/378664.html。
    if (!env.deploy?.alicloud) {
      throw new Error("Aliyun SMS configuration is required");
    }
    
    const { accessKeyId, accessKeySecret } = env.deploy.alicloud;
    
    let config = new $OpenApi.Config({
      accessKeyId,
      accessKeySecret,
    });
    // Endpoint 请参考 https://api.aliyun.com/product/Dysmsapi
    config.endpoint = `dysmsapi.aliyuncs.com`;
    return new (Dysmsapi20170525 as any).default(config);
  }

  /**
   * 发送短信
   * @param phoneNumber 手机号
   * @param code 验证码
   * @param templateCode 模板代码,默认使用配置的验证码模板
   * @param signName 短信签名,默认使用配置的签名
   */
  static async sendVerificationSMS(
    phoneNumber: string, 
    code: string,
    templateCode?: string,
    signName?: string
  ): Promise<boolean> {
    let client = this.createClient();
    let sendSmsRequest = new $Dysmsapi20170525.SendSmsRequest({
      signName: signName || (env.sms?.defaultSignName || "多八多"),
      templateCode: templateCode || (env.sms?.defaultTemplateCode || "SMS_164760103"),
      phoneNumbers: phoneNumber,
      templateParam: JSON.stringify({code: code}),
    });
    let runtime = new $Util.RuntimeOptions({ });
    try {
      // 发送短信
      const result = await client.sendSmsWithOptions(sendSmsRequest, runtime);
      console.log("SMS sent successfully:", result);
      return true;
    } catch (error: unknown) {
      // 错误处理
      const err = error as { message?: string, data?: { Recommend?: string } };
      console.error("SMS sending failed:", err.message);
      if (err.data && err.data["Recommend"]) {
        console.error("Recommendation:", err.data["Recommend"]);
      }
      return false;
    }    
  }
}