Thinkphp对接华为云短信接口

在对接短信之前我们需要拿到下面这些东西

a. 已**创建短信应用**,获取APP_Key、APP_Secret和APP接入地址(国际短信还需 获取通道号)。

b. (仅国内短信)已**请短信签名**,获取签名通道号。

c. 已**申请短信模板**,获取模板ID。

官方说明地址: https://support.huaweicloud.co

composer安装Guzzle 可能会比较慢,耐心等待下

接下来就是封装好短信发送类代码如下:

1<?php 2namespace HWcloud; 3require 'vendor/autoload.php'; 4use GuzzleHttp\Psr7; 5use GuzzleHttp\Client; 6use GuzzleHttp\Exception\RequestException; 7class HuaWeiCloud 8{ 9 private $appkey = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXX'; 10 private $appSecret = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXX'; 11 private $sender = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXX'; //国内短信签名通道号或国际/港澳台短信通道号 12 private $templateId = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXX'; 13 private $statusCallback = '';//选填,短信状态报告接收地址,推荐使用域名,为空或者不填表示不接收状态报告 14 private $url = 'https://api.rtc.huaweicloud.com:10443/sms/batchSendSms/v1';//请求地址接口 15 16 /** 17 * 发送短信验证码 18 * @param string $phone 手机号码 19 * @param string $code 短信验证码 20 * @param string $signature 签名名称国际/港澳台短信不用关注该参数 21 * @return string 22 */ 23 public function sendMsgCode($phone,$code,$signature){ 24 $templateParas = "[\"".$code."\"]"; //模板变量 25 $client = new Client(); 26 try{ 27 $response = $client->request('POST', $this->url,[ 28 'form_params' => [ 29 'from' => $this->sender, 30 'to' => $phone, 31 'templateId' => $this->templateId, 32 'templateParas' => $templateParas, 33 'statusCallback' => $this->statusCallback, 34 'signature' => $signature //使用国内短信通用模板时,必须填写签名名称 35 ], 36 'headers' => [ 37 'Authorization' => 'WSSE realm="SDP",profile="UsernameToken",type="Appkey"', 38 'X-WSSE' => $this->buildWsseHeader($this->appkey,$this->appSecret) 39 ], 40 'verify' => false //为防止因HTTPS证书认证失败造成API调用失败,需要先忽略证书信任问题 41 ]); 42 //echo Psr7\str($response); //打印响应信息 43 //echo $response -> getStatusCode(); //获取发送状态 44 //echo $response ->getBody();//获取发送主题内容 45 return json_decode($response ->getBody(),true); 46 }catch(RequestException $e) { 47 echo Psr7\str($e->getRequest()), "\n"; 48 if($e->hasResponse()){ 49 echo Psr7\str($e->getResponse()); 50 } 51 } 52 } 53 54 /** 55 * 构造X-WSSE参数值 56 * @param string $appKey 57 * @param string $appSecret 58 * @return string 59 */ 60 private function buildWsseHeader(){ 61 $now = date('Y-m-d\TH:i:s\Z'); //Created 62 $nonce = uniqid(); //Nonce 63 $base64 = base64_encode(hash('sha256', ($nonce . $now . $this->appSecret))); //PasswordDigest 64 return sprintf("UsernameToken Username=\"%s\",PasswordDigest=\"%s\",Nonce=\"%s\",Created=\"%s\"",$this->appkey, $base64, $nonce, $now); 65 } 66}

实例化当前类,调用sendMsgCode方法即可(填写对应的参数)

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )

Thinkphp对接华为云短信接口 - HelloWorld