<?php

namespace app\service;

class Kd100
{
    private static $url = 'http://poll.kuaidi100.com/poll/query.do';    //实时查询请求地址

    private static $key = 'bRIlFitN9883';//客户授权key
    private static $customer = '03A67821933221AAE6CBACBCA7E565F2';//查询公司编号

    public static function query(string $com, string $num, $returnArray = false)
    {
        $param = [
            'com' => $com,             //快递公司编码, 一律用小写字母
            'num' => $num,     //快递单号
            //            'phone' => '',                //手机号
            //            'from' => '',                 //出发地城市
            //            'to' => '',                   //目的地城市
            //            'resultv2' => '1'             //开启行政区域解析
        ];

        //请求参数
        $post_data             = [];
        $post_data["customer"] = self::$customer;
        $post_data["param"]    = json_encode($param);
        $sign                  = md5($post_data["param"].self::$key.$post_data["customer"]);
        $post_data["sign"]     = strtoupper($sign);

        $params = "";
        foreach ($post_data as $k => $v) {
            $params .= "$k=".urlencode($v)."&";              //默认UTF-8编码格式
        }
        $post_data = substr($params, 0, -1);

        //发送post请求
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_HEADER, 0);
        curl_setopt($ch, CURLOPT_URL, self::$url);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        $result = curl_exec($ch);
        return json_decode($result, $returnArray);
    }

    /**
     * 状态
     *
     * @return string[]
     */
    public static function state(): array
    {
        return [
            0  => '在途',
            1  => '揽收',
            2  => '疑难',
            3  => '签收',
            4  => '退签',
            5  => '派件',
            6  => '退回',
            7  => '转单',
            10 => '待清关',
            11 => '清关中',
            12 => '已清关',
            13 => '清关异常',
            14 => '收件人拒签',
        ];
    }

    /**
     * 不在继续查询的配送状态
     * @return int[]
     */
    public static function unSearchState(): array
    {
        return [3,4,12];
    }
}