阿里雲短信類最新版dysmsapi.aliyuncs.com

<?php
class Sendsms
{

    public static $accessKeyId     = "********";
    public static $accessKeySecret = "*********************";
    public static $SignName        = "比翼生活";

    /**
     * 發送短信
     */
    public static function loginSMS($mobile, $code, $TemplateCode = 'SMS_62660080')
    {

        $params = array();

        //手機號
        $params["PhoneNumbers"]  = $mobile;
        //簽名
        $params["SignName"]      = self::$SignName;
        //登陸註冊模板
        $params["TemplateCode"]  = $TemplateCode;
        //設置模板參數, 假如模板中存在變量需要替換則爲必填項
        $params['TemplateParam'] = ["code" => $code];

        // 可選: 設置發送短信流水號
        //        $params['OutId'] = "12345";
        // 可選: 上行短信擴展碼, 擴展碼字段控制在7位或以下,無特殊需求用戶請忽略此字段
        //        $params['SmsUpExtendCode'] = "1234567";
        // *** 需用戶填寫部分結束, 以下代碼若無必要無需更改 ***
        if (!empty($params["TemplateParam"]) && is_array($params["TemplateParam"])) {
            $params["TemplateParam"] = json_encode($params["TemplateParam"], JSON_UNESCAPED_UNICODE);
        }
        $paramsArr = ["RegionId" => "cn-hangzhou", "Action" => "SendSms", "Version" => "2017-05-25",];
        // 此處可能會拋出異常,注意catch
        $content   = self::request("dysmsapi.aliyuncs.com", array_merge($params, $paramsArr));
        //var_dump($content);
        //exit;
        return $content;
    }

    /**
     * 發送通知
     * @param type $mobile
     * @param type $info
     * @param type $TemplateCode
     * @return type
     * ${consignee},購買的服務:${number},請及時查看!
     */
    public static function sendMessageSMS($mobile, $info = [], $TemplateCode = 'SMS_139228379')
    {

        $params = array();

        //手機號
        $params["PhoneNumbers"]  = $mobile;
        //簽名
        $params["SignName"]      = self::$SignName;
        //登陸註冊模板
        $params["TemplateCode"]  = $TemplateCode;
        //設置模板參數, 假如模板中存在變量需要替換則爲必填項
        $params['TemplateParam'] = $info;

        // 可選: 設置發送短信流水號
        //        $params['OutId'] = "12345";
        // 可選: 上行短信擴展碼, 擴展碼字段控制在7位或以下,無特殊需求用戶請忽略此字段
        //        $params['SmsUpExtendCode'] = "1234567";
        // *** 需用戶填寫部分結束, 以下代碼若無必要無需更改 ***
        if (!empty($params["TemplateParam"]) && is_array($params["TemplateParam"])) {
            $params["TemplateParam"] = json_encode($params["TemplateParam"], JSON_UNESCAPED_UNICODE);
        }

        // 此處可能會拋出異常,注意catch
        $content = self::request("dysmsapi.aliyuncs.com", array_merge($params, $paramsArr));
        return $content;
    }

    public static function request($domain, $params, $security = false)
    {
        $accessKeyId     = self::$accessKeyId;
        $accessKeySecret = self::$accessKeySecret;

        $apiParams = array_merge(array(
            "SignatureMethod"  => "HMAC-SHA1",
            "SignatureNonce"   => uniqid(mt_rand(0, 0xffff), true),
            "SignatureVersion" => "1.0",
            "AccessKeyId"      => $accessKeyId,
            "Timestamp"        => gmdate("Y-m-d\TH:i:s\Z"),
            "Format"           => "JSON",
                ), $params);
        ksort($apiParams);

        $sortedQueryStringTmp = "";
        foreach ($apiParams as $key => $value) {
            $sortedQueryStringTmp .= "&" . self::encode($key) . "=" . self::encode($value);
        }

        $stringToSign = "GET&%2F&" . self::encode(substr($sortedQueryStringTmp, 1));

        $sign = base64_encode(hash_hmac("sha1", $stringToSign, $accessKeySecret . "&", true));

        $signature = self::encode($sign);

        $url = ($security ? 'https' : 'http') . "://{$domain}/?Signature={$signature}{$sortedQueryStringTmp}";

        try {
            $content = self::fetchContent($url);
            return json_decode($content, true);
        } catch (\Exception $e) {
            return false;
        }

        /**
         * 返回數據
         * {#201 ▼
          +"Message": "OK"
          +"RequestId": "2F3EFE06-AEA2-4CEE-ADAD-AA189C43C1F3"
          +"BizId": "410218722821144862^0"
          +"Code": "OK"
          }
         */
    }

    private static function encode($str)
    {
        $res = urlencode($str);
        $res = preg_replace("/\+/", "%20", $res);
        $res = preg_replace("/\*/", "%2A", $res);
        $res = preg_replace("/%7E/", "~", $res);
        return $res;
    }

    private static function fetchContent($url)
    {
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_TIMEOUT, 5);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_HTTPHEADER, array(
            "x-sdk-client" => "php/2.0.0",
        ));

        if (substr($url, 0, 5) == 'https') {
            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
            curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
        }

        $rtn = curl_exec($ch);

        if ($rtn === false) {
            trigger_error("[CURL_" . curl_errno($ch) . "]: " . curl_error($ch), E_USER_ERROR);
        }
        curl_close($ch);

        return $rtn;
    }

    private static 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;
    }

}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章