Laravel6 使用騰訊雲簡訊-基礎配置

yunli發表於2020-05-12

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

相關文章