- 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);
