PHP開發調用阿里雲短信驗證碼的代碼-直接可用


  • 1:最低要求 PHP 5.6
  • 2:安裝了composer 
  • 3:阿里雲composer鏡像地址命令(如果設置過就不需要): 
    • composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
  • 4:安裝 SDK 核心庫 OpenAPI : Alibaba Cloud SDK for PHP 作為依賴項:
    • composer require alibabacloud/darabonba-openapi
  • 5:阿里雲短信SDK安裝包命令(官方地址:https://next.api.aliyun.com/api-tools/sdk/Dysmsapi):
    • composer require alibabacloud/dysmsapi-20170525 2.0.8
<?php

// This file is auto-generated, don't edit it. Thanks.
namespace lib;

use AlibabaCloud\SDK\Dysmsapi\V20170525\Dysmsapi;
use AlibabaCloud\SDK\Dysmsapi\V20170525\Models\SendSmsRequest;
use Darabonba\OpenApi\Models\Config;

class aliyunSms
{

    private static $accessKeyId = 'LTAI5t7AC3RH3333pZTDCaA3';//accessKeyId
    private static $accessKeySecret = 'ihDUcyqNZvNYXASfLtijI33333NSk';//accessKeySecret
    private static $signName = 'xxxx技有限公司';//簽名
    private static $templateCode = 'SMS_228533331';//模板代碼

    /**
     * 使用AK&SK初始化賬號Client
     * @param string $accessKeyId
     * @param string $accessKeySecret
     * @return Dysmsapi Client
     */
    private static function createClient($accessKeyId, $accessKeySecret)
    {
        $config = new Config([
            // 您的AccessKey ID
            "accessKeyId" => $accessKeyId,
            // 您的AccessKey Secret
            "accessKeySecret" => $accessKeySecret
        ]);
        // 訪問的域名
        $config->endpoint = "dysmsapi.aliyuncs.com";
        return new Dysmsapi($config);
    }

    /**
     * @param string $phoneNumbers 手機號
     * @param string $code 驗證碼
     * @return void
     */
//    public static function main($args)
    private static function main($phoneNumbers, $code)
    {
        $client = self::createClient(self::$accessKeyId, self::$accessKeySecret);
        $sendSmsRequest = new SendSmsRequest([
            "templateParam" => "{\"code\":\"{$code}\"}",
            "phoneNumbers" => "{$phoneNumbers}",
            "signName" => self::$signName,
            "templateCode" => self::$templateCode
        ]);
        $ali_res = $client->sendSms($sendSmsRequest);

        if ($ali_res->body->code == 'OK' && $ali_res->body->bizId != NULL) {
            return true;
        }

        switch ($ali_res->body->code) {
            case  'isv.BUSINESS_LIMIT_CONTROL':
                exception('短信發送頻繁,請稍候再試');//tp的拋出錯誤,換成你自己的報錯
                break;
            case  'isv.TEMPLATE_PARAMS_ILLEGAL':
                exception('短信驗證碼不符合變量規范');//tp的拋出錯誤,換成你自己的報錯
                break;
            case  'isv.MOBILE_NUMBER_ILLEGAL':
                exception('手機號不正確,無法發送短信');//tp的拋出錯誤,換成你自己的報錯
                break;
        }
        

        //少見的錯誤,記錄下來
        //log_err($ali_res->body, '發送短信發生錯誤', 'ali_sms');//換成你的
        exception($ali_res->body->message);//tp的拋出錯誤,換成你自己的報錯
//        以下是阿里雲短信正確和失敗返回的數據,以作參考
        
//        失敗演示返回數據
        /*        object(AlibabaCloud\SDK\Dysmsapi\V20170525\Models\SendSmsResponseBody)#81 (6) {
                ["bizId"] => NULL
            ["code"] => string(24) "isv.SMS_TEMPLATE_ILLEGAL"
            ["message"] => string(38) "模板不合法(不存在或被拉黑)"
            ["requestId"] => string(36) "21A90D61-2D5E-533D-BFE7-9D16F8312A0E"
            ["_name":protected] => array(4) {
                ["bizId"] => string(5) "BizId"
                ["code"] => string(4) "Code"
                ["message"] => string(7) "Message"
                ["requestId"] => string(9) "RequestId"
          }
          ["_required":protected] => array(0) {
            }
        }
        */
//        成功返回數據演示
        /*        object(AlibabaCloud\SDK\Dysmsapi\V20170525\Models\SendSmsResponseBody)#81 (6) {
                ["bizId"] => string(20) "839015438514162136^0"
            ["code"] => string(2) "OK"
            ["message"] => string(2) "OK"
            ["requestId"] => string(36) "EA37C2B7-E427-59F8-8B7C-06AD846A5439"
            ["_name":protected] => array(4) {
                ["bizId"] => string(5) "BizId"
                ["code"] => string(4) "Code"
                ["message"] => string(7) "Message"
                ["requestId"] => string(9) "RequestId"
          }
          ["_required":protected] => array(0) {
            }
        }*/
    }

    //發短信
    public static function sendSms($phoneNumbers, $code)
    {
        $res = self::main($phoneNumbers, $code);
        return $res;
    }
}

此代碼只需要修改命名空間和阿里雲accessKeyId等相關信息,即可使用~

exception是TP的錯誤異常拋出,我是做了全局的異常托管,並且在所有報錯的地方調用此方法就能終端代碼,報出錯誤,你只需要換成你的中斷代碼返回錯誤即可。

調用只需要  類名::sendSms(手機號,驗證碼號碼);  :

\lib\aliyunSms::sendSms($mobile, $code);

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM