阿里云短信支持先使用后支付的原则,价格为4分半1条。

通过SDK可以与网站功能的绑定,实现响应的短信发送功能

现已统一合并升级为:消息服务。

消息服务

阿里云消息服务(Message Service,简称 MNS)是一种高效、可靠、安全、便捷、可弹性扩展的分布式消息服务。MNS能够帮助应用开发者在他们应用的分布式组件上自由的传递数据、通知消息,构建松耦合系统。

新的SDK下载地址:

Java SDK:https://help.aliyun.com/document_detail/51063.html
Python SDK:https://help.aliyun.com/document_detail/51372.html
C# SDK:https://help.aliyun.com/document_detail/52016.html
PHP SDK:https://help.aliyun.com/document_detail/51929.html

如果你像我一样是以前申请的短信服务升级过来的,那么旧的接口与API仍然能使用,新申请的只能使用新的SDK了。

本文旨在通过PHP实现阿里云短信接口,摆脱繁琐的SDK。

短信界面通过表单方式实现。

<div style="width:90%;margin:auto;margin-top:100px;text-align:center;font-size:12px;color:#192E32;">
<form method="post" action="">
<b>模板CODE:</b>&nbsp;&nbsp;<input type="text" name="tcode" id="tcode" required="required" value="SMS_12345678"
onFocus="if(value==defaultValue){value='';this.style.color='#000'}" onBlur="if(!value){value=defaultValue;this.style.color='#999'}"
oninput="myinput()" onpropertychange="myclick()" style="color:#999999;height:26px; width:150px; line-height:26px;" />
<span class="error" style="color:red;">&nbsp;&nbsp;阿里云短信模板编号</span>
<br><br>
<b>用户类型:</b>
<input type="radio" name="tuser" id="tuser" value="suppliers" checked="checked"; />供应商
<input type="radio" name="tuser" id="tuser" value="users" />全部用户
<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
<br><br>
<input type="submit" name="sub" id="sub" value="发送短信" disabled="true" />
</form>
</div>
<script type="text/javascript">
function myinput(){
if(document.getElementById("tcode").value){
document.getElementById("sub").removeAttribute("disabled");
}
else{
document.getElementById("sub").setAttribute("disabled",disabled);
}
};
function myclick(){
if(document.getElementById("tcode").value){
document.getElementById("sub").setAttribute("disabled",false);
}
else{
document.getElementById("sub").setAttribute("disabled",true);
}
};
</script>

注意:阿里云短信模板编号为SMS_形式,通过JS控制输入提交按钮是否可用。

<?php

define('IN_ECS', true);
require(dirname(__FILE__) . '/includes/init.php');
//ECShop初始化页面文件 function https_request($url)
{
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$data = curl_exec($curl);
if (curl_errno($curl)) {return 'ERROR '.curl_error($curl);}
curl_close($curl);
return $data;
}
function xml_to_array($xml){
$reg = "/<(\w+)[^>]*>([\\x00-\\xFF]*)<\\/\\1>/";
if(preg_match_all($reg, $xml, $matches)){
$count = count($matches[0]);
for($i = 0; $i < $count; $i++){
$subxml= $matches[2][$i];
$key = $matches[1][$i];
if(preg_match( $reg, $subxml )){
$arr[$key] = xml_to_array( $subxml );
}else{
$arr[$key] = $subxml;
}
}
}
return @$arr;
}
function random($length = 6 , $numeric = 0) {
PHP_VERSION < '4.2.0' && mt_srand((double)microtime() * 1000000);
if($numeric) {
$hash = sprintf('%0'.$length.'d', mt_rand(0, pow(10, $length) - 1));
} else {
$hash = '';
$chars = 'ABCDEFGHJKLMNPQRSTUVWXYZ23456789abcdefghjkmnpqrstuvwxyz';
$max = strlen($chars) - 1;
for($i = 0; $i < $length; $i++) {
$hash .= $chars[mt_rand(0, $max)];
}
}
return $hash;
}
$target = "https://sms.aliyuncs.com/?";
//阿里云短信请求地址头
$mobile_code = random(6,1);
function percentEncode($str)
{
// 使用urlencode编码后,将"+","*","%7E"做替换即满足ECS API规定的编码规范
$res = urlencode($str);
$res = preg_replace('/\+/', '%20', $res);
$res = preg_replace('/\*/', '%2A', $res);
$res = preg_replace('/%7E/', '~', $res);
return $res;
}
function computeSignature($parameters, $accessKeySecret)
{
// 将参数Key按字典顺序排序
ksort($parameters);
// 生成规范化请求字符串
$canonicalizedQueryString = '';
foreach($parameters as $key => $value)
{
$canonicalizedQueryString .= '&' . percentEncode($key)
. '=' . percentEncode($value);
}
// 生成用于计算签名的字符串 stringToSign
$stringToSign = 'GET&%2F&' . percentencode(substr($canonicalizedQueryString, 1));
//echo "<br>".$stringToSign."<br>";
// 计算签名,注意accessKeySecret后面要加上字符'&'
$signature = base64_encode(hash_hmac('sha1', $stringToSign, $accessKeySecret . '&', true));
return $signature;
}
// 注意使用GMT时间
date_default_timezone_set("GMT");
$dateTimeFormat = 'Y-m-d\TH:i:s\Z'; // ISO8601规范
$accessKeyId = '根据实际修改'; // 这里填写您的Access Key ID
$accessKeySecret = '根据实际修改'; // 这里填写您的Access Key Secret
$ParamString="{\"code\":\"".strval($mobile_code)."\"}";
// 发送请求
if($_REQUEST['act'] == 'aliyun_mns'){// POST表单提交请求页面动作?act=aliyun_mns
/* 显示模板 */
if (isset($_POST['tcode']) && isset($_POST['tuser'])) {
$tcode=$_POST["tcode"];// 表单提交SMS短信模板
$tuser=$_POST["tuser"]; //表单提交用户组
$sql = "SELECT DISTINCT mobile_phone FROM " .$ecs->table($tuser);
$phoneNO = $db->getCol($sql);
$ii=0;
foreach($phoneNO as $key=>$pn)
{
if(preg_match("/^1[34578]\d{9}$/",$pn)){
$data = array(
// 公共参数
'SignName'=>'根据实际修改',
'Format' => 'XML',
'Version' => '2016-09-27',
'AccessKeyId' => $accessKeyId,
'SignatureVersion' => '1.0',
'SignatureMethod' => 'HMAC-SHA1',
'SignatureNonce'=> uniqid(),
'Timestamp' => date($dateTimeFormat),
// 接口参数
'Action' => 'SingleSendSms',
'TemplateCode' =>$tcode,
'RecNum' => $pn,
'ParamString' => $ParamString
);
$data['Signature'] = computeSignature($data, $accessKeySecret);
//给每一位用户发短信
$result = xml_to_array(https_request($target.http_build_query($data)));
}
}
}
/* 显示Smarty模板 */
assign_query_info();
$smarty->display('aliyun_mns.htm');
}
?>

创建和查看Access Key

https://ak-console.aliyun.com/#/accesskey/

YourSignName 和 YourSMSTemplateCode 获取在阿里云控制台消息服务。

PHP控制阿里云短信API接口实现短信群发功能的更多相关文章

  1. java 调用短信 api 接口发送短信

    参考:   https://blog.csdn.net/u014793522/article/details/59062014 参考 :https://blog.csdn.net/Lu_shilusi ...

  2. 如何防止短信API接口遍历

    短信API接口在web中得到越来越多的应用,如用户注册,登录,密码重置等业务模块都会使用手机验证码进行身份验证.一般情况下,我们会采用这样的安全策略,将短信发送频率限制在正常的业务流控范围内,比如,一 ...

  3. 五:用JAVA写一个阿里云VPC Open API调用程序

    用JAVA写一个阿里云VPC Open API调用程序 摘要:用JAVA拼出来Open API的URL 引言 VPC提供了丰富的API接口,让网络工程是可以通过API调用的方式管理网络资源.用程序和软 ...

  4. 试了下阿里云的OPEN Api

    逐渐理解open api的意义,试了下阿里云的续费接口,续费一个月 package com.test; /** * @author * @date 2018/12/05 */ import com.a ...

  5. 阿里云视频直播API签名机制源码

    阿里云视频直播API签名机制源码 本文展示:通过代码实现下阿里视频直播签名处理规则 阿里云视频直播签名机制,官方文档链接:https://help.aliyun.com/document_detail ...

  6. 关于新浪和腾讯短网址API接口的调用

    最新新浪t.cn短网址和腾讯url.cn短网址生成api接口,快速生成t.cn及url.cn超短链接,接口都可以正常调用,觉得不错可以收藏一下. 新浪短网址api接口:1. http://yldwz. ...

  7. 如何利用新浪官方的短网址API接口实现T.cn短链接的压缩生成

    短网址的实现原理就是有一个数据表会配置文件将短网址和实际网址进行对应,当请求某个短网址时,程序跳转到对应的实际网址上去,从而实现网址的访问.目前国内最稳定最好用的是新浪T.cn短链接. 之前新浪提供了 ...

  8. 阿里云ONS而微软Azure Service Bus体系结构和功能比较

    阿里云ONS而微软Azure Service bus体系结构和功能比较 版权所有所有,转载请注明出处http://blog.csdn.net/yangzhenping.谢谢! 阿里云的开放消息服务: ...

  9. 用Python调用华为云API接口发短信

    [摘要] 用Python调用华为云API接口实现发短信,当然能给调用发短信接口前提条件是通过企业实名认证,而且有一个通过审核的短信签名,话不多说,showcode #!/usr/bin/python3 ...

随机推荐

  1. [工具-005] C#如何绑定HotKey

    由于某种需要,需要做一个控制鼠标在屏幕乱点的程序,运用C#的 [DllImport("user32.dll")]      private static extern int mo ...

  2. Pycharm虚拟环境的使用

    Pycharm虚拟环境的使用 pycharm创建项目的时候,一定勾选inhert global site-packages.不然系统的库就没法用了. 打开Project Interpreters页面: ...

  3. BST and Heap详解

    BST(Binary Search Tree) 基本特点: 二叉树 集合中的数据具有可比较大小的关键码 数据之间满足BST特性 中序遍历可得到一个递增的数据序列(可作为判断一棵二叉树是否是BST的方法 ...

  4. python数据类型 列表+元组

    一:列表 二:元组 一:列表list: 1.列表中的每个元素都可变的,意味着可以对每个元素进行修改和删除: 2.列表是有序的,每个元素的位置是确定的,可以用索引去访问每个元素: 3.列表的所有元素放在 ...

  5. display有哪些值?说明他们的作用?

    inline(默认)— 内联 none — 隐藏 block — 显示.块级元素(单独占一行) inline-block — 行内块元素(不占整行) table — 表格显示 list-item — ...

  6. 【Mybatis plus 3.2】怎么操作?看看我!(update、limit、between)

    必须是springboot工程 在pom.xml中添加 <dependency> <groupId>com.baomidou</groupId> <artif ...

  7. Java实现 LeetCode 817 链表组件(暴力)

    817. 链表组件 给定一个链表(链表结点包含一个整型值)的头结点 head. 同时给定列表 G,该列表是上述链表中整型值的一个子集. 返回列表 G 中组件的个数,这里对组件的定义为:链表中一段最长连 ...

  8. Java实现 蓝桥杯 算法训练 未名湖边的烦恼

    算法训练 未名湖边的烦恼 时间限制:1.0s 内存限制:256.0MB 问题描述 每年冬天,北大未名湖上都是滑冰的好地方.北大体育组准备了许多冰鞋,可是人太多了,每天下午收工后,常常一双冰鞋都不剩. ...

  9. java实现 蓝桥杯 算法提高 Problem S4: Interesting Numbers 加强版

    1 问题描述 Problem Description We call a number interesting, if and only if: 1. Its digits consists of o ...

  10. mysql基础之-mysql数据控制语言DCL(七)

    0x01 mysql中的权限分布 mysql中的用户信息都存储在系统数据库mysql的user表中 查询语句:select host,user,password from mysql.user; 创建 ...