EJiAoFei.php 6.6 KB
Newer Older
李光春's avatar
李光春 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86
<?php

namespace DtApp\ThinkLibrary\service\decent;

use DtApp\ThinkLibrary\exception\DtaException;
use DtApp\ThinkLibrary\facade\Xmls;
use DtApp\ThinkLibrary\Service;
use think\exception\HttpException;

/**
 * 缴费平台
 * Class EJiAoFei
 * @package DtApp\ThinkLibrary\service\decent
 */
class EJiAoFei extends Service
{
    /**
     * 待请求的链接
     * @var string
     */
    private $api, $method = '';

    /**
     * 由鼎信商务提供
     * @var
     */
    private $userid, $pwd, $key = '';

    /**
     * 需要发送的的参数
     * @var
     */
    private $param;

    /**
     * 响应内容
     * @var
     */
    private $output;

    /**
     * ip:端口
     * @param string $api
     * @return $this
     */
    public function api(string $api): self
    {
        $this->api = $api;
        return $this;
    }

    /**
     * 由鼎信商务提供
     * @param string $userid
     * @return $this
     */
    public function userid(string $userid): self
    {
        $this->userid = $userid;
        return $this;
    }

    /**
     * 由鼎信商务提供
     * @param string $pwd
     * @return $this
     */
    public function pwd(string $pwd): self
    {
        $this->pwd = $pwd;
        return $this;
    }

    /**
     * 由鼎信商务提供
     * @param string $key
     * @return $this
     */
    public function key(string $key): self
    {
        $this->key = $key;
        return $this;
    }

    /**
     * 话费充值
87 88 89 90
     * @param string $orderid 用户提交的订单号    用户提交的订单号,最长32位(用户保证其唯一性)
     * @param int $face 充值面值    以元为单位,包含10、20、30、50、100、200、300、500 移动联通电信
     * @param string $account 手机号码    需要充值的手机号码
     * @param int $amount 购买数量    只能为1
李光春's avatar
李光春 已提交
91 92
     * @return $this
     */
93
    public function chongZhi(string $orderid, int $face, string $account, int $amount = 1): self
李光春's avatar
李光春 已提交
94 95
    {
        $this->method = 'chongzhi_jkorders';
96
        $this->param = "userid={$this->userid}&pwd={$this->pwd}&orderid={$orderid}&account={$account}&face={$face}&amount={$amount}";
李光春's avatar
李光春 已提交
97 98 99 100 101
        return $this;
    }

    /**
     * 通用查询
102
     * @param string $orderid 用户提交的订单号    用户提交的订单号,最长32位(用户保证其唯一性)
李光春's avatar
李光春 已提交
103 104
     * @return $this
     */
105
    public function query(string $orderid): self
李光春's avatar
李光春 已提交
106 107
    {
        $this->method = 'query_jkorders';
108
        $this->param = "userid={$this->userid}&pwd={$this->pwd}&orderid={$orderid}";
李光春's avatar
李光春 已提交
109 110 111 112 113 114 115 116 117 118
        return $this;
    }

    /**
     * 用户余额查询
     * @return $this
     */
    public function money(): self
    {
        $this->method = 'money_jkuser';
119
        $this->param = "userid={$this->userid}&pwd={$this->pwd}";
李光春's avatar
李光春 已提交
120 121 122 123 124
        return $this;
    }

    /**
     * 腾讯充值
125 126 127 128 129 130
     * @param string $orderid 用户提交的订单号    用户提交的订单号,最长32位(用户保证其唯一性)
     * @param string $account QQ号    需要充值的QQ号
     * @param int $productid 产品id    可以通过queryTXproduct查询
     * @param int $amount 购买数量
     * @param string $ip 充值QQ号ip    可以为空
     * @param string $times 时间戳    格式:yyyyMMddhhmmss
李光春's avatar
李光春 已提交
131 132
     * @return $this
     */
133
    public function txchongzhi(string $orderid, string $account, int $productid, int $amount, string $ip, string $times): self
李光春's avatar
李光春 已提交
134 135
    {
        $this->method = 'txchongzhi';
136
        $this->param = "userid={$this->userid}&pwd={$this->pwd}&orderid={$orderid}&account={$account}&productid={$productid}&amount={$amount}&ip={$ip}&times={$times}";
李光春's avatar
李光春 已提交
137 138 139 140 141 142 143 144 145 146
        return $this;
    }

    /**
     * 可充值腾讯产品查询
     * @return $this
     */
    public function queryTXproduct(): self
    {
        $this->method = 'queryTXproduct';
147
        $this->param = "userid={$this->userid}&pwd={$this->pwd}";
李光春's avatar
李光春 已提交
148 149 150 151 152
        return $this;
    }

    /**
     * 流量充值
153 154 155 156 157 158 159
     * @param string $orderid 用户提交的订单号    用户提交的订单号,最长32位(用户保证其唯一性)
     * @param string $account 充值手机号    需要充值的手机号
     * @param int $gprs 充值流量值    单位:MB(具体流量值请咨询商务)
     * @param int $area 充值流量范围    0 全国流量,1 省内流量
     * @param int $effecttime 生效日期    0 即时生效,1次日生效,2 次月生效
     * @param int $validity 流量有效期    传入月数,0为当月有效
     * @param string $times 时间戳    格式:yyyyMMddhhmmss
李光春's avatar
李光春 已提交
160 161
     * @return $this
     */
162
    public function gprsChongzhiAdvance(string $orderid, string $account, int $gprs, int $area, int $effecttime, int $validity, string $times): self
李光春's avatar
李光春 已提交
163
    {
李光春's avatar
李光春 已提交
164
        $this->method = 'gprsChongzhiAdvance';
165
        $this->param = "userid={$this->userid}&pwd={$this->pwd}&orderid={$orderid}&account={$account}&gprs={$gprs}&area={$area}&effecttime={$effecttime}&validity={$validity}&times={$times}";
李光春's avatar
李光春 已提交
166 167 168 169 170
        return $this;
    }

    /**
     * 会员订单成本价查询
171
     * @param string $orderid 用户订单号    用户提交订单号
李光春's avatar
李光春 已提交
172 173
     * @return $this
     */
174
    public function checkCost(string $orderid): self
李光春's avatar
李光春 已提交
175 176
    {
        $this->method = 'checkCost';
177
        $this->param = "userid={$this->userid}&pwd={$this->pwd}&orderid={$orderid}";
李光春's avatar
李光春 已提交
178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196
        return $this;
    }

    /**
     * @throws DtaException
     */
    public function toArray()
    {
        //首先检测是否支持curl
        if (!extension_loaded("curl")) {
            throw new HttpException(404, '请开启curl模块!');
        }
        if (empty($this->api)) {
            throw new DtaException('请检查api参数');
        }
        $this->http();
        // 正常
        if (is_array($this->output)) {
            return $this->output;
197
        }
李光春's avatar
李光春 已提交
198 199 200 201 202 203 204 205 206 207 208 209 210 211 212
        if (is_object($this->output)) {
            $this->output = json_encode($this->output, JSON_UNESCAPED_UNICODE);
        }
        $this->output = json_decode($this->output, true);
        return $this->output;
    }

    /**
     * 网络请求
     */
    private function http(): void
    {
        //生成签名
        $sign = $this->createSign();
        //组织参数
213 214
        $this->param .= '&userkey=' . $sign;
        $url = "http://" . $this->api . "/" . $this->method . ".do?{$this->param}";
李光春's avatar
李光春 已提交
215 216 217 218 219 220 221 222 223 224 225
        $result = file_get_contents($url);
        $result = Xmls::toArray($result);
        $this->output = $result;
    }

    /**
     * 签名
     * @return string
     */
    private function createSign(): string
    {
226
        $sign = str_replace(array("&", "="), array("", ""), $this->param);
李光春's avatar
李光春 已提交
227 228 229 230 231
        $sign .= $this->key;
        $sign = strtoupper(md5($sign));
        return $sign;
    }
}