Laravel 極簡使用傳送簡訊 支援阿里雲、騰訊雲

Siam發表於2020-05-19

寫這個composer包的原因是因為這兩個服務商的簡訊功能sdk並不能單獨下載
意思是如果我使用簡訊傳送功能就需要去下載整個平臺功能的sdk
有的開源包實際也是依賴了平臺本身的sdk或者是做了其他很多的功能
對於我目前而言,我並沒有在自己應用後臺去整合管理雲平臺的簡訊服務,所以只用到了簡簡單單的傳送簡訊功能
由此就開始寫了這個包,看這兩個服務商的sdk原始碼和api文件,騰訊雲的看的實在是無言以對了
此包目前實際大小不超過20KB,有註釋,程式碼風格正確,OOP形式。

介紹

這是一個基於阿里雲和騰訊雲最新簡訊傳送功能的極簡包
為了更大限度相容更低版本的php,程式碼實現過程中也並沒有使用型別限制
如果你只想使用這兩個雲平臺的簡訊傳送功能,這個包是你不錯的選擇

使用方法

在支援composer包的框架內使用composer安裝此包

composer require siam-yon/sms

在具體程式碼中的使用方法

<?php

use Siam\Sms\AliSms;
use Siam\Sms\TencentSms;

class Demo
{
    function aliSend()
    {
        $key = '你的阿里雲金鑰標識';
        $secret = '你的阿里雲金鑰密碼';
        $sign = '你的阿里雲簡訊簽名';
        $template = '你的阿里雲簡訊模板';
        // 可傳送多個手機號,變數為陣列即可,如:[11111111111, 22222222222]
        $mobile = 11111111111;
        // 阿里雲模板變數為鍵值對陣列
        $params = ['code' => rand(1000, 9999)];
        $sms = new AliSms($key, $secret);
        // 需要注意,設定配置不分先後順序,send後也不會清空配置
        $result = $sms->setMobile($mobile)->setTemplate($template)->setSign($sign)->setParams($params)->send();
        /**
         * 返回值為bool,你可獲得阿里雲響應做出你業務內的處理
         *
         * status bool 此變數是此包用來判斷是否傳送成功
         * code string 阿里雲簡訊響應程式碼
         * message string 阿里雲簡訊響應資訊
         */
        if (!$result) {
            $response = $sms->getResponse();
            // 做出處理
        }
    }

    function tencentSend()
    {
        $key = '你的騰訊雲金鑰標識';
        $secret = '你的騰訊雲金鑰密碼';
        // 騰訊雲簡訊傳送簡訊需要指定應用id
        $appid = '你的騰訊雲簡訊應用id';
        $sign = '你的騰訊雲簡訊簽名';
        $template = '你的阿里雲簡訊模板';
        // 可傳送多個手機號,變數為陣列即可,如:[11111111111, 22222222222]
        $mobile = 11111111111;
        // 騰訊雲模板變數為索引陣列,當你傳入關聯陣列時會按順序變為索引陣列,如:['name' => '張三', 'code' => '123'] => ['張三', '123']
        $params = [rand(1000, 9999)];
        $sms = new TencentSms($key, $secret);
        // 需要注意,設定配置不分先後順序,send後也不會清空配置
        $result = $sms->setAppid($appid)->setMobile($mobile)->setTemplate($template)->setSign($sign)->setParams($params)->send();
        /**
         * 返回值為bool,你可獲得騰訊雲響應做出你業務內的處理
         *
         * status bool 此變數是此包用來判斷是否傳送成功
         * code string 騰訊雲簡訊響應程式碼
         * message string 騰訊雲簡訊響應資訊
         */
        if (!$result) {
            $response = $sms->getResponse();
            // 做出處理
        }
    }
}

在Laravel中的快捷使用

安裝後釋出配置檔案,此命令會在你的config目錄下生成一個siam-sms.php檔案

php artisan vendor:publish --provider="Siam\Sms\Laravel\ServiceProvider"

在env檔案中配置阿里雲或騰訊雲簡訊金鑰,當然你也可以修改env使用的鍵名 或者 直接明文寫在siam-sms.php配置檔案中

# 阿里雲簡訊服務金鑰
ALI_SMS_KEY=
ALI_SMS_SECRET=

# 騰訊雲簡訊服務金鑰
TENCENT_SMS_KEY=
TENCENT_SMS_SECRET=

在使用前,你需要在‘actions’內配置好一些動作模板,如:註冊、登入等,當你認為不同的動作之間的簡訊應該有模板、簽名等有差異時,那麼你就應該在actions內配置好對應的配置
需要注意使用TencentSms作為驅動時,每個動作內應該要有應用id

<?php

use Siam\Sms\AliSms;
use Siam\Sms\TencentSms;

return [
    'default' => 'ali',
    'ali' => [
        'key' => env('ALI_SMS_KEY'),
        'secret' => env('ALI_SMS_SECRET'),
        'drive' => AliSms::class,
        'actions' => [
            'register' => [
                'sign' => 'xxx論壇',
                'template' => '阿里雲模板id',
            ],
            'payment' => [
                'sign' => 'xxx商城',
                'template' => '阿里雲模板id'
            ]
        ]
    ],
    'tencent' => [
        'key' => env('TENCENT_SMS_KEY'),
        'secret' => env('TENCENT_SMS_SECRET'),
        'drive' => TencentSms::class,
        'actions' => [
            'register' => [
                'sign' => 'xxx論壇',
                'template' => '騰訊雲模板id',
                'appid' => '騰訊雲應用id'
            ]
        ]
    ]
];

使用例項化時傳入你使用的鍵名,如果不傳入,則會取配置檔案中的default值作為預設鍵名,預設的配置檔案鍵名有 ‘ali’ 和 ‘tencent’ 當然你可以任意的按照自己想法進行更改鍵名或新增鍵名

use SiamSms;

$sms = new SiamSms('tencent');
// 定義動作
$action = 'register';
// 可傳送多個手機號,變數為陣列即可,如:[11111111111, 22222222222]
$mobile = 11111111111;
// 使用騰訊雲時,當你傳入關聯陣列時會按順序變為索引陣列,如:['name' => '張三', 'code' => '123'] => ['張三', '123']
$params = ['code' => rand(1000, 9999)];
$result = $sms->send($action, $mobile, $params);
/**
 * 返回值為bool,你可獲得騰訊雲響應做出你業務內的處理
 *
 * status bool 此變數是此包用來判斷是否傳送成功
 * code string 騰訊雲簡訊響應程式碼
 * message string 騰訊雲簡訊響應資訊
 */
if (!$result) {
    $response = $sms->getResponse();
    // 做出處理
}

你也可以獲得實際使用的驅動

$sms->getDirve();

當你有使用問題時可以透過以下方式聯絡,我會在有空閒時間後第一時間回覆

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章