• 发短信集合类-阿里云短信涉及类


     1 namespace modulelib;
     2 
     3 /**
     4  * 签名助手 2017/11/19
     5  *
     6  * Class SignatureHelper
     7  */
     8 class SignatureHelper {
     9 
    10     /**
    11      * 生成签名并发起请求
    12      *
    13      * @param $accessKeyId string AccessKeyId (https://ak-console.aliyun.com/)
    14      * @param $accessKeySecret string AccessKeySecret
    15      * @param $domain string API接口所在域名
    16      * @param $params array API具体参数
    17      * @param $security boolean 使用https
    18      * @return bool|stdClass 返回API接口调用结果,当发生错误时返回false
    19      */
    20     public function request($accessKeyId, $accessKeySecret, $domain, $params, $security=false) {
    21         $apiParams = array_merge(array (
    22             "SignatureMethod" => "HMAC-SHA1",
    23             "SignatureNonce" => uniqid(mt_rand(0,0xffff), true),
    24             "SignatureVersion" => "1.0",
    25             "AccessKeyId" => $accessKeyId,
    26             "Timestamp" => gmdate("Y-m-dTH:i:s"),
    27             "Format" => "JSON",
    28         ), $params);
    29         ksort($apiParams);
    30 
    31         $sortedQueryStringTmp = "";
    32         foreach ($apiParams as $key => $value) {
    33             $sortedQueryStringTmp .= "&" . $this->encode($key) . "=" . $this->encode($value);
    34         }
    35 
    36         $stringToSign = "GET&%2F&" . $this->encode(substr($sortedQueryStringTmp, 1));
    37 
    38         $sign = base64_encode(hash_hmac("sha1", $stringToSign, $accessKeySecret . "&",true));
    39 
    40         $signature = $this->encode($sign);
    41 
    42         $url = ($security ? 'https' : 'http')."://{$domain}/?Signature={$signature}{$sortedQueryStringTmp}";
    43 
    44         try {
    45             $content = $this->fetchContent($url);
    46             return json_decode($content);
    47         } catch( Exception $e) {
    48             return false;
    49         }
    50     }
    51 
    52     private function encode($str)
    53     {
    54         $res = urlencode($str);
    55         $res = preg_replace("/+/", "%20", $res);
    56         $res = preg_replace("/*/", "%2A", $res);
    57         $res = preg_replace("/%7E/", "~", $res);
    58         return $res;
    59     }
    60 
    61     private function fetchContent($url) {
    62         $ch = curl_init();
    63         curl_setopt($ch, CURLOPT_URL, $url);
    64         curl_setopt($ch, CURLOPT_TIMEOUT, 5);
    65         curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    66         curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    67             "x-sdk-client" => "php/2.0.0"
    68         ));
    69 
    70         if(substr($url, 0,5) == 'https') {
    71             curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    72             curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
    73         }
    74 
    75         $rtn = curl_exec($ch);
    76 
    77         if($rtn === false) {
    78             trigger_error("[CURL_" . curl_errno($ch) . "]: " . curl_error($ch), E_USER_ERROR);
    79         }
    80         curl_close($ch);
    81 
    82         return $rtn;
    83     }
    84 }
  • 相关阅读:
    第04组(64) 需求分析报告
    第04组(64) 团队展示
    结对编程作业
    Python单元测试框架 Unittest 的简单使用方法
    第一次个人编程作业
    第09组 Alpha冲刺 总结
    Swagger 工具集
    第09组 Alpha冲刺(6/6)
    第09组 Alpha冲刺(5/6)
    第09组 Alpha冲刺(4/6)
  • 原文地址:https://www.cnblogs.com/exo5/p/13576063.html
Copyright © 2020-2023  润新知