Laravel6 使用腾讯云短信-基础配置
Laravel6使用腾讯云短信
安装 tencentcloud-sdk-php
tencentcloud-sdk-php 是腾讯云官方提供的官方组件,利用这个组件,我们可以快速的使用腾讯云的各项服务。
composer require "tencentcloud/tencentcloud-sdk-php"
封装适用于 Laravel 的 ServiceProvider。
首先在 config 目录中增加 tencentcloud.php
touch config/tencentcloud.php
填入如下内容。
/* config/tencentcloud.php */
<?php
return [
'default' => [
// 腾讯云账户秘钥
'secretId' => env('TENCENTCLOUD_SECRET_ID'),
'secretKey' => env('TENCENTCLOUD_SECRET_KEY'),
// HTTP 请求的超时时间(秒)
'timeout' => 60.0,
// 请求方式(默认为 POST)
'method' => env('TENCENT_CLOUD_METHOD') ?? 'POST',
// 指定签名算法(默认为 HmacSHA256)
'signMethod' => env('TENCENT_CLOUD_SIGN_METHOD') ?? 'TC3-HMAC-SHA256',
// 代理
'proxy' => env('TENCENT_CLOUD_PROXY') ?? ''
],
'sms' => [
// 指定接入地域域名(默认就近接入)
'endpoint' => env('TENCENT_CLOUD_SMS_ENDPOINT') ?? 'sms.tencentcloudapi.com',
// 地域参数(默认就近接入)
'region' => env('TENCENT_CLOUD_SMS_REGION') ?? 'ap-shanghai',
// 应用ID
'sdkappid' => env('TENCENT_CLOUD_SMS_SDKAPPID'),
// 短信签名
'sign' => env('TENCENT_CLOUD_SMS_SIGN'),
// 国际/港澳台短信 senderid: 国内短信填空,默认未开通,如需开通请联系 [sms helper](QQ: 3012203387)
'senderId' => env('TENCENT_CLOUD_SMS_SENDERID') ?? '',
// 模板ID
'templateId' => env('TENCENT_CLOUD_SMS_TEMPLATEID')
]
];
然后创建一个 ServiceProvider
php artisan make:provider TencentCloudSmsServiceProvider
修改文件
/* app/Providers/TencentCloudSmsServiceProvider.php */
<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use TencentCloud\Common\Credential;
// 导入对应产品模块的client
use TencentCloud\Sms\V20190711\SmsClient;
// 导入可选配置类
use TencentCloud\Common\Profile\ClientProfile;
use TencentCloud\Common\Profile\HttpProfile;
class TencentCloudSmsServiceProvider extends ServiceProvider
{
/**
* Register services.
*
* @return void
*/
public function register()
{
$this->app->singleton(SmsClient::class, function ($app) {
$cred = new Credential(config('tencentcloud.default.secretId'), config('tencentcloud.default.secretKey'));
$httpProfile = new HttpProfile('https://', config('tencentcloud.sms.endpoint'), config('tencentcloud.default.method'), config('tencentcloud.default.timeout'));
if (config('tencentcloud.default.proxy')) {
$httpProfile->setProxy(config('tencentcloud.default.proxy'));
}
$clientProfile = new ClientProfile(config('tencentcloud.default.signMethod'), $httpProfile);
return new SmsClient($cred, config('tencentcloud.sms.region'), $clientProfile);
});
$this->app->alias(SmsClient::class, 'tencentcloudSms');
}
/**
* Bootstrap services.
*
* @return void
*/
public function boot()
{
//
}
}
最后,打开 config/app.php
在 providers 中增加 App\Providers\TencentCloudSmsServiceProvider::class
/* config/app.php /*
·
·
·
'providers' => [
·
·
App\Providers\EventServiceProvider::class,
App\Providers\RouteServiceProvider::class,
App\Providers\TencentCloudSmsServiceProvider::class,
],
配置
腾讯云账户秘钥对
登录 API秘钥管理 获取秘钥。
子账号秘钥请注意授权!
在 .env
中配置 TENCENTCLOUD_SECRET_ID
和 TENCENTCLOUD_SECRET_KEY
, 注意下面需要替换为你自己的 ID 和 KEY:
/* .env */
·
·
·
# 腾讯云
TENCENTCLOUD_SECRET_ID=*******************
TENCENTCLOUD_SECRET_KEY=*******************
在 .env.example
中也加入配置示例,提交到版本库,方便以后部署。
/* .env.example */
# 腾讯云
TENCENTCLOUD_SECRET_ID=
TENCENTCLOUD_SECRET_KEY=
开通腾讯云短信
根据官方指引国内短信快速入门开通短信服务。
开通完成后可见如下页面,点击应用管理-应用列表,获取应用 sdkappid
并配置 .env
,注意下面需要替换为你自己的 SDKAPPID.
/* .env */
# 腾讯云
TENCENTCLOUD_SECRET_ID=*******************
TENCENTCLOUD_SECRET_KEY=*******************
TENCENT_CLOUD_SMS_SDKAPPID=1400******
申请签名
根据官方指引创建签名申请短信签名,个人开发者若有备案网站,可使用ICP备案的 网站名称
或 域名
申请,否则建议申请 微信公众号
进行快速申请测试。
短信签名说明
腾讯云签名审核标准
公众号不建议使用大众化无含义的名称(本人使用公众号测试
申请签名被拒无数次):如姓名为张三
,可申请公众号张三的公众号
,申请签名张三的公众号
。
审核通过后可见如下页面,获取 签名内容
配置 .env
,注意下面需要替换为你自己的 SIGN
.
/* .env */
# 腾讯云
TENCENTCLOUD_SECRET_ID=*******************
TENCENTCLOUD_SECRET_KEY=*******************
TENCENT_CLOUD_SMS_SDKAPPID=1400******
TENCENT_CLOUD_SMS_SIGN=**
特别注意:TENCENT_CLOUD_SMS_SIGN传参为“签名内容”,非“签名ID”。
申请模板
根据官方指引创建正文模板申请短信模板。
为了快速审核通过,且根据后续实际下发可正常使用,请申请以下模板内容:
{1}为您的登录验证码,请于{2}分钟内填写,如非本人操作,请忽略本短信。
审核通过后可见如下页面,获取 模板ID
配置 .env
,注意下面需要替换为你自己的 TEMPLATEID
.
/* .env */
# 腾讯云
TENCENTCLOUD_SECRET_ID=*******************
TENCENTCLOUD_SECRET_KEY=*******************
TENCENT_CLOUD_SMS_SDKAPPID=1400******
TENCENT_CLOUD_SMS_SIGN=**
TENCENT_CLOUD_SMS_TEMPLATEID=******
调试
接着在 tinker 中调试以下短信是否可以正常发送。
php artisan tinker
$sms = app('tencentcloudSms');
try {
$req = new \TencentCloud\Sms\V20190711\Models\SendSmsRequest();
$req->SmsSdkAppid = config('tencentcloud.sms.sdkappid');
$req->Sign = config('tencentcloud.sms.sign');
$req->PhoneNumberSet = array("+86137********');
$req->TemplateID = config('tencentcloud.sms.templateId');
$req->TemplateParamSet = ['123456', '5'];
$resp = $sms->SendSms($req);
dd($resp->toJsonString());
}catch(\TencentCloud\Common\Exception\TencentCloudSDKException $e) {
dd($e);
}
本作品采用《CC 协议》,转载必须注明作者和本文链接