最近心血来潮,做个注册短信验证的项目,使用了腾讯云的短信服务,由于提供了SDK,接入速度还是很快的,只花了数小时即成功。推荐使用。
这里分享一下接入SDK的步骤和一些容易出错的地方。
服务器环境:
CentOS7.7+宝塔面板
一、开通腾讯云短信应用
https://console.cloud.tencent.com/smsv2
注册账号登录认证这些简单的步骤就不提了,实名认证之后会赠送100条免费短信,如果有营业执照进行企业认证会额外赠送1000条。
第一步,点击国内短信创建签名和正文模板。签名就是发送者,会以中括号包住,正文就是模板化的正文,有几种可以选择,自己编辑模板可能会降低通过率。最终发送的短信为:【签名】+正文。创建好等待审核通过即可,一般半个小时左右。这里不再详细展开。创建成功后获取到签名和正文模板的ID
第二步,点击应用列表创建应用,填写名称和简介即可。主要用于获取到
SDK AppID
此处可以将自己的手机号加入白名单,方便调试接口。
二、调试接口传参
上述操作全部完成后,访问
https://console.cloud.tencent.com/api/explorer?Product=sms&Version=2019-07-11&Action=SendSms&SignVersion=
进入调试页面
语言选择PHP,左边的传参是比较重点的地方。
SecretId和SecretKey点旁边的查看密钥即可生成;
PhoneNumberSet.N 接收短信的手机号。注意开头要加上+86;
TemplateID即之前创建的正文模板ID;
SmsSdkAppid之前创建的应用ID;
Sign之前创建的签名。注意是签名内容,不是ID,这里很容易弄错;
TemplateParamSet.N短信内容:
这个内容是填充到模板里面的,如
您的注册验证码:{1},如非本人操作,请忽略本短信!
短信内容将会替换{1}和剩下的内容一起发送出去。
其他参数可不填。
信息全部填写完成后,点击在线调用->发送请求。如果响应成功,且成功收到短信,就可以进行下一步的安装SDK了。反之根据响应结果检查传参。
三、安装部署SDK
PHP文档
https://cloud.tencent.com/document/product/382/43195
第一步,安装Composer
登录服务器终端,执行
curl -sS https://getcomposer.org/installer | php
第二步,部署SDK添加依赖
注意先切换到网站目录,默认会安装到root文件夹,造成引用文件困难。
建议切换到wwwroot目录进行安装。
宝塔面板会默认禁用PHP的一些函数,根据提示去开启,从禁用列表里面删除
Composer部署成功之后,将在线调试的代码复制下来。
<?php
require_once 'vendor/autoload.php';
use TencentCloud\Common\Credential;
use TencentCloud\Common\Profile\ClientProfile;
use TencentCloud\Common\Profile\HttpProfile;
use TencentCloud\Common\Exception\TencentCloudSDKException;
use TencentCloud\Sms\V20190711\SmsClient;
use TencentCloud\Sms\V20190711\Models\SendSmsRequest;
try {
$cred = new Credential("******", "******");
$httpProfile = new HttpProfile();
$httpProfile->setEndpoint("sms.tencentcloudapi.com");
$clientProfile = new ClientProfile();
$clientProfile->setHttpProfile($httpProfile);
$client = new SmsClient($cred, "", $clientProfile);
$req = new SendSmsRequest();
$params = array(
"PhoneNumberSet" => array( "+86***********" ),
"TemplateParamSet" => array( "******" ),
"TemplateID" => "******",
"SmsSdkAppid" => "******",
"Sign" => "******"
);
$req->fromJsonString(json_encode($params));
$resp = $client->SendSms($req);
print_r($resp->toJsonString());
}
catch(TencentCloudSDKException $e) {
echo $e;
}
第二行,引用的autoload.php文件位置,修改成服务器上的文件地址;
$params = array(
"PhoneNumberSet" => array( "+86***********" ),
"TemplateParamSet" => array( "短信内容" ),
"TemplateID" => "******",
"SmsSdkAppid" => "******",
"Sign" => "******"
);
各种ID固定的传参无需修改,此处建议把手机号和短信内容改成变量,由外部传入,笔者修改成 $_GET[‘phoneNum’ ]和 [‘veriCode’]。
将全部代码保存到php文件,使用GET或者POST传参即可调用。
由于加号 “+” 使用GET方式传参需要进行encodeURI转码,实际测试中发现加号可不写,SDK会自动补上。即传参86130****0000。POST可正常传参。
可接收返回值记录到日志。
建议仅限服务端内部调用,可在执行前加上代码:
if ($_SERVER['REMOTE_ADDR']!="服务器IP地址"){
die('No Auth!');
}
服务器内部使用cURL调用即可。