做者:廖飛 - CRMEB小程序商城研發項目組長
php
前言:json
cremb小程序商城v4.0版本支持短信平臺爲雲信,但有部分用戶有需求對接阿里雲短信,這篇文章將對阿里雲短信平臺如何對接方以及對接流程詳細說明.小程序
開通阿里雲短信
1. 首先登錄阿里雲後臺找到短信服務,點擊控制檯 - 進入短信服務
2. 點擊國內消息右側得添加簽名按鈕,填寫必填項申請簽名
3. 申請模板
- 3.1 點擊添加模板進入添加模板頁面
- 3.2 選擇模板類型,填寫模板名稱,模板類型可選擇經常使用模板庫內得內容。
- 3.3 等待簽名和模板審覈經過。
增長阿里雲短信驅動
-
驅動詳細架構流程可參考:http://help.crmeb.net/crmeb-v4/1863575api
1. 修改文件CRMEB小程序商城/config/sms.php文件第44行增長阿里雲對應的驅動方式和模板id
return [ ... 'stores' => [ //雲信 'yunxin' => [ ... ], //阿里雲 增長阿里雲驅動 'aliyun' => [ //這裏填寫阿里雲模板id可和運行的模板名稱對應,方便開發 'template_id' => [ ] ] ] ];
經過
composer
安裝SDK
架構
2. 在項目根目錄下打開命令行輸入:composer require alibabacloud/client
按回車進行安裝sdk
注意:如提示composer不是一個命令請先安裝composer
app
增長阿里雲短信發送類
1. 新建文件crmeb\services\sms\storage\Aliyun.php
<?php /** * @author: liaofei<136327134@qq.com> * @day: 2020/8/19 */ namespace crmeb\services\sms\storage; use crmeb\basic\BaseSms; use AlibabaCloud\Client\AlibabaCloud; use AlibabaCloud\Client\Exception\ClientException; use AlibabaCloud\Client\Exception\ServerException; use think\exception\ValidateException; /** * 阿里雲短信發送 * Class Aliyun * @package crmeb\services\sms\storage */ class Aliyun extends BaseSms { /** * AccessKeyId * @var string */ protected $accessKeyId; /** * AccessKeySecret * @var string */ protected $accessKeySecret; /** * 簽名 * @var string */ protected $signName; /** * 區域 默認杭州 * @var string */ protected $regionId = 'cn-hangzhou'; /** * 初始化 * @param array $config * @return mixed|void */ protected function initialize(array $config) { parent::initialize($config); // TODO: Change the autogenerated stub $this->accessKeyId = $config['accessKeyId'] ?? null; $this->accessKeySecret = $config['accessKeySecret'] ?? null; $this->signName = $config['signName'] ?? null; if (isset($config['regionId'])) { $this->regionId = $config['regionId']; } } /** * 初始化阿里雲短信 */ protected function app() { } /** * 發送短信 * @param string $phone * @param string $templateId * @param array $data * @return mixed|void */ public function send(string $phone, string $templateId, array $data = []) { // TODO: Implement send() method. } }
2. 完成本類的app()方法,app()方法主要處理初始化阿里雲短信的邏輯
/** * 初始化阿里雲短信 */ protected function app() { // 判斷下accessKeyId和accessKeySecret存在 if (!$this->accessKeyId || !$this->accessKeySecret) { throw new ValidateException('請傳入阿里雲短信配置'); } //調用阿里雲SDK初始化 AlibabaCloud::accessKeyClient($this->accessKeyId, $this->accessKeySecret) ->regionId($this->regionId) ->asDefaultClient(); }
send()方法主要負責執行發送邏輯的處理composer
/** * 發送短信 * @param string $phone * @param string $templateId * @param array $data * @return mixed|void */ public function send(string $phone, string $templateId, array $data = []) { //參數判斷 if (!$phone) { throw new ValidateException('請傳入手機號'); } if (!$templateId) { throw new ValidateException('請傳入發送模板id'); } //初始化阿里雲SDK $this->app(); try { //執行發送 $result = AlibabaCloud::rpc() ->product('Dysmsapi') ->version('2017-05-25') ->action('SendSms') ->method('POST') ->host('dysmsapi.aliyuncs.com') ->options([ 'query' => [ 'RegionId' => $this->regionId, 'PhoneNumbers' => $phone, 'SignName' => $this->signName, 'TemplateCode' => $templateId, 'TemplateParam' => json_encode($data), ], ])->request()->toArray(); return $result; } catch (ClientException $e) { throw new ValidateException($e->getMessage()); } catch (ServerException $e) { throw new ValidateException($e->getMessage()); } }
調用實例:ide
//實例化短信類 /** @var Sms $services */ $services = app()->make(Sms::class, [ 'aliyun', [ 'accessKeyId' => '阿里雲短信accessKeyId', 'accessKeySecret' => '阿里雲短信accessKeyId', 'signName' => '阿里雲短信簽名', ] ]); try { // 執行發送 $res = $services->send('15594500000', 'VERIFICATION_CODE', ['code'=>1234]); dump($res); } catch (\Throwable $e) { dump($e->getMessage()); }
阿里雲短信發送集成仍是比較簡單的,主要在於二開過程當中類的結構和對於php類的設計的理解.
ui