安裝 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 協議》,轉載必須註明作者和本文連結