| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147 |
- <?php
- include_once(__DIR__."/error.inc.php");
- class HttpUtils
- {
- //
- // public:
- //
- static public function MakeUrl($queryArgs)
- {
- $base = "https://qyapi.weixin.qq.com";
- if (substr($queryArgs, 0, 1) === "/")
- return $base . $queryArgs;
- return $base . "/" . $queryArgs;
- }
- static public function Array2Json($arr)
- {
- $parts = array ();
- $is_list = false;
- $keys = array_keys ( $arr );
- $max_length = count ( $arr ) - 1;
- if (($keys [0] === 0) && ($keys [$max_length] === $max_length )) {
- $is_list = true;
- for($i = 0; $i < count ( $keys ); $i ++) {
- if ($i != $keys [$i]) {
- $is_list = false;
- break;
- }
- }
- }
- foreach ( $arr as $key => $value ) {
- if (is_array ( $value )) {
- if ($is_list)
- $parts [] = self::array2Json ( $value );
- else
- $parts [] = '"' . $key . '":' . self::array2Json ( $value );
- } else {
- $str = '';
- if (! $is_list)
- $str = '"' . $key . '":';
- if (!is_string ( $value ) && is_numeric ( $value ) && $value<2000000000)
- $str .= $value;
- elseif ($value === false)
- $str .= 'false';
- elseif ($value === true)
- $str .= 'true';
- else
- $str .= '"' .addcslashes($value, "\\\"\n\r\t/"). '"';
- $parts[] = $str;
- }
- }
- $json = implode ( ',', $parts );
- if ($is_list)
- return '[' . $json . ']';
- return '{' . $json . '}';
- }
- /**
- * http get
- * @param string $url
- * @return http response body
- */
- static public function httpGet($url)
- {
- $config = require(__DIR__.'./../config.php');
- if (true == $config['DEBUG']) {
- echo $url . "\n";
- }
- self::__checkDeps();
- $ch = curl_init();
- self::__setSSLOpts($ch, $url);
- curl_setopt($ch, CURLOPT_URL, $url);
- curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
- return self::__exec($ch);
- }
- /**
- * http post
- * @param string $url
- * @param string or dict $postData
- * @return http response body
- */
- static public function httpPost($url, $postData)
- {
- $config = require(__DIR__.'./../config.php');
- if (true == $config['DEBUG']) {
- echo $url . " -d $postData\n";
- }
- self::__checkDeps();
- $ch = curl_init();
- self::__setSSLOpts($ch, $url);
- curl_setopt($ch, CURLOPT_URL, $url);
- curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
- curl_setopt($ch, CURLOPT_POST, true);
- curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
-
- return self::__exec($ch);
- }
- //
- // private:
- //
- static private function __setSSLOpts($ch, $url)
- {
- if (stripos($url,"https://") !== false) {
- curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
- curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
- curl_setopt($ch, CURLOPT_SSLVERSION, 1);
- }
- }
- static private function __exec($ch)
- {
- $output = curl_exec($ch);
- $status = curl_getinfo($ch);
- curl_close($ch);
- if ($output === false) {
- throw new NetWorkError("network error");
- }
-
- if (intval($status["http_code"]) != 200) {
- throw new HttpError(
- "unexpected http code ". intval($status["http_code"]));
- }
- return $output;
- }
- static private function __checkDeps()
- {
- if (!function_exists("curl_init")) {
- throw new InternalError("missing curl extend");
- }
- }
- }
|