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

前言

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

开通阿里云短信

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

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

3. 申请模板

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

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

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

增加阿里云短信驱动

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

  1. return [
  2. ...
  3. 'stores' => [
  4. //云信
  5. 'yunxin' => [
  6. ...
  7. ],
  8. //阿里云 增加阿里云驱动
  9. 'aliyun' => [
  10. //这里填写阿里云模板id可和运行的模板名称对应,方便开发
  11. 'template_id' => [
  12. ]
  13. ]
  14. ]
  15. ];

通过composer安装SDK

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



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

增加阿里云短信发送类

1. 新建文件crmeb\services\sms\storage\Aliyun.php

  1. <?php
  2. /**
  3. * @author: liaofei<136327134@qq.com>
  4. * @day: 2020/8/19
  5. */
  6. namespace crmeb\services\sms\storage;
  7. use crmeb\basic\BaseSms;
  8. use AlibabaCloud\Client\AlibabaCloud;
  9. use AlibabaCloud\Client\Exception\ClientException;
  10. use AlibabaCloud\Client\Exception\ServerException;
  11. use think\exception\ValidateException;
  12. /**
  13. * 阿里云短信发送
  14. * Class Aliyun
  15. * @package crmeb\services\sms\storage
  16. */
  17. class Aliyun extends BaseSms
  18. {
  19. /**
  20. * AccessKeyId
  21. * @var string
  22. */
  23. protected $accessKeyId;
  24. /**
  25. * AccessKeySecret
  26. * @var string
  27. */
  28. protected $accessKeySecret;
  29. /**
  30. * 签名
  31. * @var string
  32. */
  33. protected $signName;
  34. /**
  35. * 区域 默认杭州
  36. * @var string
  37. */
  38. protected $regionId = 'cn-hangzhou';
  39. /**
  40. * 初始化
  41. * @param array $config
  42. * @return mixed|void
  43. */
  44. protected function initialize(array $config)
  45. {
  46. parent::initialize($config); // TODO: Change the autogenerated stub
  47. $this->accessKeyId = $config['accessKeyId'] ?? null;
  48. $this->accessKeySecret = $config['accessKeySecret'] ?? null;
  49. $this->signName = $config['signName'] ?? null;
  50. if (isset($config['regionId'])) {
  51. $this->regionId = $config['regionId'];
  52. }
  53. }
  54. /**
  55. * 初始化阿里云短信
  56. */
  57. protected function app()
  58. {
  59. }
  60. /**
  61. * 发送短信
  62. * @param string $phone
  63. * @param string $templateId
  64. * @param array $data
  65. * @return mixed|void
  66. */
  67. public function send(string $phone, string $templateId, array $data = [])
  68. {
  69. // TODO: Implement send() method.
  70. }
  71. }

2. 完成本类的app()方法,app()方法主要处理初始化阿里云短信的逻辑

  1. /**
  2. * 初始化阿里云短信
  3. */
  4. protected function app()
  5. {
  6. // 判断下accessKeyId和accessKeySecret存在
  7. if (!$this->accessKeyId || !$this->accessKeySecret) {
  8. throw new ValidateException('请传入阿里云短信配置');
  9. }
  10. //调用阿里云SDK初始化
  11. AlibabaCloud::accessKeyClient($this->accessKeyId, $this->accessKeySecret)
  12. ->regionId($this->regionId)
  13. ->asDefaultClient();
  14. }

send()方法主要负责执行发送逻辑的处理

  1. /**
  2. * 发送短信
  3. * @param string $phone
  4. * @param string $templateId
  5. * @param array $data
  6. * @return mixed|void
  7. */
  8. public function send(string $phone, string $templateId, array $data = [])
  9. {
  10. //参数判断
  11. if (!$phone) {
  12. throw new ValidateException('请传入手机号');
  13. }
  14. if (!$templateId) {
  15. throw new ValidateException('请传入发送模板id');
  16. }
  17. //初始化阿里云SDK
  18. $this->app();
  19. try {
  20. //执行发送
  21. $result = AlibabaCloud::rpc()
  22. ->product('Dysmsapi')
  23. ->version('2017-05-25')
  24. ->action('SendSms')
  25. ->method('POST')
  26. ->host('dysmsapi.aliyuncs.com')
  27. ->options([
  28. 'query' => [
  29. 'RegionId' => $this->regionId,
  30. 'PhoneNumbers' => $phone,
  31. 'SignName' => $this->signName,
  32. 'TemplateCode' => $templateId,
  33. 'TemplateParam' => json_encode($data),
  34. ],
  35. ])->request()->toArray();
  36. return $result;
  37. } catch (ClientException $e) {
  38. throw new ValidateException($e->getMessage());
  39. } catch (ServerException $e) {
  40. throw new ValidateException($e->getMessage());
  41. }
  42. }

调用实例:

  1. //实例化短信类
  2. /** @var Sms $services */
  3. $services = app()->make(Sms::class, [
  4. 'aliyun',
  5. [
  6. 'accessKeyId' => '阿里云短信accessKeyId',
  7. 'accessKeySecret' => '阿里云短信accessKeyId',
  8. 'signName' => '阿里云短信签名',
  9. ]
  10. ]);
  11. try {
  12. // 执行发送
  13. $res = $services->send('15594500000', 'VERIFICATION_CODE', ['code'=>1234]);
  14. dump($res);
  15. } catch (\Throwable $e) {
  16. dump($e->getMessage());
  17. }

阿里云短信发送集成还是比较简单的,主要在于二开过程中类的结构和对于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. MemoryMappedFile的初级应用

    public class SyncMemoryList<T>: SyncList<T>, IDisposable { private MemoryCache<T> ...

  2. Pytest单元测试框架:插件-allure-pytest环境搭建并在本地生成一个测试报告

    之前写了allure-pytest的官方文档啃的内容,有些交流的朋友,实践起来没什么头绪,所以就有了这篇文章,也给自己填个坑 第一步:搭建Allure.JDK环境 1. 搭建JDK环境 不装jdk你会 ...

  3. WebService简单Demo

    看了网上好多关于webservice的例子,基本上对初学者来说都是模棱两可云里雾里,现在,我将网上关于webservice的讲解提炼出来,通过一个最简单使用并且方便的例子,告诉大家什么是webserv ...

  4. URLDecoder异常解决方法

    URLDecoder对参数进行解码时候,代码如: URLDecoder.decode(param,"utf-8"); 有时候会出现类似如下的错误: URLDecoder异常Ille ...

  5. 数电学习笔记之CMOS传输门工作原理

    CMOS 传输门从结构上看是由一个PMOS和一个NMOS管组成 先简单粗略讲讲PMOS管和NMOS管导通与截止吧 首先我们MOS管有三个极,源极(S:Source).漏极(D:Drain)和栅极(G: ...

  6. 论文结果图:matplotlib和seaborn实现

    在论文中,可视化结果往往很重要,毕竟文字太抽象,需要图片向审稿人直观的展现出我们的结果.我也写了俩篇论文和一篇专利的申请,其中也有一些画图的程序,因此记录,防止以后忘了.由于篇幅原因,文章就不贴代码, ...

  7. C#LeetCode刷题之#859-亲密字符串​​​​​​​​​​​​​​(Buddy Strings)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3973 访问. 给定两个由小写字母构成的字符串 A 和 B ,只要 ...

  8. 用Unity3D实现太阳系仿真

    用Unity3D模拟太阳系仿真 模拟要求 写一个程序,实现一个完整的太阳系, 其他星球围绕太阳的转速必须不一样,且不在一个法平面上. 操作步骤 1.创建如下结构 sun 里包括8大行星, 并且设置好距 ...

  9. 使用 .NET Core 3.x 构建 RESTFUL Api (续)

    关于Entity Model vs 面向外部的Model Entity Framework Core 使用 Entity Model 用来表示数据库里面的记录. 面向外部的Model 则表示要传输的东 ...

  10. C语言编译过程以及Windows中的gcc编译程序(通过cmd、记事本)

    C语言的编译过程 1)预处理:宏定义展开.头文件展开.条件编译等,同时将代码中的注释删除,这里并不会检查语法 2)编译:检查语法,将预处理后的文件编译生成汇编文件 3)汇编:将汇编文件生成目标文件(二 ...