首页 华为云动态正文

Thinkphp对接华为云短信接口

云返利网 华为云动态 2020-08-22 06:26:21 6 0 华为云服务

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

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

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

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

官方说明地址: 

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

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

<?php
namespace HWcloud;
require 'vendor/autoload.php';
use GuzzleHttp\Psr7;
use GuzzleHttp\Client;
use GuzzleHttp\Exception\RequestException;
class HuaWeiCloud
{
	private $appkey = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXX'; 
	private $appSecret = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXX';
	private $sender = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXX'; //国内短信签名通道号或国际/港澳台短信通道号
	private $templateId = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXX';
	private $statusCallback = '';//选填,短信状态报告接收地址,推荐使用域名,为空或者不填表示不接收状态报告
	private $url = 'https://api.rtc.huaweicloud.com:10443/sms/batchSendSms/v1';//请求地址接口
	
	/**
	 * 发送短信验证码
	 * @param  string $phone  手机号码
	 * @param  string $code   短信验证码
	 * @param  string $signature   签名名称国际/港澳台短信不用关注该参数
	 * @return string 
	 */
	public function sendMsgCode($phone,$code,$signature){
		$templateParas = "[\"".$code."\"]"; //模板变量
		$client = new Client();
		try{
			$response = $client->request('POST', $this->url,[
				'form_params' => [
					'from' => $this->sender,
					'to' => $phone,
					'templateId' => $this->templateId,
					'templateParas' => $templateParas,
					'statusCallback' => $this->statusCallback,
					'signature' => $signature //使用国内短信通用模板时,必须填写签名名称
				],
				'headers' => [
					'Authorization' => 'WSSE realm="SDP",profile="UsernameToken",type="Appkey"',
					'X-WSSE' => $this->buildWsseHeader($this->appkey,$this->appSecret)
				],
				'verify' => false //为防止因HTTPS证书认证失败造成API调用失败,需要先忽略证书信任问题
			]);
			//echo Psr7\str($response); //打印响应信息
			//echo $response -> getStatusCode(); //获取发送状态
			//echo $response ->getBody();//获取发送主题内容
			return json_decode($response ->getBody(),true);
		}catch(RequestException $e) {
				echo Psr7\str($e->getRequest()), "\n";
			if($e->hasResponse()){
				echo Psr7\str($e->getResponse());
			}
		}
	}
	
	/**
	 * 构造X-WSSE参数值
	 * @param string $appKey
	 * @param string $appSecret
	 * @return string
	 */
	private function buildWsseHeader(){
		$now = date('Y-m-d\TH:i:s\Z'); //Created
		$nonce = uniqid(); //Nonce
		$base64 = base64_encode(hash('sha256', ($nonce . $now . $this->appSecret))); //PasswordDigest
		return sprintf("UsernameToken Username=\"%s\",PasswordDigest=\"%s\",Nonce=\"%s\",Created=\"%s\"",$this->appkey, $base64, $nonce, $now);
	}
}

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

 

【关于云返利网】

云返利网是阿里云、腾讯云、华为云产品推广返利平台,在各个品牌云产品官网优惠活动之外,云返利网还提供返利。您可以无门槛获得阿里云、华为云、腾讯云所有产品返利,在官网下单后就可以领取,无论是自己用、公司用还是帮客户采购,您个人都可以获得返利。云返利网的目标是让返利更多、更快、更简单!详情咨询13121395187(微信同号)