123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159 |
- <?php
- class refill_proxy
- {
- private $mKey;
- public function __construct($key)
- {
- $this->mKey = $key;
- }
- public function send($url,$params)
- {
- $body = $this->body($params);
- $body .= "&key={$this->mKey}";
- $params['sign'] = md5($body);
- $resp = $this->http_request($url,$params,'POST');
- Log::record("resp={$resp}",Log::DEBUG);
- if(empty($resp)) {
- return [false,'网络错误'];
- }
- $resp = json_decode($resp,true);
- $code = $resp['code'];
- if(empty($resp)) {
- return [false,'网络错误'];
- }
- elseif($code == 200) {
- return [$code,$resp['datas']];
- }
- else {
- return [$code,$resp['message']];
- }
- }
- public function notify($params)
- {
- unset($params['mchname']);
- if(!$this->verify($this->mKey,$params)) {
- return [false,'签名错误'];
- }
- else {
- return [true,$params];
- }
- }
- private function verify($key,$input)
- {
- $sign = $input['sign'];
- unset($input['sign']);
- $body = $this->body($input);
- $body .= "&key={$key}";
- return ($sign == md5($body));
- }
- protected function check_empty($value)
- {
- if (!isset($value))
- return true;
- if ($value === null)
- return true;
- if (trim($value) === "")
- return true;
- return false;
- }
- private function body($params)
- {
- ksort($params);
- $body = "";
- $i = 0;
- foreach ($params as $k => $v)
- {
- if (false === $this->check_empty($v) && "@" != substr($v, 0, 1))
- {
- if ($i == 0) {
- $body .= "{$k}" . "=" . urlencode($v);
- } else {
- $body .= "&" . "{$k}" . "=" . urlencode($v);
- }
- $i++;
- }
- }
- return $body;
- }
- private function http_request($url, $params = array(), $method = 'GET', $multi = false, $extheaders = array())
- {
- if (!function_exists('curl_init')) {
- return false;
- }
- $method = strtoupper($method);
- $ci = curl_init();
- curl_setopt($ci, CURLOPT_USERAGENT, 'PHP-SDK OAuth2.0');
- curl_setopt($ci, CURLOPT_RETURNTRANSFER, true);
- curl_setopt($ci, CURLOPT_SSL_VERIFYPEER, false);
- curl_setopt($ci, CURLOPT_SSL_VERIFYHOST, false);
- curl_setopt($ci, CURLOPT_HEADER, false);
- curl_setopt($ci, CURLOPT_CONNECTTIMEOUT, 60);
- curl_setopt($ci, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);
- curl_setopt($ci, CURLOPT_FOLLOWLOCATION, true);
- $headers = (array) $extheaders;
- switch ($method)
- {
- case 'POST':
- curl_setopt($ci, CURLOPT_POST, TRUE);
- if (!empty($params))
- {
- if ($multi)
- {
- foreach ($multi as $key => $file) {
- $params[$key] = '@' . $file;
- }
- curl_setopt($ci, CURLOPT_POSTFIELDS, $params);
- $headers[] = 'Expect: ';
- }
- else {
- curl_setopt($ci, CURLOPT_POSTFIELDS, http_build_query($params));
- }
- }
- break;
- case 'DELETE':
- case 'GET':
- if($method == 'DELETE') {
- curl_setopt($ci, CURLOPT_CUSTOMREQUEST, 'DELETE');
- }
- if (!empty($params)) {
- $url = $url . (strpos($url, '?') ? '&' : '?') . (is_array($params) ? http_build_query($params) : $params);
- }
- break;
- }
- curl_setopt($ci, CURLINFO_HEADER_OUT, TRUE);
- curl_setopt($ci, CURLOPT_URL, $url);
- if ($headers) {
- curl_setopt($ci, CURLOPT_HTTPHEADER, $headers);
- }
- $response = curl_exec($ci);
- if($response == false) {
- $err = curl_error($ci);
- Log::record("http_request err={$err}",Log::ERR);
- }
- curl_close($ci);
- return $response;
- }
- }
|