CRMEB小程序商城v4.0二次開發對接集成阿里雲短信

做者:廖飛 - CRMEB小程序商城研發項目組長php

前言:json

cremb小程序商城v4.0版本支持短信平臺爲雲信,但有部分用戶有需求對接阿里雲短信,這篇文章將對阿里雲短信平臺如何對接方以及對接流程詳細說明.小程序

開通阿里雲短信

1. 首先登錄阿里雲後臺找到短信服務,點擊控制檯 - 進入短信服務

CRMEB小程序商城v4.0二次開發對接集成阿里雲短信

2. 點擊國內消息右側得添加簽名按鈕,填寫必填項申請簽名

CRMEB小程序商城v4.0二次開發對接集成阿里雲短信

3. 申請模板

  • 3.1 點擊添加模板進入添加模板頁面
    CRMEB小程序商城v4.0二次開發對接集成阿里雲短信
  • 3.2 選擇模板類型,填寫模板名稱,模板類型可選擇經常使用模板庫內得內容。
    CRMEB小程序商城v4.0二次開發對接集成阿里雲短信
  • 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

CRMEB小程序商城v4.0二次開發對接集成阿里雲短信
注意:如提示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類的設計的理解.
CRMEB小程序商城v4.0二次開發對接集成阿里雲短信
ui

相關文章
相關標籤/搜索