thinkphp发送百度短信的代码

162

第一步,在/config新建sms.php,设置短信密钥,直接写在控制器中也是一样

第二步,新建控制器

namespace app\webapi\controller;


use think\facade\Db;

use think\facade\View;

use think\facade\Cache;


class Baidu

{

     /**

     * 发送短信验证码

     * @param string $mobile 手机号

     */

    public function sendsms()

    {

        die;

        $mobile = '15678982250';//input('mobile');

        $captcha = mt_rand(100000,999999);

        $baidu_config=config('sms');

        // /var_dump($baidu_config);die;

        $data = [

            "signatureId" => ', // 签名ID

            "template" => ', // 模板ID

            "mobile" => $mobile, // 手机号

            "contentVar" => [ // 内容,对应模板中的参数

                "id" => '1005678',

            ]

        ];

 

        $ak = $baidu_config['baidu_sms']['api_key'];//'你的 AccessKey';

        $sk = $baidu_config['baidu_sms']['secret_key'];//'你的 SecretKey';

 

        $res = $this->getBaiduApi($data,$ak,$sk);

        echo json_encode($res,320);

        if($res['code'] == 1000){

            jsonReturn(1,'发送成功');

        }

        jsonReturn(0,$res['message']);

    }

 

    /**

     * 接收处理

     * @param $data     array   短信数据

     * @param $ak   string      AccessKey

     * @param $sk   string      SecretKey

     * @return false|mixed

     */

    public function getBaiduApi($data,$ak,$sk)

    {

        $host = 'smsv3.bj.baidubce.com'; // 服务 域名 (北京 smsv3.bj.baidubce.com  ,  苏州 smsv3.su.baidubce.com)

        $uri = '/api/v3/sendSms'; // 接口路径

        $startUtc = gmdate("Y-m-d\TH:i:s\Z");  // utc 时间戳

 

        $Authorization = $this->getBaiDuAuthorization($startUtc,$uri,$host,$ak,$sk);

 

        $url = "https://".$host.$uri;

 

        $data = json_encode($data,JSON_UNESCAPED_UNICODE);

        $header = [

            'Authorization:'.$Authorization,

            'Host:'.$host,

            'content-type:application/json',

            'x-bce-date:'.$startUtc,

            'Content-Length:'.strlen($data)

        ];

 

        return $this->getBaiDuPostCurl($url,$data,$header);

    }

 

    /**

     *  生成签名 认证字符串  

     *  ps: 可使用百度云签名计算工具进行校验

     * @param  [string]   startUtc   url

     * @param  [string]   canonicalUri    请求数据

     * @param  [string]   host    请求头

     * @param  [string]   ak    AccessKey

     * @param  [string]   sk    SecretKey

     */

    function getBaiDuAuthorization($startUtc,$canonicalUri,$host,$ak,$sk)

    {

        // 签名有效期 (秒)

        $validity = '1800';

 

        // 代签名头域

        $signedHeaders = 'host;x-bce-date';

 

        // Host

        $Host = "host:".$host;

 

//        $startUtc = '2023-07-28T10:02:36Z';         // utc 时间

        $BceDate = "x-bce-date:".UrlEncode($startUtc);

 

        // http 方法

        $httpRequestMethod = "POST";

 

        $canonicalCan = '';

 

        // 1: 规范化请求和前缀字符串

 

        // 规范化请求  由HTTP请求信息规范化后生成

        $canonicalRequest = $httpRequestMethod."\n" .$canonicalUri."\n" .$canonicalCan."\n" .$Host."\n" .$BceDate;

 

        // 前缀字符串  由除sk字段外的签名信息生成

        $authStringPrefix = "bce-auth-v1/".$ak."/".$startUtc."/".$validity;

 

        // 2: 派生签名密钥 signingKey  signingKey = HMAC-SHA-256-HEX("sk", authStringPrefix)

        $signingKey = bin2hex(hash_hmac('sha256',  $authStringPrefix,$sk, true));

 

        // 3: 签名摘要 signature  signature = HMAC-SHA-256-HEX(signingKey, canonicalRequest)

        $signature = bin2hex(hash_hmac('sha256',  $canonicalRequest,$signingKey, true));

 

        // 4: 认证字符串 authorization  Authorization = authStringPrefix/signedHeaders/signature

        $Authorization = $authStringPrefix.'/'.$signedHeaders.'/'.$signature;

 

//        var_dump($startUtc);

//        var_dump($authStringPrefix);

//        var_dump($canonicalRequest);

//        var_dump($signingKey);

//        var_dump($signature);

//        var_dump($Authorization);exit;

 

        return $Authorization;

    }

 

 

    /**

     * post 请求

     * @param  [string]   url   url

     * @param  [string]   data    请求数据

     * @param  [string]   header    请求头

     */

    function getBaiDuPostCurl($url,$data=null,$header=null)

    {

        $ch = curl_init();

 

        curl_setopt($ch, CURLOPT_URL, $url);

        curl_setopt($ch, CURLOPT_HEADER, false);

        curl_setopt($ch, CURLOPT_NOBODY, false);

        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

 

        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);

        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

 

        if (!empty($data)) {

            curl_setopt($ch, CURLOPT_POST, true);

            curl_setopt($ch, CURLOPT_POSTFIELDS, $data);

        }

        if ( !empty($header) ) {

            curl_setopt($ch, CURLOPT_HTTPHEADER, $header);

        }

 

        $httpCode = curl_exec($ch);

        $errorCode = curl_errno($ch);

        curl_close($ch);

        if(0 !== $errorCode) {

            return false;

        }

 

        return json_decode($httpCode,true);

    }

}


无人货架批量大规模上架商品解决方案

架构设计之初未考虑到业务需要批量上架商品,几万个逐一生成货架商品需要耗费大量人力,而货架商品的结构数量都一样。...

物业小区无人销售智能货架方案

小区无人值守货架销售的建设方案,从三个方面阐述货架集成建设,投入使用,系统管理。...

厨余收运管理系统迭代开发,回收系统优化升级

完成基础数据开发,试运行一段时间后,在数据沉淀的基础上对数据进行挖掘,对业务处理进行优化升级。...

餐厨油脂再生资源收运回收管理系统方案

通过互联网+改变餐厨收运回收传统工作方式,移动手机助力系统提供工作效率、’管理效率,数据电子化打造收运大数据建设。...

医馆诊所管理系统

实现中医馆中诊所,理疗的业务处理,分为小程序用户端,医生端,管理端,PC管理端,PC服务台,PC医生端...

thinkphp8安装VIEW,多应用,验证码

官方THKPHP8默认只有单应用一个控制器,其他插件可按需安装,通常需要VIEW和多应用...

sqlserver中的nvarchar和varchar的区别

数据库表中nvarchar和varchar都可以用来表示字符的存储类型。...

微信接口开发返回码一览表

返回错误码对照表...

高德地图mark按类型批次显示不同的颜色

大量数据点显示在地图上,通常使用海量点的API展示,通过建立多个海量点达到按分类显示不同颜色的mark,看起来更直观...

餐厨垃圾收运小程序需要什么条件

建立一个小程序的硬件设施需要服务器,域名,若干个邮箱...