头图

禅道集成腾讯云短信

黄岛主

背景

短信作为验证手机有效身份的手段之一,同时也承担着关键信息的提醒,作为消息系统展现端的最重要的接入端非常关键。笔者在中秋假期研究了几大短信平台,并选取了禅道集成腾讯云短信来进行集成展示。

选型

腾讯云短信比较阿里云短信有着显著优势:

  • 腾讯云注册就赠送200条免费,阿里云没有
  • 个人用户,腾讯云50元/1000条,阿里价格相同,但是腾讯云有折扣,可以40元/1000条买,同时购买还赠送每1000条限时短信100条,阿里没有
  • 短信申请签名,腾讯云个人账户可以支持实名,也可以支持网站、APP、小程序和公众号,也就说可以和你个人账户开创的网站、公众号的名字一样,阿里云不行,个人账户的短信签名必须和你真实姓名一样,相比较腾讯短信就非常人性化了。
  • 模板申请,阿里审核严格多了,申请短信模板无数次驳回,相比较腾讯短信就比较宽松,但是多个变量加起来的总字数有限制,超过就会发送失败,查看文档没明确答复,捉蚂蚁数了半天屏幕大概可能12个字左右
  • 开发集成方便,腾讯云除了提供传统的SDK外,还支持云函数,接入更方便,开发文档也写的比较友好。阿里云只支持SDK方式接入,文档版本比较混乱,不太友好。
  • 最终让我放弃阿里云的,是因为阿里云不知道什么原因封了我24小时短信功能(就是整个控制台点短信服务进去告诉我没开通...实际是开通的了),找客服就让我清缓存,后来啥都没做,睡了一觉起来好了

环境

  • PHP 7.2.34
  • Apache httpd 2.4
  • Mysql5.7.33
  • 禅道开源版15.4

参考

https://cloud.tencent.com/doc...

申请签名和申请模板

登录腾讯云的控制台,进入短信控制台,按照流程申请签名和模板,两个必须都申请

安装SDK

1、安装 Composer

Windows 环境:请访问 Composer 官网 下载安装包并进行安装,地址
https://getcomposer.org/downl...

Linux环境:请运行一下代码

curl -sS https://getcomposer.org/installer | php
sudo mv composer.phar /usr/local/bin/composer

2、获取SDK文件

在禅道的www目录下,新建一个sms目录,命令行切到www/sms目录下,运行一下命令

composer require tencentcloud/tencentcloud-sdk-php

运行成功后,会生成一个vendor的文件夹以及若干文件

禅道短信类编写

在module目录下,新建一个sms文件夹,其中按照禅道结构,新建一个lang文件夹和lang文件,以及model文件

1、zh-cn.php

<?php
//实例化一个认证对象,入参需要传入腾讯云账户密钥对secretId,secretKey。
$lang->sms->secretId       = '';
$lang->sms->secretKey       = '';
/* 短信应用ID: 短信SdkAppId在 [短信控制台] 添加应用后生成的实际SdkAppId,示例如1400006666 */
$lang->sms->SdkAppId       = '';
/* 短信签名内容: 使用 UTF-8 编码,必须填写已审核通过的签名,签名信息可登录 [短信控制台] 查看 */
$lang->sms->SignName       = '';
/* 模板 ID: 必须填写已审核通过的模板 ID。模板ID可登录 [短信控制台] 查看 */
$lang->sms->TemplateIdList['mb1']       = '';     
$lang->sms->TemplateIdList['mb2']       = '';     
$lang->sms->TemplateIdList['mb3']       = '';     
  • secretId和secretKey
    登录腾讯云控制台,点击右上角你的头像,选择"访问管理”

选择API密钥管理,生成你的secretId和secretKey

  • SdkAppId
    登录腾讯云的控制台,进入短信控制台,选择应用列表,生成你的SdkAppId
  • SignName
    登录腾讯云的控制台,进入短信控制台,选择签名管理,查阅你的签名,是内容这一列,千万不要弄成ID
  • TemplateIdList
    登录腾讯云的控制台,进入短信控制台,选择正文模板管理,取出你要使用的模板ID,如果超过多个,可自定义key,value必须填入模板ID

2、model.php

<?php
//sms test
require_once  '../../www/sms/vendor/autoload.php';
// 导入对应产品模块的client
use TencentCloud\Sms\V20210111\SmsClient;
// 导入要请求接口对应的Request类
use TencentCloud\Sms\V20210111\Models\SendSmsRequest;
use TencentCloud\Common\Exception\TencentCloudSDKException;
use TencentCloud\Common\Credential;
// 导入可选配置类
use TencentCloud\Common\Profile\ClientProfile;
use TencentCloud\Common\Profile\HttpProfile;


class smsModel extends model
{
    
    public function sendmessage($arr1,$arr2,$TemplateId)
    {
        /* 必要步骤:
         * 实例化一个认证对象,入参需要传入腾讯云账户密钥对secretId,secretKey。
         * 这里采用的是从环境变量读取的方式,需要在环境变量中先设置这两个值。
         * 你也可以直接在代码中写死密钥对,但是小心不要将代码复制、上传或者分享给他人,
         * 以免泄露密钥对危及你的财产安全。
         * CAM密匙查询: https://console.cloud.tencent.com/cam/capi*/
        $cred = new Credential($this->lang->sms->secretId, $this->lang->sms->secretKey);
        //$cred = new Credential(getenv("TENCENTCLOUD_SECRET_ID"), getenv("TENCENTCLOUD_SECRET_KEY"));
        
        // 实例化一个http选项,可选的,没有特殊需求可以跳过
        $httpProfile = new HttpProfile();
        // 配置代理
        // $httpProfile->setProxy("https://ip:port");
        $httpProfile->setReqMethod("GET");  // post请求(默认为post请求)
        $httpProfile->setReqTimeout(30);    // 请求超时时间,单位为秒(默认60秒)
        $httpProfile->setEndpoint("sms.tencentcloudapi.com");  // 指定接入地域域名(默认就近接入)
        
        // 实例化一个client选项,可选的,没有特殊需求可以跳过
        //$clientProfile = new ClientProfile();
        //$clientProfile->setSignMethod("TC3-HMAC-SHA256");  // 指定签名算法(默认为HmacSHA256)
        //$clientProfile->setHttpProfile($httpProfile);
        
        // 实例化要请求产品(以sms为例)的client对象,clientProfile是可选的
        // 第二个参数是地域信息,可以直接填写字符串 ap-guangzhou,或者引用预设的常量
        $client = new SmsClient($cred, "ap-guangzhou", $clientProfile);
        
        // 实例化一个 sms 发送短信请求对象,每个接口都会对应一个request对象。
        $req = new SendSmsRequest();
        
        /* 填充请求参数,这里request对象的成员变量即对应接口的入参
         * 你可以通过官网接口文档或跳转到request对象的定义处查看请求参数的定义
         * 基本类型的设置:
         * 帮助链接:
         * 短信控制台: https://console.cloud.tencent.com/smsv2
         * sms helper: https://cloud.tencent.com/document/product/382/3773 */
        
        /* 短信应用ID: 短信SdkAppId在 [短信控制台] 添加应用后生成的实际SdkAppId,示例如1400006666 */
        $req->SmsSdkAppId = $this->lang->sms->SdkAppId;
        /* 短信签名内容: 使用 UTF-8 编码,必须填写已审核通过的签名,签名信息可登录 [短信控制台] 查看 */
        $req->SignName = $this->lang->sms->SignName;
        /* 短信码号扩展号: 默认未开通,如需开通请联系 [sms helper] */
        $req->ExtendCode = "";
        /* 下发手机号码,采用 E.164 标准,+[国家或地区码][手机号]
         * 示例如:+8613711112222, 其中前面有一个+号 ,86为国家码,13711112222为手机号,最多不要超过200个手机号*/
        $req->PhoneNumberSet = $arr1;
        /* 国际/港澳台短信 SenderId: 国内短信填空,默认未开通,如需开通请联系 [sms helper] */
        $req->SenderId = "";
        /* 用户的 session 内容: 可以携带用户侧 ID 等上下文信息,server 会原样返回 */
        $req->SessionContext = "";
        /* 模板 ID: 必须填写已审核通过的模板 ID。模板ID可登录 [短信控制台] 查看 */
        $req->TemplateId = "$TemplateId";
        /* 模板参数: 若无模板参数,则设置为空*/
        $req->TemplateParamSet = $arr2;
        
        
        // 通过client对象调用SendSms方法发起请求。注意请求方法名与请求对象是对应的
        // 返回的resp是一个SendSmsResponse类的实例,与请求对象对应
        $resp = $client->SendSms($req);
        
        // 输出json格式的字符串回包
        //print_r($resp->toJsonString());
        
        // 也可以取出单个值。
        // 您可以通过官网接口文档或跳转到response对象的定义处查看返回字段的定义
        //print_r($resp->TotalCount);
        
        return $resp;
    }
    
}
  • $arr1就是手机号码数组,可以多个
  • $arr2就是对应模板的变量数组,可以多个
  • $TemplateId就是当前使用的模板ID

使用禅道短信类

在任意的control文件里

$this->loadModel('sms');

然后构造短信传入参数,并使用短信类发送短信

$arr1 = array();
$arr2 = array();

//输入手机号码,如果每行一个号码,构造多行
$arr1[]="手机号码";

//如果本次使用的模板ID有多个变量参数,则变量赋值要都早多行
$arr2[]="变量1";
$arr2[]="变量2";
$arr2[]="变量3"
                
//传入$arr1和$arr2两个数组,同时传入要发送短信的模板ID
$this->sms->sendmessage($arr1,$arr2,$this->lang->sms->TemplateIdList['mb1']);

至此,在禅道里如何集成腾讯云短信完毕!

阅读 227

divsun
IT技术

Wechat:divsun

1 声望
0 粉丝
0 条评论
你知道吗?

Wechat:divsun

1 声望
0 粉丝
文章目录
宣传栏