<?php

namespace App\Services;

class ChuanglanSmsService
{

    //参数的配置 请登录zz.253.com 获取以下API信息 ↓↓↓↓↓↓↓

    public const API_VARIABLE_URL = 'https://smssh1.253.com/msg/variable/json';//创蓝变量短信接口URL

    public const API_BALANCE_QUERY_URL = 'https://smssh1.253.com/msg/balance/json';//创蓝短信余额查询接口URL

    private $account; // 创蓝API账号

    private $password;// 创蓝API密码

    private $api_send_url; //创蓝发送短信接口URL


    public function __construct($config)
    {
        $this->account = $config['account'];
        $this->password = $config['password'];
        $this->api_send_url = $config['send_url'];
    }


    /**
     * 发送短信
     *
     * @param  string  $mobile  手机号码
     * @param  string  $msg  短信内容
     * @param  string  $need_status  是否需要状态报告
     * @return mixed
     */
    public function sendSMS($mobile, $msg, $need_status = 'true')
    {
        //创蓝接口参数
        $postArr = array(
            'account' => $this->account,
            'password' => $this->password,
            'msg' => urlencode($msg),
            'phone' => $mobile,
            'report' => $need_status,
        );
        $result = $this->curlPost($this->api_send_url, $postArr);

        return $result;
    }

    /**
     * 发送变量短信
     *
     * @param  string  $msg  短信内容
     * @param  string  $params  最多不能超过1000个参数组
     * @return mixed
     */
    public function sendVariableSMS($msg, $params)
    {
        //创蓝接口参数
        $postArr = array(
            'account' => $this->account,
            'password' => $this->password,
            'msg' => $msg,
            'params' => $params,
            'report' => 'true',
        );

        $result = $this->curlPost(self::API_VARIABLE_URL, $postArr);

        return $result;
    }

    /**
     * 查询额度
     *
     */
    public function queryBalance()
    {
        //查询参数
        $postArr = array(
            'account' => $this->account,
            'password' => $this->password,
        );
        $result = $this->curlPost(self::API_BALANCE_QUERY_URL, $postArr);

        return $result;
    }


    /**
     * 通过CURL发送HTTP请求
     * @param  string  $url  //请求URL
     * @param  array  $postFields  //请求参数
     * @return mixed
     */
    private function curlPost($url, $postFields)
    {
        $postFields = json_encode($postFields);

        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_HTTPHEADER, array(
            'Content-Type: application/json; charset=utf-8'   //json版本需要填写  Content-Type: application/json;
        ));
        curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $postFields);
        curl_setopt($ch, CURLOPT_TIMEOUT, 60);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
        $ret = curl_exec($ch);
        if (false == $ret) {
            $result = curl_error($ch);
        } else {
            $rsp = curl_getinfo($ch, CURLINFO_HTTP_CODE);
            if (200 != $rsp) {
                $result = "请求状态 " . $rsp . " " . curl_error($ch);
            } else {
                $result = $ret;
            }
        }
        curl_close($ch);

        return json_decode($result, true);
    }
}
