<?php
/**
 * 短信接口请求demo示例
 */
// 使用接口网关地址替换  http://sms.ue35.net/sms

// 短信批量发送接口
// http://sms.ue35.net/sms/api/sendMessageMass

// 短信一对一发送接口
// http://sms.ue35.net/sms/api/sendMessageOne

// 回执状态获取接口
// http://sms.ue35.net/sms/api/getReport

// 上行回复获取接口
// http://sms.ue35.net/sms/api/getUpstream

// 查询余额接口
// http://sms.ue35.net/sms/api/getBalance

// 提交短信模板接口
// http://sms.ue35.net/sms/api/createTemplate

// 查询短信模板接口
// http://sms.ue35.net/sms/api/queryTemplates

// 报备签名接口
// http://sms.ue35.net/sms/api/addSignature

// 查询签名接口
// http://sms.ue35.net/sms/api/querySignature

$userName = strval("xxx"); //帐号用户名
$password = strval("xxx"); //帐号接口密码，跟登录密码不一样
$address = strval("http://sms.ue35.net/sms"); //接口网关地址,例如  http://127.0.0.1:8001/sms

// sendMessageMass($userName, $password, $address); //短信发送接口
// sendMessageOne($userName, $password, $address); //个性发送接口
// getReport($userName, $password, $address); //获取回执接口
// getUpstream($userName, $password, $address); //获取上行接口
// getBalance($userName, $password, $address); //获取余额接口
// createTemplate($userName, $password, $address); //添加模板接口
// queryTemplates($userName, $password, $address); //查询模板接口
// addSignature($userName, $password, $address); //报备签名接口
// querySignature($userName, $password, $address); //查询签名接口

/**
 * 帐号认证信息
 */
function getSign($userName, $password)
{
    //时间戳
    list($msec, $sec) = explode(' ', microtime());
    $timestamp = (float) sprintf('%.0f', (floatval($msec) + floatval($sec)) * 1000);
    //sign鉴权
    $sign = md5($userName . strval($timestamp) . md5($password));

    $jsonData = array();
    $jsonData["userName"] = $userName;
    $jsonData["timestamp"] = $timestamp;
    $jsonData["sign"] = $sign;

    return $jsonData;
}

/**
 * 短信批量发送接口
 */
function sendMessageMass($userName, $password, $address)
{
    $url = "http://address:port/sms/api/sendMessageMass";
    $url = str_replace("http://address:port/sms", $address, $url);

    $content = strval("【小黑科技】红红火火恍恍惚惚");

    #发送手机号码，最大数量不得超过 10000 个号码，系统将自动去除重复号码
    $phones = array("18278810020", "13457856748", "18648794564");

    //每次发送10000个号码
    $size = 10000;
    $length = count($phones);
    $index = ceil($length / $size);
    $r = $length % $size;
    $phoneList = array();
    for ($i = 0; $i < $index; $i++) {

        if ($r > 0 && $i == $index - 1) {
            $phoneList = array_slice($phones, $i * $size, $r);
        } else {
            $phoneList = array_slice($phones, $i * $size, $size);
        }
        $jsonData = getSign($userName, $password);
        $jsonData["content"] = $content;
        $jsonData["phoneList"] = $phoneList;

        // 发送请求
        post($url, $jsonData);
    }

}
/**
 * 短信一对一发送接口
 */
function sendMessageOne($userName, $password, $address)
{
    $url = "http://address:port/sms/api/sendMessageOne";
    $url = str_replace("http://address:port/sms", $address, $url);

    $content = "【飞飞科技】您的验证码是{%变量%}";

    # 数组形式，每个 JSON 对象包含短信内容和号码数据，最大 1000 个号码。
    $size = 2000;
    $phoneList = array("13457856748", "13457856749", "13457856750");
    $messageList = array();
    $jsons = array();
    for ($i = 0; $i < count($phoneList); $i++) {
        $msg = array();
        $msg["phone"] = $phoneList[$i];
        $msg["content"] = str_replace("{%变量%}", $content, rand(100000, 999999));
        array_push($messageList, $msg);
        if ($i > 0 && ($i + 1) % $size == 0) {
            $jsons = getSign($userName, $password); // 帐号认证信息，五分钟内有效，防止过期
            $jsons["messageList"] = $messageList;
            // 发送请求数据
            post($url, $jsons);

            // 初始化列表空数据
            $messageList = array();
        }

    }
    // 如果最后的还没发完，那在再处理一次
    if (count($messageList) > 0) {
        $jsons = getSign($userName, $password); // 帐号认证信息，五分钟内有效，防止过期
        $jsons["messageList"] = $messageList;
        // 发送请求数据
        post($url, $jsons);
    }

}
/**
 * 回执状态获取接口
 */
function getReport($userName, $password, $address)
{
    $jsonData = getSign($userName, $password);

    $url = "http://address:port/sms/api/getReport";
    $url = str_replace("http://address:port/sms", $address, $url);
    post($url, $jsonData);

}
/**
 * 上行回复获取接口 
 */
function getUpstream($userName, $password, $address)
{
    $jsonData = getSign($userName, $password);

    $url = "http://address:port/sms/api/getUpstream";
    $url = str_replace("http://address:port/sms", $address, $url);
    post($url, $jsonData);

}
/**
 * 查询余额接口
 */
function getBalance($userName, $password, $address)
{
    $jsonData = getSign($userName, $password);

    $url = "http://address:port/sms/api/getBalance";
    $url = str_replace("http://address:port/sms", $address, $url);
    post($url, $jsonData);
}

/**
 * 提交短信模板接口
 */
function createTemplate($userName, $password, $address)
{
    //变量部分统一用 {%变量%}  代替
    $content = "【小黑科技】验证码{%变量%}";

    $jsons = getSign($userName, $password);
    $jsons["content"] = $content;

    $url = "http://address:port/sms/api/createTemplate";
    $url = str_replace("http://address:port/sms", $address, $url);
    post($url, $jsons);
}

/**
 * 查询短信模板接口
 */
function queryTemplates($userName, $password, $address)
{
    $jsonData = getSign($userName, $password);

    $url = "http://address:port/sms/api/queryTemplates";
    $url = str_replace("http://address:port/sms", $address, $url);
    post($url, $jsonData);
}

/**
 * 报备签名接口
 */
function addSignature($userName, $password, $address)
{
    $jsons = getSign($userName, $password); // 帐号认证信息，五分钟内有效，防止过期
    $jsons["signatureList"] = array("【时尚家居】", "【小酒科技】");

    $url = "http://address:port/sms/api/addSignature";
    $url = str_replace("http://address:port/sms", $address, $url);
    post($url, $jsons);
}

/**
 * 查询签名接口
 */
function querySignature($userName, $password, $address)
{
    $jsonData = getSign($userName, $password);

    $url = "http://address:port/sms/api/querySignature";
    $url = str_replace("http://address:port/sms", $address, $url);
    post($url, $jsonData);
}

/**
 * 发送请求
 */
function post($url, $jsonData)
{
    $jsonStr = json_encode($jsonData, 256);

    echo "请求地址： $url<br/>";
    echo "请求参数： $jsonStr<br/>";

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonStr);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt(
        $ch,
        CURLOPT_HTTPHEADER,
        array(
            'Content-Type: application/json; charset=utf-8',
            'Content-Length: ' . strlen($jsonStr)
        )
    );
    $response = curl_exec($ch);
    $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch);

    echo "请求结果： $response<br/><br/>";
}

?>