阿里大鱼短信类封装

直接贴代码咯

<?php

class Alidayu {

    use Http;

    protected static $instance;

    protected $accessKeyId;

    protected $accessKeySecret;

    private function __construct($accessKeyId, $accessKeySecret)
    {
        $this->accessKeyId = $accessKeyId;
        $this->accessKeySecret = $accessKeySecret;
    }

    /**
     * @param $accessKeyId
     * @param $accessKeySecret
     * @return self
     */
    public static function getInstance($accessKeyId, $accessKeySecret)
    {
        $key = 'accessKeyId:' . $accessKeyId;
        if (!isset(self::$instance[$key])) {
            self::$instance[$key] = new static($accessKeyId, $accessKeySecret);
        }

        return self::$instance[$key];
    }

    /**
     * 对外发送短信方法
     * @param $phone string|array 接收短信号码
     * @param $signName string 签名
     * @param $templateCode string 模板名称
     * @param array $params 参数
     * @param string $outId 外部标识 可选
     * @return mixed
     */
    public function send($phone, $signName, $templateCode, $params = [], $outId = '')
    {
        return $this->_send($phone, $signName, $templateCode, $params, $outId);
    }

    /**
     * 发送短信
     * @param $phone
     * @param $signName
     * @param $templateCode
     * @param array $params
     * @param string $outId
     * @return mixed
     */
    private function _send($phone, $signName, $templateCode, $params = [], $outId = '')
    {

        is_array($phone) && $phone = implode(',', $phone);

        $data = [
            'PhoneNumbers' => $phone,
            'SignName' => $signName,
            'TemplateCode' => $templateCode,
            'TemplateParam' => json_encode($params, JSON_UNESCAPED_UNICODE),
            'Action' => 'SendSms',
            'Version' => '2017-05-25',
            'RegionID' => 'cn-hangzhou',
            'AccessKeyId' => $this->accessKeyId,
            'Timestamp' => gmdate('Y-m-d\TH:i:s\Z'),
            'Format' => 'JSON',
            'SignatureMethod' => 'HMAC-SHA1',
            'SignatureVersion' => '1.0',
            'SignatureNonce' => uniqid(),
        ];

        if ($outId) {
            $data['OutId'] = $outId;
        }

        $data['Signature'] = $this->_getSign($data);

        return $this->getRequest('http://dysmsapi.aliyuncs.com/', $data);

    }

    /**
     * 获取签名
     * @param array $params
     * @return string
     */
    private function _getSign(array $params = [])
    {
        ksort($params);

        $paramsString = urlencode(http_build_query($params));

        $paramsString = str_replace(['+', '*', '%7E', '%2B'], ['%20', '%2A', '~', '%2520'], $paramsString);

        $paramsString = 'GET&%2F&' . $paramsString;

        return base64_encode(hash_hmac('sha1', $paramsString, $this->accessKeySecret . '&', true));

    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值