crmeb二次开发_CRMEB小程序商城v4.0二次开发对接集成阿里云短信

作者:廖飞 - CRMEB小程序商城研发项目组长

前言

cremb小程序商城v4.0版本支持短信平台为云信,但有部分用户有需求对接阿里云短信,这篇文章将对阿里云短信平台如何对接方以及对接流程详细说明.

开通阿里云短信

1. 首先登陆阿里云后台找到短信服务,点击控制台 - 进入短信服务

74018c7c29e858cf421a9935989786d8.png

2. 点击国内消息右侧的添加签名按钮,填写必填项申请签名

3a1ad3b79d934f7b53c9de45e960e597.png

3. 申请模板

  • 3.1 点击添加模板进入添加模板页面
f5a20d38d28ba80272eb69c8678a95d6.png
  • 3.2 选择模板类型,填写模板名称,模板类型可选择常用模板库内的内容。
419e26e376b573d60386c1d84dadc106.png
  • 3.3 等待签名和模板审核通过。

增加阿里云短信驱动

驱动详细架构流程可参考:http://help.crmeb.net/crmeb-v4/1863575

1. 修改文件CRMEB小程序商城/config/sms.php文件第44行增加阿里云对应的驱动方式和模板id

return [...    'stores' => [        //云信        'yunxin' => [ ...        ],        //阿里云 增加阿里云驱动        'aliyun' => [//这里填写阿里云模板id可和运行的模板名称对应,方便开发            'template_id' => [            ]        ]    ]];

通过composer安装SDK

2. 在项目根目录下打开命令行输入:composer require alibabacloud/client按回车进行安装sdk

207f6bbb33c47dbe1fce25932b076701.png

注意:如提示composer不是一个命令请先安装composer

增加阿里云短信发送类

1. 新建文件crmebservicessmsstorageAliyun.php

<?php /** * @author: liaofei<136327134@qq.com> * @day: 2020/8/19 */namespace crmebservicessmsstorage;use crmebbasicBaseSms;use AlibabaCloudClientAlibabaCloud;use AlibabaCloudClientExceptionClientException;use AlibabaCloudClientExceptionServerException;use thinkexceptionValidateException;/** * 阿里云短信发送 * Class Aliyun * @package crmebservicessmsstorage */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()方法主要负责执行发送逻辑的处理

/**     * 发送短信     * @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());        }    }

调用实例:

//实例化短信类/** @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类的设计的理解.

ab23c25dbf6a5bc6c6cf3e32333865e6.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值