简单实现阿里云短信接口,摆脱繁琐的SDK。

浏览:6561 发布日期:2017/05/08 分类:ThinkPHP5专区
<?php
namespace app\common\controller;

 class Sms 
 {
    const ACCESS_ID           = 'XXXXXXXXXX';
    const ACCESS_KEY         = 'XXXXXXXXXX';
    const END_POINT          = 'http://XXXXXXXXXX.mns.cn-shanghai.aliyuncs.com';
    const RESOURCE            = '/topics/sms.topic-cn-shanghai/messages';
    const TEMPLATE_CODE  = 'XXXXXXXXXX';
    const SIGN_NAME          = 'XXXXXXXXXX';
    const REQUEST_TYPE      = 'POST';

    protected $date;
    protected $cellphone;
    protected $code;

    //
    // __construct
    //
    public function __construct($cellphone, $code)
    {
        $this->cellphone = $cellphone;
        $this->code      = $code;
        $this->date      = gmdate("D, d M Y H:i:s \\G\\M\\T");
    }

    //
    // 设置header
    //
    private function setHeader()
    {
        return [
            "authorization:MNS " . self::ACCESS_ID . ":" . $this->generateSignature(),
            "content-type:text/xml",
            "date:" . $this->date,
            "x-mns-version:2015-06-06"
        ];
    }

    //
    // 生成签名
    //
    private function generateSignature() {
        $str  = self::REQUEST_TYPE . "\n";
        $str .= '' . "\n";
        $str .= 'text/xml' . "\n";
        $str .= $this->date . "\n";
        $str .= 'x-mns-version:2015-06-06' . "\n";
        $str .= self::RESOURCE;
        
        return base64_encode(hash_hmac('sha1', $str, self::ACCESS_KEY, true));
    }

    //
    // 生成待发送的xml
    //
    private function generateBody()
    {
        return "<?xml version=\"1.0\" encoding=\"utf-8\"?>
                <Message xmlns=\"http://mns.aliyuncs.com/doc/v1/\">
                <MessageBody>yema code</MessageBody>
                <MessageAttributes>
                <DirectSMS>
                {
                    \"FreeSignName\":\"".self::SIGN_NAME."\",
                    \"TemplateCode\":\"".self::TEMPLATE_CODE."\",
                    \"Type\":\"singleContent\",
                    \"Receiver\":\"".$this->cellphone."\",
                    \"SmsParams\":\"{\\\"name\\\":\\\"".$this->code."\\\"}\"    
                }
                </DirectSMS>
                </MessageAttributes>
                </Message>";
    }

    //
    // 发送短信
    //
    public function sendSms()
    {
        $curl = curl_init();
        curl_setopt_array($curl, [
            CURLOPT_URL            => self::END_POINT . self::RESOURCE,
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_ENCODING       => '',
            CURLOPT_MAXREDIRS      => 10,
            CURLOPT_TIMEOUT        => 30,
            CURLOPT_HTTP_VERSION   => CURL_HTTP_VERSION_1_1,
            CURLOPT_CUSTOMREQUEST  => self::REQUEST_TYPE,
            CURLOPT_POSTFIELDS     => $this->generateBody(),
            CURLOPT_HTTPHEADER     => $this->setHeader(),
        ]);
        $response = curl_exec($curl);
        $err      = curl_error($curl);
        curl_close($curl);

        return $err ? false : true;
    }

 }//class
最佳答案
评论( 相关
后面还有条评论,点击查看>>