- 隨著科技發展的推動,曾經充滿溫馨問候與回憶的簡訊業務,如今絕大多數侷限於
驗證碼傳送
、詐騙/騷擾資訊
、業務推送
的使用 -
而作為一名IT搬磚的碼農,對於第三方服務的接入也是必須掌握的技能,此處介紹一下
ThinkPHP5.1框架下阿里雲簡訊最新版(原大魚)的接入方法
- 操作環境:
>PHP版本 : 7.0.2 (如果是低版本,報錯時,可參考附錄解決方案) >ThinkPHP版本: ThinkPHP5.1 >技能需求: Composer 安裝依賴
本文主要針對
簡訊 — 驗證碼
接入,作為指導講解,>>> 官方文件:阿里雲-簡訊服務
①. 前期準備-簡訊使用流程
- 作為前期準備的重要指引,
入駐-認證-開通服務-建立-獲得引數
等在此不做贅述
詳細指導參見:阿里雲簡訊服務文件使用指引
- 作為
ThinkPHP5
超方便的工具,強烈建議使用 Composer,你會發現它的便利與快捷性
執行命令:
composer require alibabacloud/client
③. 快速學習(此步驟,跳過也可.)
- 阿里雲提供了極其方便的線上測試功能,可以通過
快速學習
,測試你是否獲取了所有所需的配置資訊【簡訊服務】——【快速學習】——【OpenAPI Explorer】
④. 程式碼實現
- 注意在整合方法呼叫前,要先進行類的引用
use AlibabaCloud\Client\AlibabaCloud; use AlibabaCloud\Client\Exception\ClientException; use AlibabaCloud\Client\Exception\ServerException;
-
提供整合方法如下:
/** * 整合方法:阿里雲(原大魚)傳送簡訊驗證碼 * @param string $phoneNumber 目標手機號 * TODO 注意 accessKeyId、accessSecret、signName、templateCode 重要引數的獲取配置 */ public function sendAliDaYuAuthCode($phoneNumber = '151xxxxxxx3') { $accessKeyId = 'LTAXXXXXXXXXC'; $accessSecret = '8gfwbXXXXXXXXXXXXXXXXXXXXXXXXXXXXA'; //注意不要有空格 $signName = 'XXXXX'; //配置簽名 $templateCode = 'SMS_1XXXXXX5';//配置簡訊模板編號 //TODO 隨機生成一個6位數 $authCodeMT = mt_rand(100000,999999); //TODO 簡訊模板變數替換JSON串,友情提示:如果JSON中需要帶換行符,請參照標準的JSON協議。 $jsonTemplateParam = json_encode(['code'=>$authCodeMT]); AlibabaCloud::accessKeyClient($accessKeyId, $accessSecret) ->regionId('cn-hangzhou') ->asGlobalClient(); try { $result = AlibabaCloud::rpcRequest() ->product('Dysmsapi') // ->scheme('https') // https | http ->version('2017-05-25') ->action('SendSms') ->method('POST') ->options([ 'query' => [ 'RegionId' => 'cn-hangzhou', 'PhoneNumbers' => $phoneNumber,//目標手機號 'SignName' => $signName, 'TemplateCode' => $templateCode, 'TemplateParam' => $jsonTemplateParam, ], ]) ->request(); $opRes = $result->toArray(); //print_r($opRes); if ($opRes && $opRes['Code'] == "OK"){ //進行Cookie儲存 cookie("authCodeMT",$authCodeMT,300); } } catch (ClientException $e) { echo $e->getErrorMessage() . PHP_EOL; } catch (ServerException $e) { echo $e->getErrorMessage() . PHP_EOL; } }
⑤. 執行效果
①. Ramsey\Uuid\Generator\random_int() 報錯
- 此問題,測試發現存在於PHP版本較低的情況下,如
PHP-5.6.32
,
詳細分析及解決請參考 Fatal error: Call to undefined function Ramsey\Uuid\Generator\random_int()
②. isv.INVALID_JSON_PARAM 報錯的一種情況
- 如果在測試階段,直接複製了
OpenAPI Explorer
生成的程式碼,有時會因為模板引數的json
拼合無法識別
建議,可參考我的程式碼思路,使用json_encode()
進行轉化
③. InvalidAccessKeyId.NotFound
- 這種提示資訊,只能說明你的 accessKeyId 配置錯誤,注意不要配置成了 簡訊應用中的
AppKey
過來人,友情提示,請看存放位置: