<?php
namespace qx;
class Qx{
    public $AccessKey = 'U48c2jnr9901';
    public $AccessSecret = '291aa4f44536f2f6';
    public $url = 'http://openapi.qxwz.com';
    public function getSign($url,$time){
        $param = $this->convertUrlQuery($url);
        ksort($param);
        $paramStr = '';
        foreach ($param as $k => $v){
            $paramStr .= $k.$v;
        }
        $urlStr = str_replace($this->url,'',strstr($url,'?',true));
        $HexString = hash_hmac('sha256',$urlStr.$paramStr.$time,$this->AccessSecret);
        return $HexString;
    }
    
    public function postSign($url,$time,$param){
        ksort($param);
        $paramStr = '';
        foreach ($param as $k => $v){
            $paramStr .= $k.$v;
        }
        $urlStr = str_replace($this->url,'',$url);
        $HexString = hash_hmac('sha256',$urlStr.$paramStr.$time,$this->AccessSecret);
        return $HexString;
    }
    
    function convertUrlQuery($url)
    {
        $url = strstr($url,'?');
        $url = str_replace('?','',$url);
        $queryParts = explode('&', $url);
        $params = array();
        foreach ($queryParts as $param) {
        $item = explode('=', $param);
        $params[$item[0]] = $item[1];
        }
        return $params;
    }
    
    public function getMillisecond(){
        list($msec, $sec) = explode(' ', microtime());
        $msectime =  (float)sprintf('%.0f', (floatval($msec) + floatval($sec)) * 1000);
        return $msectimes = substr($msectime,0,13);
    }
    
    public function geturl($url){
        $time = $this->getMillisecond();
        $HexString = $this->getSign($url,$time);
        $url .= '&_sign='.$HexString;
        $headerArray =array("wz-acs-timestamp:$time");
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); 
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); 
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch,CURLOPT_HTTPHEADER,$headerArray);
        $output = curl_exec($ch);
        curl_close($ch);
        return $output;
    }
    
    function posturl($url,$data){
        $time = $this->getMillisecond();
        $HexString = $this->postSign($url,$time,$data);
        $url .= '?_sign='.$HexString;
        $headerArray =array("wz-acs-timestamp:$time");
        $curl = curl_init();
        curl_setopt($curl, CURLOPT_URL, $url);
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST,FALSE);
        curl_setopt($curl, CURLOPT_POST, 1);
        curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($data));
        curl_setopt($curl,CURLOPT_HTTPHEADER,$headerArray);
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
        $output = curl_exec($curl);
        curl_close($curl);
        return $output;
    }
}