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_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 协议》,转载必须注明作者和本文链接
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!