云片短信php接口_php与阿里云短信接口接入

使用阿里云短信API,需要在控制台获取以下必要参数,其中需要自己手机验证+官方审核多次,尤其审核需要保持耐心。

1. accessKeyId 相当于你的个人账户密钥;

2. accessKeySecret 与上是成对的;

3. SignName 个人签名,在发出去的短信中,这个签名会显示在开头,类似 【签名】亲爱的用户...... 这种格式,SignName需要通过提交审核;

4.TemplateCode 模板代码,阿里云短信是无法完全自定义短信的,需要通过审核的模板,然后自己再替换掉模板中的变量,如模板:“您的验证码是${code}” ,code就是变量,使用时需设置变量值{"code":"12345"}(设置变量值的过程在demo中实现),短信发出去后变成:“您的验证码是12345”,每个通过审核的模板会提供一个模板代码;

最新的阿里云短信接口,适用于阿里大于搬家以后的情况。

之前一直用阿里大于的短信接口,最近上项目时发现阿里大于悄悄地搬家到了阿里云!阿里云的SDK文件繁多,看得一头雾水!下面代码是最新的可适用于阿里云短信服务的类,亲测成功!

<?php /** * 阿里云短信验证码发送类 * @author Administrator * */class Sms { // 保存错误信息 public $error; // Access Key ID private $accessKeyId = ''; // Access Access Key Secret private $accessKeySecret = ''; // 签名 private $signName = ''; // 模版ID private $templateCode = ''; public function __construct($cofig = array()) { $cofig = array ( 'accessKeyId' => 'xxxxxxxxxxx', 'accessKeySecret' => 'xxxxxxxxxx', 'signName' => '你的签名', 'templateCode' => 'SMS_76510109' ); // 配置参数 $this->accessKeyId = $cofig ['accessKeyId']; $this->accessKeySecret = $cofig ['accessKeySecret']; $this->signName = $cofig ['signName']; $this->templateCode = $cofig ['templateCode']; } private function percentEncode($string) { $string = urlencode ( $string ); $string = preg_replace ( '/+/', '%20', $string ); $string = preg_replace ( '/*/', '%2A', $string ); $string = preg_replace ( '/%7E/', '~', $string ); return $string; } /** * 签名 * * @param unknown $parameters  * @param unknown $accessKeySecret  * @return string */ private function computeSignature($parameters, $accessKeySecret) { ksort ( $parameters ); $canonicalizedQueryString = ''; foreach ( $parameters as $key => $value ) { $canonicalizedQueryString .= '&' . $this->percentEncode ( $key ) . '=' . $this->percentEncode ( $value ); } $stringToSign = 'GET&%2F&' . $this->percentencode ( substr ( $canonicalizedQueryString, 1 ) ); $signature = base64_encode ( hash_hmac ( 'sha1', $stringToSign, $accessKeySecret . '&', true ) ); return $signature; } /** * @param unknown $mobile  * @param unknown $verify_code  * */ public function send_verify($mobile, $verify_code) { $params = array ( //此处作了修改 'SignName' => $this->signName, 'Format' => 'JSON', 'Version' => '2017-05-25', 'AccessKeyId' => $this->accessKeyId, 'SignatureVersion' => '1.0', 'SignatureMethod' => 'HMAC-SHA1', 'SignatureNonce' => uniqid (), 'Timestamp' => gmdate ( 'Y-m-dTH:i:sZ' ), 'Action' => 'SendSms', 'TemplateCode' => $this->templateCode, 'PhoneNumbers' => $mobile, //'TemplateParam' => '{"code":"' . $verify_code . '"}'  'TemplateParam' => '{"time":"1234"}' //更换为自己的实际模版 ); //var_dump($params);die; // 计算签名并把签名结果加入请求参数 $params ['Signature'] = $this->computeSignature ( $params, $this->accessKeySecret ); // 发送请求(此处作了修改) //$url = 'https://sms.aliyuncs.com/?' . http_build_query ( $params ); $url = 'http://dysmsapi.aliyuncs.com/?' . http_build_query ( $params ); $ch = curl_init (); curl_setopt ( $ch, CURLOPT_URL, $url ); curl_setopt ( $ch, CURLOPT_SSL_VERIFYPEER, FALSE ); curl_setopt ( $ch, CURLOPT_SSL_VERIFYHOST, FALSE ); curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, 1 ); curl_setopt ( $ch, CURLOPT_TIMEOUT, 10 ); $result = curl_exec ( $ch ); curl_close ( $ch ); $result = json_decode ( $result, true ); //var_dump($result);die; if (isset ( $result ['Code'] )) { $this->error = $this->getErrorMessage ( $result ['Code'] ); return false; } return true; } /** * 获取详细错误信息 * * @param unknown $status  */ public function getErrorMessage($status) { // 阿里云的短信 乱八七糟的(其实是用的阿里大于) // https://api.alidayu.com/doc2/apiDetail?spm=a3142.7629140.1.19.SmdYoA&apiId=25450 $message = array ( 'InvalidDayuStatus.Malformed' => '账户短信开通状态不正确', 'InvalidSignName.Malformed' => '短信签名不正确或签名状态不正确', 'InvalidTemplateCode.MalFormed' => '短信模板Code不正确或者模板状态不正确', 'InvalidRecNum.Malformed' => '目标手机号不正确,单次发送数量不能超过100', 'InvalidParamString.MalFormed' => '短信模板中变量不是json格式', 'InvalidParamStringTemplate.Malformed' => '短信模板中变量与模板内容不匹配', 'InvalidSendSms' => '触发业务流控', 'InvalidDayu.Malformed' => '变量不能是url,可以将变量固化在模板中' ); if (isset ( $message [$status] )) { return $message [$status]; } return $status; }}

调用方法:

//生成验证码$mobile = 'xxxxxxx';$code = rand ( 1000, 9999 );//发送短信$sms = new Sms();//测试模式$status = $sms->send_verify($mobile, $code);if (!$status) { echo $sms->error;}
8b53cdafa22975f043180fd3c0a4e951.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/506455.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

读中文_校友分享预告 | 在港中文读物理是什么体验?理科就业转商科有何经验心得?...

留学分享会总第233期港新地区校友分享实录商科《19年入读港大金融师姐带来最新香港就读体验与求职经验》《在香港大学读金融是怎样一种体验&#xff1f;》《在香港大学读会计是怎样一种体验&#xff1f;》《在香港大学读商业分析是怎样一种体验&#xff1f;》《在新加坡国立大学…

命令逐行显示_在LoadRunner中执行命令行程序之:popen()取代system()

》》》推荐阅读《《《1、性能测试学习笔记-场景设计2、性能测试的重要意义3、性能分析流程及方法4、应用系统性能调优之性能分析在LoadRunner中执行命令行程序之&#xff1a;popen()取代system() 我想大家应该都知道在LoadRunner可以使用函数system()来调用系统指令&#xf…

的使用go_使用 Go 开发 Prometheus Exporter

Exporter 是 Prometheus 监控的核心&#xff0c;如果你遇到一些应用不存在相应的 Exporter&#xff0c;那么我们可以自己去编写 Exporter。下面我们简单介绍如何使用 Golang 来快速编写一个 Exporter。1. 安装 GO 和依赖包按照 https://golang.org/doc/install 上的步骤进行安装…

tensorflow中的正则化函数在_tensorflow中的正则化及数据增强

正则化&#xff1a;一般可以通过减少特征或者惩罚不重要特征的权重来缓解过拟合&#xff0c;但是我们通常不知道该惩罚那些特征的权重&#xff0c;而正则化就是帮助我们惩罚特征权重的&#xff0c;即特征的权重也会成为模型的损失函数一部分。可以理解为&#xff0c; 为了使用某…

flask 获取前端form内容_flask 项目中使用 bootstrapFileInput(进阶篇)

bootstrap 为 flask 使用人员提供了一个非常优美且有效的前端页面组件,但是完美之处还存在些许缺陷,比如文件的上传功能.而 bootstrap-fileinput 是基于 bootstrap 的控件,非常完美的填补了这个空缺.注意: 本文是基于 bootstrap-fileinput v4.4.2. github 地址: https://github…

phpstudy能安装不带mysql的么_装了phpstudy还需要装mysql吗

phpStudy是一个PHP调试环境的程序集成包。该程序包集成最新的ApachePHPMySQLphpMyAdminZendOptimizer&#xff0c;一次性安装&#xff0c;无须配置即可使用&#xff0c;是非常方便、好用的PHP调试环境。该程序不仅包括PHP调试环境&#xff0c;还包括了开发工具、开发手册等。对…

mysql二进制备份配置_mysql针对于二进制数据的备份

由于这次项目文件存储部分数据是以二进制形式存储到mysql数据库中&#xff0c;这下移植开发环境的数据之前导出SQL的形式不行了&#xff0c;二进制的数据导出SQL没问题&#xff0c;但是导入就出现问题了。要是库中含有二进制数据&#xff0c;备份SQL这招肯定不行了&#xff0c;…

mysql 5.1.53_mysql 5.1.53免安装版的优化配备和精简

mysql 5.1.53免安装版的优化配置和精简[摘要]MySQL是一种关联数据库管理系统&#xff0c;关联数据库将数据保存在不同的表中&#xff0c;而不是将所有数据放在一个大仓库内。这样就增加了速度并提高了灵活性。本文介绍mysql-noinstall.zip免安装版的优化配置和精简。欢迎大家阅…

eomj表情 mysql_mysql 数据库支持emjoy表情

数据库支持emjoy表情对于emjoy表情&#xff0c;插入数据库的时候总是报错如下&#xff1a;Incorrect string value: \xF0\x9F\x98\x8D for column REAL_NAME at row 1从上面看出该字段不支持emjoy表情check查找发现emjoy表情采用的是utf8mb4存储,utf8mb4是utf8的超集(包含了一些…

linux c mysql教程_Linux c访问mysql 编写入门

一) 前置条件&#xff1a;(1) Linux 已经安装好 mysql 数据库&#xff1b;(2) Linux 已经安装了 gcc 编译器&#xff1b;(二)数据库准备&#xff1a;为了便于描述&#xff0c;假设数据库的 root 用户密码为 root_pwd 。(1) 以 root 用户登陆数据库#mysql -ur…

mysql性能优化 硬件优化_mysql性能优化学习笔记(6)数据库配置优化硬件优化...

一、操作系统配置优化&#xff1a;1. 网络方面&#xff0c;修改/etc/sysctl.conf文件&#xff0c;增加tcp支持的队列数&#xff0c;减少断开连接时&#xff0c;资源的回收。2. 打开文件数的限制。修改/etc/security/limits.conf文件&#xff0c;增加一下内容以修改打开文件数量…

mysql崩溃_mysql崩溃原因分析

最近开发人员那边总说他们的程序连接一台指定服务器的时候出现闪断的现象,有连接失败的日志生成.于是就登陆到这台机器上探查个究竟,看了下mysql的错误日志,发现有mysql崩溃的现象,数据目录下面生成好多的bin文件,错误日志里面的内容如下:090922 1:10:39 - mysqld got signal …

dataframe存到mysql中_pandas实现to_sql将DataFrame保存到数据库中

目的在数据分析时&#xff0c;我们有中间结果&#xff0c;或者最终的结果&#xff0c;需要保存到数据库中&#xff1b;或者我们有一个中间的结果&#xff0c;如果放到数据库中通过sql操作会更加的直观&#xff0c;处理后再将结果读取到DataFrame中。这两个场景&#xff0c;就需…

mysql用于放置可执行文件的目录_在 MySQL 安装目录中, bin 目录用于放置一些可执行文件。_面向对象程序设计(C#)答案_学小易找答案...

【单选题】形成通货膨胀的原因是( )【单选题】患者在就诊的过程中,其投入的最主要内容是( )。【多选题】25 、绝对剩余价值生产和相对剩余价值生产的区别和联系是( )【多选题】21 、劳动力成为商品的条件( )【单选题】所谓的内部服务指的是( )。【单选题】服务业主要对应的产业…

python 跳过计算错误_在python中计算分数时如何跳过被0除的错误?

我正在运行一个很长的CSV文件下面的函数。函数每50行计算列MFE的Z分数。这50行中有一些只包含零&#xff0c;因此在计算Zscore时&#xff0c;程序会停止&#xff0c;因为它不能被零除。如何解决这个问题&#xff0c;而不是停止程序运行打印这些行的z分数0&#xff1f;在def doZ…

python中的seed_Python seed() 函数 - Python 教程 - 自强学堂

Python seed() 函数描述seed() 方法改变随机数生成器的种子&#xff0c;可以在调用其他随机模块函数之前调用此函数。。语法以下是 seed(() 方法的语法:import randomrandom.seed ( [x] )注意&#xff1a;seed(()是不能直接访问的&#xff0c;需要导入 random 模块&#xff0c;…

ubuntu dpkg mysql_ubuntu-12.04 – 在Ubuntu 12.04上无法启动MySQL5.5 – “dpkg:依赖问题”...

这似乎是12.04上的一个常见问题。我在this thread尝试过&#xff0c;包括&#xff1a;sudo apt-get cleansudo apt-get autocleansudo apt-get remove --purge mysql-client-5.5 mysql-client-core-5.5 mysql-common mysql-server mysql-server-5.5 mysql-server-core-5.5sudo …

mysql 中caption_Django-Model操作数据库(增删改查、连表结构)(示例代码)

Django-Model操作数据库(增删改查、连表结构)一、数据库操作1、创建model表基本结构from django.db importmodelsclassuserinfo(models.Model):#如果没有models.AutoField&#xff0c;默认会创建一个id的自增列name models.CharField(max_length 30)emailmodels.EmailField()…

python中如何定义函数的传入参数是option的_python – 当使用@ click.option将命令行参数传递给函数时,如何返回值?...

我试图使用click python包将命令行参数传递给函数.官方文档中的示例如解释的那样工作.但是文档中没有提到如何返回值.文档中没有任何函数返回值,因此我不明白如何执行此操作.以文档为例&#xff1a;import clickclick.command()click.option(--count, default3, helpNumber of …

python牛顿法寻找极值_python使用梯度下降和牛顿法寻找Rosenbrock函数最小值实例...

Rosenbrock函数的定义如下&#xff1a;其函数图像如下&#xff1a;我分别使用梯度下降法和牛顿法做了寻找Rosenbrock函数的实验。梯度下降梯度下降的更新公式&#xff1a;图中蓝色的点为起点&#xff0c;橙色的曲线(实际上是折线)是寻找最小值点的轨迹&#xff0c;终点(最小值点…