阿里大鱼的短信接口申请和调用

阿里大鱼短信接口调用精简版(验证码类型)

接口网站

申请步骤

登录->控制台->使用短信服务->左侧(接口调用)->1.(获取AK->开始使用子用户AccessKey)。2.(添加模板)。3.(添加签名。注意:签名会成为短信开头的文字)

注意:子用户AccessKey一定要授权

这里写图片描述

调用代码

第一个文件 w.php文件

<?php
class SignatureHelper {  
    /** 
     * 生成签名并发起请求 
     * 
     * @param $accessKeyId string AccessKeyId (https://ak-console.aliyun.com/) 
     * @param $accessKeySecret string AccessKeySecret 
     * @param $domain string API接口所在域名 
     * @param $params array API具体参数 
     * @param $security boolean 使用https 
     * @return bool|\stdClass 返回API接口调用结果,当发生错误时返回false 
     */  
    public function request($accessKeyId, $accessKeySecret, $domain, $params, $security=false) {  
        $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 .= "&" . $this->encode($key) . "=" . $this->encode($value);  
        }  

        $stringToSign = "GET&%2F&" . $this->encode(substr($sortedQueryStringTmp, 1));  

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

        $signature = $this->encode($sign);  

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

        try {  
            $content = $this->fetchContent($url);  
            return json_decode($content);  
        } catch( \Exception $e) {  
            return false;  
        }  
    }  

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

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

第二个文件 x.php文件

<?php
require_once "w.php";  
/** 
 * 发送短信 
 */  
function sendSms() {  

    $params = array ();  

    // *** 需用户填写部分 ***  

    // fixme 必填: 请参阅 https://ak-console.aliyun.com/ 取得您的AK信息  
    $accessKeyId = "***************************";  
    $accessKeySecret = "*************************************";  

    // fixme 必填: 短信接收号码  
    $params["PhoneNumbers"] = "可以前端提供数据";  

    // fixme 必填: 短信签名,应严格按"签名名称"填写,请参考: https://dysms.console.aliyun.com/dysms.htm#/develop/sign  
    $params["SignName"] = "自己申请";   

    // fixme 必填: 短信模板Code,应严格按"模板CODE"填写, 请参考: https://dysms.console.aliyun.com/dysms.htm#/develop/template  
    $params["TemplateCode"] = "模板号和你申请的模板必须一样";  

    // fixme 可选: 设置模板参数, 假如模板中存在变量需要替换则为必填项  
    $params['TemplateParam'] = Array (  
        "code" => "自己写一个随机验证码即可" 
    );  

    // fixme 可选: 设置发送短信流水号  
    $params['OutId'] = "12345";  

    // fixme 可选: 上行短信扩展码, 扩展码字段控制在7位或以下,无特殊需求用户请忽略此字段  
    $params['SmsUpExtendCode'] = "1234567";  


    // *** 需用户填写部分结束, 以下代码若无必要无需更改 ***  
    if(!empty($params["TemplateParam"]) && is_array($params["TemplateParam"])) {  
        $params["TemplateParam"] = json_encode($params["TemplateParam"], JSON_UNESCAPED_UNICODE);  
    }  

    // 初始化SignatureHelper实例用于设置参数,签名以及发送请求  
    $helper = new SignatureHelper();  

    // 此处可能会抛出异常,注意catch  
    $content = $helper->request(  
        $accessKeyId,  
        $accessKeySecret,  
        "dysmsapi.aliyuncs.com",  
        array_merge($params, array(  
            "RegionId" => "cn-hangzhou",  
            "Action" => "SendSms",  
            "Version" => "2017-05-25",  
        ))  
    );  
     // $content = self::object_array($content);
    return $content;  
}
  // 对象转为数组
    // static function object_array($array)
    // {
    //     if (is_object($array)) {
    //         $array = (array)$array;
    //     }
    //     if (is_array($array)) {
    //         foreach ($array as $key => $value) {
    //             $array[$key] = self::object_array($value);
    //         }
    //     }
    //     return $array;
    // }
ini_set("display_errors", "on");    // 显示错误提示,仅用于测试时排查问题  
set_time_limit(0);                  // 防止脚本超时,仅用于测试使用,生产环境请按实际情况设置  
header("Content-Type: text/plain; charset=utf-8"); // 输出为utf-8的文本格式,仅用于测试  

// 验证发送短信(SendSms)接口  
print_r(sendSms());  

测试结果

这里写图片描述

猜你喜欢

转载自blog.csdn.net/y_z_w123/article/details/79879202
今日推荐