ThinkPHP5 阿里大鱼类库

浏览:2122 发布日期:2016/09/03 分类:ThinkPHP5专区 关键字: ThinkPHP5 阿里大鱼,类库
THINKPHP 5 阿里大鱼类库 以前用的是阿里云的sdk 里面东西太多 又不知道删那些 ,最近在网上找到了大神封装的 就一个文件 改了改可以用作thinkphp5 .
学习过程 根据 http://www.kancloud.cn/thinkphp/thinkphp5_quickstart/197464

使用方法
/**
* 阿里大鱼(www.alidayu.com)短信发送类
* 适用ThinkPHP版本5
* 请将本类放在\extend\org\util目录下
* 使用方法1:
首先在配置文件中增加配置项:
先config.php 配置
sms.appkey;
sms.secretKey;
---------------------code begin---------------------
$alisms = new AliSms();
$result = $alisms->sign('短信签名')->data(短信模板变量[数组])->code('短信模板ID')->send('短信接收号码');

---------------------code end---------------------
以上最后例子中$result传递的是变量地址

返回值:
参考 http://open.taobao.com/doc2/ap ... pe%3D 的返回示例
但本类去除了第一层无意义数据,并加上status和info两个返回值;status为0表示发送失败,status为1表示发送成功;info在一定程度上可以作为发送结果文本

参数说明:
1.短信签名必须是在阿里大鱼“管理中心-短信签名管理”中的可用签名。如“阿里大鱼”已在短信签名管理中通过审核,则可传入”阿里大鱼“(传参时去掉引号)作为短信签名。短信效果示例:【阿里大鱼】欢迎使用阿里大鱼服务。
2.短信模板变量,传参规则{"key":"value"},key的名字须和申请模板中的变量名一致,多个变量之间以逗号隔开。示例:针对模板“验证码${code},您正在进行${product}身份验证,打死不要告诉别人哦!”,传参时需传入{"code":"1234","product":"alidayu"}
注:官方API使用JSON作为参数,本累中直接使用数组即可,如:["code"=>"1234","product"=>"alidayu"]
3.短信接收号码。支持单个或多个手机号码,传入号码为11位手机号码,不能加0或+86。群发短信需传入多个号码,以英文逗号分隔,一次调用最多传入200个号码。示例:18600000000,13911111111,13322222222
4.短信模板ID,传入的模板必须是在阿里大鱼“管理中心-短信模板管理”中的可用模板。示例:SMS_585014
**/
代码如下<?php
// +----------------------------------------------------------------------
// | AliSms
// +----------------------------------------------------------------------
// +----------------------------------------------------------------------
namespace Org\Util;
use think\Config;
class AliSms {
    //API请求地址
    private $gatewayUrl = "https://eco.taobao.com/router/rest";
    
    //API名称
    private $method="alibaba.aliqin.fc.sms.num.send";
    
    //响应格式
    private $format="json";
    
    //API协议版本
    private $v="2.0";
    
    //签名方式
    private $sign_method="md5";
    
    private $appKey;
    private $secretKey;
    
    //短信类型
    private $sms_type = "normal";
    
    //短信签名
    private $sms_free_sign_name = '';
    
    //短信模板变量
    private $sms_param = [];
    
    //短信接收号码
    private $rec_num = '';
    
    //短信模版ID
    private $sms_template_code = '';
    
    private function _send(){
        $param = [
            'method'                =>    $this->method,
            'format'                =>    $this->format,
            'app_key'                =>    Config::get("sms.appkey"),
            'timestamp'                =>    date("Y-m-d H:i:s"),
            'v'                        =>    $this->v,
            'sign_method'            =>    $this->sign_method,
            'sms_type'                =>    $this->sms_type,
            'sms_free_sign_name'    =>    $this->sms_free_sign_name,
            'sms_param'                =>    json_encode($this->sms_param),
            'rec_num'                =>    $this->rec_num,
            'sms_template_code'        =>    $this->sms_template_code,
        ];
        if(!$this->sms_param){
            unset($param['sms_param']);
        }
        
        $param['sign'] = $this->_sign(array_merge($param));
        $result = $this->_sendSms($param);
        return $result;
    }
    
    private function _sign($param){
        ksort($param);

        $sign = $this->secretKey;
        foreach ($param as $k => $v){
            $sign .= "$k$v";
        }
        $sign .= $this->secretKey;

        return strtoupper(md5($sign));
    }
    
    private function _sendSms($param){
        $url = $this->gatewayUrl . "?" . http_build_query($param);
        $ch = curl_init();
        $timeout = 5;
        curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
        curl_setopt ($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
        curl_setopt ($ch, CURLOPT_URL, $url);
        curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
        $file_contents = curl_exec($ch);
        curl_close($ch);
        return $file_contents;
    }
    
    public function send($phone=''){
        if($phone!==''){
            $this->phone($phone);
        }
        $result = $this->_send();
        $json = json_decode($result,true);
        if($json!==null){
            foreach($json as $v){
                $json = $v;
            }
        }
        else{
            return ['status'=>0,'info'=>'返回内容解析错误','data'=>$result];
        }
        Log::record($json);
        if(!empty($json['code'])){
            $json['status'] = 0;
            $json['info'] = $json['sub_msg'];
            return $json;
        }
        else{
            $json['status'] = 1;
            $json['info']   = "发送成功";
            return $json;
        }

    }
    
    public function __construct(){
            $this->appkey(Config::get("sms.appkey"));
            $this->secret(Config::get("sms.secretKey"));
    }
    
    public function appkey($appKey=""){
        if($appKey) $this->appKey = $appKey;
        return $this;
    }
    
    public function secret($secretKey=""){
        if($secretKey) $this->secretKey = $secretKey;
        return $this;
    }
    
    public function sign($sign_name = ''){
        $this->sms_free_sign_name = $sign_name;
        return $this;
    }
    
    public function data($data = []){
        $this->sms_param = $data;
        return $this;
    }
    
    public function phone($phone=''){
        $this->rec_num = $phone;
        return $this;
    }
    
    public function code($code=''){
        $this->sms_template_code = $code;
        return $this;
    }
}
?>
最佳答案
评论( 相关
后面还有条评论,点击查看>>