CRMEB小程序商城v4.0二次开发对接集成阿里云短信
作者:廖飞 - CRMEB小程序商城研发项目组长
前言
cremb小程序商城v4.0版本支持短信平台为云信,但有部分用户有需求对接阿里云短信,这篇文章将对阿里云短信平台如何对接方以及对接流程详细说明.
开通阿里云短信
1. 首先登陆阿里云后台找到短信服务,点击控制台 - 进入短信服务
2. 点击国内消息右侧得添加签名按钮,填写必填项申请签名
3. 申请模板
- 3.1 点击添加模板进入添加模板页面
- 3.2 选择模板类型,填写模板名称,模板类型可选择常用模板库内得内容。
- 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
注意:如提示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二次开发对接集成阿里云短信的更多相关文章
- TinkPHP框架开发的CRMEB小程序商城v4.0二次开发集成支付宝支付
前言 大家都知道支付宝支付和微信支付宝都只能局限在自己的平台,微信内支付宝支付是根本就不能使用,即使是公众号支付也需要跳转到外部浏览器才可以唤起支付宝支付,并且QQ浏览器唤起支付宝支付还是问题很多,所 ...
- “微信小程序商城构建全栈应用”开发小记
注意事项: 1.application\api\extra下的wx.php记得填写小程序的app_id.app_secret: 2.API测试小工具需要APPID:
- 小程序后端项目【Springboot框架】部署到阿里云服务器【支持https访问】
前言: 我的后端项目是Java写的,用的Springboot框架.在部署服务器并配置https访问过程中,因为做了一些令人窒息的操作(事后发现),所以老是不能成功. 不成功具体点说就是:域名地址可以正 ...
- CRMEB小程序商城首页强制在微信中打开解决办法
先说一下,这也算不上二开,小小修改一下而已. CRMEB安装完成后,PC端直接打开首页,真是一言难尽~ 然后,我就想了,用手机浏览器或者PC浏览器直接打开首页也没啥用,干脆直接强制在微信中打开算了! ...
- ThinkPHP5.0手把手实现手机阿里云短信验证
阿里云短信服务介绍阿里云短信服务就是以前的阿里大于,不过现在融合得到阿里云平台了.首先,你需要注册一个阿里云账号,这个自行解决. 仅用于测试使用官方送的代金券够用了.相关配置1.开通阿里云Access ...
- 微信小程序商城开源项目,Weixin-App-Shop 1.0 版本正式发布!!!
微信小程序商城开源项目,Weixin-App-Shop 1.0 版本正式发布 Weixin-App-Shop 是捷微团队开发的微信小程序商城开源项目,涵盖了微信商城的全部功能,能够快速发布简单易用的小 ...
- 开源微信小程序商城测评
1. Java版 1)微同商城 减少重复造轮子,开源微信小程序商城 .快速搭建一个属于自己的微信小程序商城. 官网地址:https://fly2you.cn 开源地址:https://gitee.co ...
- TP5框架,开源小程序商城源码,前端+后台完整版
CRMEB微信公众号商城小程序商城数据同步,带积分.优惠券.秒杀.砍价.分销等功能,更是一套方便二次开发的框架 开源地址:https://github.crmeb.net/u/crmeb 商城演示后台 ...
- 微信小程序商城 带java后台源码
微信小程序商城(Java版) 演示地址 账号:admin 密码:admin 小程序体验码: 技术选型 1 后端使用技术 1.1 springframework4.3.7.RELEASE 1.2 myb ...
随机推荐
- MemoryMappedFile的初级应用
public class SyncMemoryList<T>: SyncList<T>, IDisposable { private MemoryCache<T> ...
- Pytest单元测试框架:插件-allure-pytest环境搭建并在本地生成一个测试报告
之前写了allure-pytest的官方文档啃的内容,有些交流的朋友,实践起来没什么头绪,所以就有了这篇文章,也给自己填个坑 第一步:搭建Allure.JDK环境 1. 搭建JDK环境 不装jdk你会 ...
- WebService简单Demo
看了网上好多关于webservice的例子,基本上对初学者来说都是模棱两可云里雾里,现在,我将网上关于webservice的讲解提炼出来,通过一个最简单使用并且方便的例子,告诉大家什么是webserv ...
- URLDecoder异常解决方法
URLDecoder对参数进行解码时候,代码如: URLDecoder.decode(param,"utf-8"); 有时候会出现类似如下的错误: URLDecoder异常Ille ...
- 数电学习笔记之CMOS传输门工作原理
CMOS 传输门从结构上看是由一个PMOS和一个NMOS管组成 先简单粗略讲讲PMOS管和NMOS管导通与截止吧 首先我们MOS管有三个极,源极(S:Source).漏极(D:Drain)和栅极(G: ...
- 论文结果图:matplotlib和seaborn实现
在论文中,可视化结果往往很重要,毕竟文字太抽象,需要图片向审稿人直观的展现出我们的结果.我也写了俩篇论文和一篇专利的申请,其中也有一些画图的程序,因此记录,防止以后忘了.由于篇幅原因,文章就不贴代码, ...
- C#LeetCode刷题之#859-亲密字符串(Buddy Strings)
问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3973 访问. 给定两个由小写字母构成的字符串 A 和 B ,只要 ...
- 用Unity3D实现太阳系仿真
用Unity3D模拟太阳系仿真 模拟要求 写一个程序,实现一个完整的太阳系, 其他星球围绕太阳的转速必须不一样,且不在一个法平面上. 操作步骤 1.创建如下结构 sun 里包括8大行星, 并且设置好距 ...
- 使用 .NET Core 3.x 构建 RESTFUL Api (续)
关于Entity Model vs 面向外部的Model Entity Framework Core 使用 Entity Model 用来表示数据库里面的记录. 面向外部的Model 则表示要传输的东 ...
- C语言编译过程以及Windows中的gcc编译程序(通过cmd、记事本)
C语言的编译过程 1)预处理:宏定义展开.头文件展开.条件编译等,同时将代码中的注释删除,这里并不会检查语法 2)编译:检查语法,将预处理后的文件编译生成汇编文件 3)汇编:将汇编文件生成目标文件(二 ...