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

前言

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

开通阿里云短信

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

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

3. 申请模板

  • 3.1 点击添加模板进入添加模板页面

  • 3.2 选择模板类型,填写模板名称,模板类型可选择常用模板库内得内容。

  • 3.3 等待签名和模板审核通过。

增加阿里云短信驱动

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

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

通过composer安装SDK

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



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

增加阿里云短信发送类

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()方法主要负责执行发送逻辑的处理

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

CRMEB小程序商城v4.0二次开发对接集成阿里云短信的更多相关文章

  1. TinkPHP框架开发的CRMEB小程序商城v4.0二次开发集成支付宝支付

    前言 大家都知道支付宝支付和微信支付宝都只能局限在自己的平台,微信内支付宝支付是根本就不能使用,即使是公众号支付也需要跳转到外部浏览器才可以唤起支付宝支付,并且QQ浏览器唤起支付宝支付还是问题很多,所 ...

  2. “微信小程序商城构建全栈应用”开发小记

    注意事项: 1.application\api\extra下的wx.php记得填写小程序的app_id.app_secret: 2.API测试小工具需要APPID:

  3. 小程序后端项目【Springboot框架】部署到阿里云服务器【支持https访问】

    前言: 我的后端项目是Java写的,用的Springboot框架.在部署服务器并配置https访问过程中,因为做了一些令人窒息的操作(事后发现),所以老是不能成功. 不成功具体点说就是:域名地址可以正 ...

  4. CRMEB小程序商城首页强制在微信中打开解决办法

    先说一下,这也算不上二开,小小修改一下而已. CRMEB安装完成后,PC端直接打开首页,真是一言难尽~ 然后,我就想了,用手机浏览器或者PC浏览器直接打开首页也没啥用,干脆直接强制在微信中打开算了! ...

  5. ThinkPHP5.0手把手实现手机阿里云短信验证

    阿里云短信服务介绍阿里云短信服务就是以前的阿里大于,不过现在融合得到阿里云平台了.首先,你需要注册一个阿里云账号,这个自行解决. 仅用于测试使用官方送的代金券够用了.相关配置1.开通阿里云Access ...

  6. 微信小程序商城开源项目,Weixin-App-Shop 1.0 版本正式发布!!!

    微信小程序商城开源项目,Weixin-App-Shop 1.0 版本正式发布 Weixin-App-Shop 是捷微团队开发的微信小程序商城开源项目,涵盖了微信商城的全部功能,能够快速发布简单易用的小 ...

  7. 开源微信小程序商城测评

    1. Java版 1)微同商城 减少重复造轮子,开源微信小程序商城 .快速搭建一个属于自己的微信小程序商城. 官网地址:https://fly2you.cn 开源地址:https://gitee.co ...

  8. TP5框架,开源小程序商城源码,前端+后台完整版

    CRMEB微信公众号商城小程序商城数据同步,带积分.优惠券.秒杀.砍价.分销等功能,更是一套方便二次开发的框架 开源地址:https://github.crmeb.net/u/crmeb 商城演示后台 ...

  9. 微信小程序商城 带java后台源码

    微信小程序商城(Java版) 演示地址 账号:admin 密码:admin 小程序体验码: 技术选型 1 后端使用技术 1.1 springframework4.3.7.RELEASE 1.2 myb ...

随机推荐

  1. C# Hello Word

    不管学习什么语言,第一个例子绝对是一个经典的HelloWorld程序那么接下来我们使用 vs studio 2019 来创建一个 HelloWorld 程序 启动vs2019选择 文件-新建-项目-新 ...

  2. 关键字Run Keyword If 如何写多个条件语句、如何在一个条件下执行多个关键字

    Run Keyword If 关键字给出的示例是: 但是,这往往不能满足我们实际需要,比如,我们需要同时判断多个条件是否成立,或者在条件成立时我们想要执行多个关键字,虽然可以进行封装再调用,但是比较麻 ...

  3. Python 3.9 beta2 版本发布了,看看新特性?

    随着 Python 3.9.0b1 的发布,即开发周期中计划的四个 beta 版本的首个,Python 3.9 的功能已经是完善了.在 10 月发布最终版本之前,还会有许多测试和稳定性方面的工作要做. ...

  4. js 排他思想案例

    <!-- 排他思想 --> <button>按钮1</button> <button>按钮2</button> <button> ...

  5. HourglassNet

  6. HBase存储及读写原理介绍

    一.HBase介绍及其特点 HBase是一个开源的非关系型分布式数据库,它参考了谷歌的BigTable建模,实现的编程语言为Java.它是Apache软件基金会的Hadoop项目的一部分,运行于HDF ...

  7. Eclipse的Servers中无法添加Tomcat6/7

    2017年03月06日 17:14:46 阅读数:1007 Eclipse中在添加tomcat时发现6和7点击后发现ServerName是灰色的不能使用,也点不了NEXT,在各种查百度后发现需要删除w ...

  8. vs2017引用vue组件中文乱码

    原因:文件默认编码格式为ASNI编码,需要改成UTF-8编码 解决方案: ①用记事本打开component.js文件 ②另存文件,修改编码为UTF-8编码,保存

  9. GaussDB基本操作

    列出所有数据库 \l 切换数据库 \c ${databaseName} 列出当前数据库下的表 \d 列出表的所有字段 \d ${tableName} 查看指定表的基本情况 \d+ ${tableNam ...

  10. 面试不知如何回答这六大知识点,你还敢说熟悉MySQL?

    文章目录 一.事务 1. 什么是事务 2. 事务的四大特性 3. 事务的并发问题 ① 事务并发问题什么时候发生? ② 事务的并发问题有哪些? ③ 如何避免事务的并发问题? 二.索引 1. 什么是索引 ...