#PHP# 华为云 API 方式发送短信
使用给华为云 消息
服务 API 方式发送短信
代码来自华为云,已通过测试
<?php
/**
* 华为云发送短信示例代码
* 本段代码需要使用自己的配置信息才能正常运行,出配置信息外,不需要改动任何代码内容即可运行
*
* @version 0.1
* @author huawei cloud(https://support.huaweicloud.com/devg-msgsms/sms_04_0003.html)
*
* 2019-03-05 IIS10 + PHP 7.2.5调试通过
*/
//
// 为避免误调用而加入的提示,测试&部署时需移除本段代码
//
$tips = array(
"code"=>"200",
"msg"=>"Config ur info first",
"time"=>date("h:i:sa")
);
die(json_encode($tips));
//必填,请参考"开发准备"获取如下数据,替换为实际值
$url = 'https://api.rtc.huaweicloud.com:10443/sms/batchSendSms/v1'; //APP接入地址+接口访问URI
$APP_KEY = ''; //APP_Key
$APP_SECRET = ''; //APP_Secret
$sender = ''; //国内短信签名通道号或国际/港澳台短信通道号
$TEMPLATE_ID = ''; //模板ID
//条件必填,国内短信关注,当templateId指定的模板类型为通用模板时生效且必填,必须是已审核通过的,与模板类型一致的签名名称
//国际/港澳台短信不用关注该参数
$signature = ''; //签名名称
//必填,全局号码格式(包含国家码),示例:+8615123456789,多个号码之间用英文逗号分隔
$receiver = '+8615123456789,+8615123456789'; //短信接收人号码
//选填,短信状态报告接收地址,推荐使用域名,为空或者不填表示不接收状态报告
$statusCallback = '';
/**
* 选填,使用无变量模板时请赋空值 $TEMPLATE_PARAS = '';
* 单变量模板示例:模板内容为"您的验证码是${NUM_6}"时,$TEMPLATE_PARAS可填写为'["369751"]'
* 双变量模板示例:模板内容为"您有${NUM_2}件快递请到${TXT_32}领取"时,$TEMPLATE_PARAS可填写为'["3","人民公园正门"]'
* 查看更多模板变量规则:常见问题>业务规则>短信模板内容审核标准
* @var string $TEMPLATE_PARAS
*/
$TEMPLATE_PARAS = '["369751"]'; //模板变量,根据自身使用的模板,其值长度和个数与模板对应
//请求Headers
$headers = [
'Content-Type: application/x-www-form-urlencoded',
'Authorization: WSSE realm="SDP",profile="UsernameToken",type="Appkey"',
'X-WSSE: ' . buildWsseHeader($APP_KEY, $APP_SECRET)
];
//请求Body
$data = http_build_query([
'from' => $sender,
'to' => $receiver,
'templateId' => $TEMPLATE_ID,
'templateParas' => $TEMPLATE_PARAS,
'statusCallback' => $statusCallback,
// 'signature' => $signature //使用国内短信通用模板时,必须填写签名名称
]);
$context_options = [
'http' => ['method' => 'POST', 'header'=> $headers, 'content' => $data],
'ssl' => ['verify_peer' => false, 'verify_peer_name' => false] //为防止因HTTPS证书认证失败造成API调用失败,需要先忽略证书信任问题
];
print_r($context_options) . PHP_EOL; //打印请求信息
$response = file_get_contents($url, false, stream_context_create($context_options));
print_r(json_decode($response)) . PHP_EOL; //打印响应信息
/**
* 构造X-WSSE参数值
* @param string $appKey
* @param string $appSecret
* @return string
*/
function buildWsseHeader(string $appKey, string $appSecret){
date_default_timezone_set('Asia/Shanghai');
$now = date('Y-m-d\TH:i:s\Z'); //Created
$nonce = uniqid(); //Nonce
$base64 = base64_encode(hash('sha256', ($nonce . $now . $appSecret))); //PasswordDigest
return sprintf("UsernameToken Username=\"%s\",PasswordDigest=\"%s\",Nonce=\"%s\",Created=\"%s\"",
$appKey, $base64, $nonce, $now);
}
?>
#PHP# 华为云 API 方式发送短信的更多相关文章
- 用Python调用华为云API接口发短信
[摘要] 用Python调用华为云API接口实现发短信,当然能给调用发短信接口前提条件是通过企业实名认证,而且有一个通过审核的短信签名,话不多说,showcode #!/usr/bin/python3 ...
- java 阿里云接口实现发送短信验证码
此刻自己做的小项目中,需要用到手机发送短信验证码实现注册功能,于是就去阿里云注册了账号,并实现随机发送验证码的功能 第一步:在阿里云官网登录注册 已有支付宝或淘宝的账号可以直接登录,最后需要实名认 ...
- java 调用短信 api 接口发送短信
参考: https://blog.csdn.net/u014793522/article/details/59062014 参考 :https://blog.csdn.net/Lu_shilusi ...
- 个人永久性免费-Excel催化剂功能第85波-灵活便捷的批量发送短信功能(使用腾讯云接口)
微信时代的今天,短信一样不可缺席,大系统都有集成短信接口.若只是临时用一下,若能够直接在Excel上加工好内容就可以直接发送,这些假设在此篇批量群发短信功能中都为大家带来完美答案. 业务场景 不多说, ...
- ios调用本地拨打电话,发送短信
电话.短信是手机的基础功能,iOS中提供了接口,让我们调用.这篇文章简单的介绍一下iOS的打电话.发短信在程序中怎么调用. 1.打电话 [[UIApplication sharedApplicat ...
- android 中调用接口发送短信
android中可以通过两种方式发送短信 第一:调用系统短信接口直接发送短信:主要代码如下: //直接调用短信接口发短信 SmsManager smsManager = SmsManager.getD ...
- Linux-C实现GPRS模块发送短信
“GSM模块,是将GSM射频芯片.基带处理芯片.存储器.功放器件等集成在一块线路板上,具有独立的操作系统.GSM射频处理.基带处理并提供标准接口的功能模块.GSM模块根据其提供的数据传输速率又可以分为 ...
- SmsUtils 发送短信
import java.io.InputStream; import java.io.OutputStream; import java.io.OutputStreamWriter; import j ...
- PHP控制阿里云短信API接口实现短信群发功能
阿里云短信支持先使用后支付的原则,价格为4分半1条. 通过SDK可以与网站功能的绑定,实现响应的短信发送功能 现已统一合并升级为:消息服务. 消息服务 阿里云消息服务(Message Service, ...
随机推荐
- Luogu 3321 [SDOI2015]序列统计
BZOJ 3992 点开这道题之后才发现我对原根的理解大概只停留在$998244353$的原根是$3$…… 关于原根: 点我 首先写出$dp$方程,设$f_{i, j}$表示序列长度为$i$当前所有数 ...
- 使用junit单元测试SpringMvc
对于有依赖关系的方法,junit测试会有些麻烦,可以用@before @after之类的创建数据库连接,然后进行测试,但是有些太麻烦了. 所以就使用一下这个:org.springframework.t ...
- 2016-2017-20155329 《Java程序设计》第6周学习总结
学号 2016-2017-20155329 <Java程序设计>第6周学习总结 教材学习内容总结 数据从来源取出:输入串流 java.io.InputStream 写入目的的:输出串流 j ...
- PostgreSQL CPU满(100%)性能分析及优化
业务场景:大批量更新时,数据库长时间CPU占用超过90,影响其他正常业务流程,参考阿里云上的一篇文章:https://help.aliyun.com/knowledge_detail/43562.ht ...
- Summary #ToBeContinue......
一.请回望暑假时的第一次作业,你对于软件工程课程的想象1)对比开篇博客你对课程目标和期待,“希望通过实践锻炼,增强计算机专业的能力和就业竞争力”,对比目前的所学所练所得,在哪些方面达到了你的期待和目标 ...
- Quartus II 软件生成FFT、NCO、FIR等IP核时卡住不动的解决办法
据网友表示,遇到这个问题时,在任务管理器中手动关闭quartus_map进程就可以了,由于我的电脑最近一直没有出问题,因此也无法验证.欢迎大家针对这个问题讨论,提出肯定.否定的说法. 另外,很多人表示 ...
- 作业 c++编写
1.第一版本程序Prog1:+ 给定一个数组,实现数组元素求和:,具体要求:实现对一维数组(a[100])的所有元素相加运算.+ 数据准备:a)数组长度:100:b)数组数据来源:实验数据A列:1~1 ...
- 简单的ListView中item图片异步加载
前言: 在android开发当中,从目标地址获取图片往往都是采用异步加载的方法.当完全加载完图片后在进行显示,也有些是直接将加载的图片一点一点的显示出来. 这两个区别只是对流的处理不同而已.现 ...
- (zxing.net)一维码Code 128的简介、实现与解码
一.简介 一维码Code 128:1981年推出,是一种长度可变.连续性的字母数字条码.与其他一维条码比较起来,相对较为复杂,支持的字元也相对较多,又有不同的编码方式可供交互运用,因此其应用弹性也较大 ...
- python中的函数(基础)
1.什么是函数 函数是指将一组数据的集合通过一个名字(函数名)封装起来,要想执行这个函数,只需调用函数名即可 (函数就是对功能或者动作的封装) 2.函数的语法和定义 def 函数名() 函数体 调用: ...