Example #1
0
 public function api($script_name, $params, $method = 'post', $protocol = 'http')
 {
     if (!isset($params['openid']) || empty($params['openid'])) {
         return array('ret' => OPENAPI_ERROR_REQUIRED_PARAMETER_EMPTY, 'msg' => 'openid is empty');
     }
     if (!isset($params['openkey']) || empty($params['openkey'])) {
         return array('ret' => OPENAPI_ERROR_REQUIRED_PARAMETER_EMPTY, 'msg' => 'openkey is empty');
     }
     if (!self::isOpenId($params['openid'])) {
         return array('ret' => OPENAPI_ERROR_REQUIRED_PARAMETER_INVALID, 'msg' => 'openid is invalid');
     }
     unset($params['sig']);
     $params['appid'] = $this->appid;
     $params['format'] = $this->format;
     $secret = $this->appkey . '&';
     $sig = SnsSigCheck::makeSig($method, $script_name, $params, $secret);
     $params['sig'] = $sig;
     $url = $protocol . '://' . $this->server_name . $script_name;
     $cookie = array();
     $start_time = SnsStat::getTime();
     $ret = SnsNetwork::makeRequest($url, $params, $cookie, $method, $protocol);
     if (false === $ret['result']) {
         $result_array = array('ret' => OPENAPI_ERROR_CURL + $ret['errno'], 'msg' => $ret['msg']);
     }
     $result_array = json_decode($ret['msg'], true);
     if (is_null($result_array)) {
         $result_array = array('ret' => OPENAPI_ERROR_RESPONSE_DATA_INVALID, 'msg' => $ret['msg']);
     }
     if ($this->is_stat) {
         $stat_params = array('appid' => $this->appid, 'pf' => $params['pf'], 'rc' => $result_array['ret'], 'svr_name' => $this->server_name, 'interface' => $script_name, 'protocol' => $protocol, 'method' => $method);
         SnsStat::statReport($this->stat_url, $start_time, $stat_params);
     }
     return $result_array;
 }
Example #2
0
 /**
  * 执行API调用,返回结果数组
  *
  * @param array $script_name 调用的API方法
  * @param array $params 调用API时带的参数
  * @param string $method 请求方法 post / get
  * @param string $protocol 协议类型 http / https
  * @return array 结果数组
  */
 public function api($script_name, $params, $method = 'post', $protocol = 'http')
 {
     // 检查 openid 是否为空
     if (!isset($params['openid']) || empty($params['openid'])) {
         return array('ret' => PYO_ERROR_REQUIRED_PARAMETER_EMPTY, 'msg' => 'openid is empty');
     }
     // 检查 openkey 是否为空
     if (!isset($params['openkey']) || empty($params['openkey'])) {
         return array('ret' => PYO_ERROR_REQUIRED_PARAMETER_EMPTY, 'msg' => 'openkey is empty');
     }
     // 检查 openid 是否合法
     if (!self::isOpenId($params['openid'])) {
         return array('ret' => PYO_ERROR_REQUIRED_PARAMETER_INVALID, 'msg' => 'openid is invalid');
     }
     // 无需传sig, 会自动生成
     unset($params['sig']);
     // 添加一些参数
     $params['appid'] = $this->appid;
     $params['format'] = $this->format;
     // 生成签名
     $secret = $this->appkey . '&';
     $sig = SnsSigCheck::makeSig('post', $script_name, $params, $secret);
     $params['sig'] = $sig;
     // 发起请求
     $url = "{$protocol}://{$this->server_name}{$script_name}";
     $cookie = array();
     $ret = SnsNetwork::makeRequest($url, $params, $cookie, $method, $protocol);
     if (false === $ret['result']) {
         return array('ret' => PYO_ERROR_CURL + $ret['errno'], 'msg' => $ret['msg']);
     }
     $result_array = json_decode($ret['msg'], true);
     // 远程返回的不是 json 格式, 说明返回包有问题
     if (is_null($result_array)) {
         return array('ret' => PYO_ERROR_RESPONSE_DATA_INVALID, 'msg' => $ret['msg']);
     }
     return $result_array;
 }
Example #3
0
 /**
  * 执行API调用,返回结果数组
  *
  * @param string $script_name 调用的API方法,比如/v3/user/get_info,参考 http://wiki.open.qq.com/wiki/API_V3.0%E6%96%87%E6%A1%A3
  * @param array $params 调用API时带的参数
  * @param string $method 请求方法 post / get
  * @param string $protocol 协议类型 http / https
  * @return array 结果数组
  */
 public function api($script_name, $params, $method = 'post', $protocol = 'http')
 {
     // 检查 openid 是否为空
     if (!isset($params['openid']) || empty($params['openid'])) {
         return array('ret' => OPENAPI_ERROR_REQUIRED_PARAMETER_EMPTY, 'msg' => 'openid is empty');
     }
     // 检查 openid 是否合法
     if (!self::isOpenId($params['openid'])) {
         return array('ret' => OPENAPI_ERROR_REQUIRED_PARAMETER_INVALID, 'msg' => 'openid is invalid');
     }
     // 无需传sig, 会自动生成
     unset($params['sig']);
     // 添加一些参数
     $params['appid'] = $this->appid;
     $params['format'] = $this->format;
     // 生成签名
     $secret = $this->appkey . '&';
     $sig = SnsSigCheck::makeSig($method, $script_name, $params, $secret);
     $params['sig'] = $sig;
     $url = $protocol . '://' . $this->server_name . $script_name;
     $cookie = array();
     //记录接口调用开始时间
     $start_time = SnsStat::getTime();
     //通过调用以下方法,可以打印出最终发送到openapi服务器的请求参数以及url,默认为注释
     //self::printRequest($url,$params,$method);
     // 发起请求
     $ret = SnsNetwork::makeRequest($url, $params, $cookie, $method, $protocol);
     if (false === $ret['result']) {
         $result_array = array('ret' => OPENAPI_ERROR_CURL + $ret['errno'], 'msg' => $ret['msg']);
     }
     $result_array = json_decode($ret['msg'], true);
     // 远程返回的不是 json 格式, 说明返回包有问题
     if (is_null($result_array)) {
         $result_array = array('ret' => OPENAPI_ERROR_RESPONSE_DATA_INVALID, 'msg' => $ret['msg']);
     }
     // 统计上报
     if ($this->is_stat) {
         $stat_params = array('appid' => $this->appid, 'pf' => $params['pf'], 'rc' => $result_array['ret'], 'svr_name' => $this->server_name, 'interface' => $script_name, 'protocol' => $protocol, 'method' => $method);
         SnsStat::statReport($this->stat_url, $start_time, $stat_params);
     }
     //通过调用以下方法,可以打印出调用openapi请求的返回码以及错误信息,默认注释
     //self::printRespond($result_array);
     return $result_array;
 }
Example #4
0
 public function api_pay($script_name, $params, $cookie, $method = 'post', $protocol = 'http')
 {
     // 添加一些参数
     $params['appid'] = $this->pay_appid;
     $params['format'] = $this->format;
     // 无需传sig, 会自动生成
     unset($params['sig']);
     // 生成签名
     $secret = $this->pay_appkey . '&';
     $sig = SnsSigCheck::makeSig($method, $script_name, $params, $secret);
     $params['sig'] = $sig;
     $url = $protocol . '://' . $this->server_name . $script_name;
     // 通过调用以下方法,可以打印出最终发送到openapi服务器的请求参数以及url,默认为注释
     self::printCookies($cookie);
     self::printRequest($url, $params, $method);
     // 发起请求
     $ret = SnsNetwork::makeRequest($url, $params, $cookie, $method, $protocol);
     if (false === $ret['result']) {
         $result_array = array('ret' => OPENAPI_ERROR_CURL + $ret['errno'], 'msg' => $ret['msg']);
     }
     $result_array = json_decode($ret['msg'], true);
     // 远程返回的不是 json 格式, 说明返回包有问题
     if (is_null($result_array)) {
         $result_array = array('ret' => OPENAPI_ERROR_RESPONSE_DATA_INVALID, 'msg' => $ret['msg']);
     }
     // 通过调用以下方法,可以打印出调用支付API请求的返回码以及错误信息,默认注释
     self::printRespond($result_array);
     return $result_array;
 }
Example #5
0
$appid = APPID;
$secret = APP_SECRET;
if ($_REQUEST['web']) {
    $appid = APPID_PC;
    $secret = APP_SECRET_PC;
}
$params = "appid={$appid}&secret={$secret}&code={$code}&grant_type=authorization_code";
$line = SnsNetwork::makeRequest('https://api.weixin.qq.com/sns/oauth2/access_token', $params, '', 'get', 'https');
if (!$line['result']) {
    // 访问失败了
    echo json_encode(array("error" => "访问失败"));
    die;
}
$token = json_decode($line['msg'], true);
if ($token['errmsg']) {
    // 换取code失败
    echo json_encode(array("error" => $token['errmsg']));
    die;
}
// 成功获取到了,记录到session中
session_start();
$token['expires'] = time() + $token['expires_in'] - 15 * 60;
$_SESSION['access_token'] = $token;
// 拉取用户信息
$access_token = $token['access_token'];
$openid = $token['openid'];
$params = "access_token={$access_token}&openid={$openid}&lang=zh_CN";
$line = SnsNetwork::makeRequest('https://api.weixin.qq.com/sns/userinfo', $params, '', 'get', 'https');
echo json_encode(array("openid" => $token['openid'], "unionid" => $token['unionid'], "userinfo" => json_decode($line['msg'], true)));
// 调用具体的业务逻辑处理, 传入用户参数
after_login($token['openid'], json_decode($line['msg'], true));
Example #6
0
 /**
  * 请求网关
  * @param unknown_type $url
  * @param unknown_type $params
  * @param unknown_type $method
  * @param unknown_type $protocol
  */
 private static function makeRequst($url, $params, $method = 'post', $protocol = 'http')
 {
     $ret = SnsNetwork::makeRequest($url, $params, array(), $method);
     //		$param_url = $url.'?';
     //		foreach ($params as $key => $value ) {
     //			$param_url .= $key . "=" . $value . "&";
     //		}
     //		if (strtolower('Success') == strtolower($ret['msg']))
     //		{
     //			logManageSucInterface($param_url."--".$ret['result']."--".$ret['msg']);
     //		}
     //		else{
     //			logManageErrorInterface($param_url."--".$ret['result']."--".$ret['msg']);
     //			$ret = array(
     //        		'result' => false,
     //            	'msg' => $ret['msg'],
     //        	);
     //		}
     return $ret;
 }
Example #7
0
 public static function makeMsdkRequest($host, $uri, $params, $cookie = array(), $method = 'post', $protocol = 'http', $logger = null, $open_id = null)
 {
     $url = "{$protocol}://{$host}{$uri}";
     $B = microtime(true);
     $response = \SnsNetwork::makeRequest($url, $params, $cookie, $method, $protocol, $logger, $open_id);
     $E = microtime(true);
     $X = $E - $B;
     if ($logger != null and $X > 0.3) {
         $logger->debug("makeRequest delay call: {$X}");
     }
     return self::extractMsdkResponse($response, $logger);
 }
Example #8
0
    echo json_encode(array("error" => "会话已过期"));
    die;
}
if ($token['expires'] > time()) {
    // 还没有实效,不需要刷新
    echo json_encode(array("result" => true));
    die;
}
// 需要刷新token了
$appid = APPID;
if ($_REQUEST['web']) {
    $appid = APPID_PC;
}
$refresh_token = $token['refresh_token'];
$params = "appid={$appid}&grant_type=refresh_token&refresh_token={$refresh_token}";
$line = SnsNetwork::makeRequest('https://api.weixin.qq.com/sns/oauth2/refresh_token', $params, '', 'get', 'https');
if (!$line['result']) {
    // 访问失败了
    echo json_encode(array("error" => "访问失败"));
    die;
}
if ($line['errmsg']) {
    // 刷新token失败
    echo json_encode(array("error" => $line['errmsg']));
    die;
}
// 成功获取到了,记录到session中
$token = json_decode($line['msg'], true);
$token['expires'] = time() + $token['expires_in'] - 15 * 60;
$_SESSION['access_token'] = $token;
echo json_encode(array("result" => true));
Example #9
0
 static function get_ticket($appid)
 {
     $file_name = dirname(__FILE__) . '/../data/' . $appid . '.ticket';
     $data = @file_get_contents($file_name);
     $data = @json_decode($data);
     $ticket = null;
     if (empty($data) || $data->expire_time < time()) {
         Log::trace('$appid Ticket过期了,重新获取');
         $token = self::refresh_access_token($appid);
         $line = SnsNetwork::makeRequest(self::TICKET_URL, "type=jsapi&access_token={$token}", "", "get", "https");
         if (!$line['result']) {
             Log::trace("获取Ticket失败");
             return;
         }
         $r = json_decode($line['msg'], true);
         $ticket = $r['ticket'];
         if ($ticket) {
             Log::trace("获取Ticket成功,写入文件");
             $data = array("expire_time" => time() + 1800, "ticket" => $ticket);
             file_put_contents($file_name, json_encode($data));
         } else {
             Log::trace("获取Ticket失败:" . $line['msg']);
         }
     } else {
         $ticket = $data->ticket;
     }
     return $ticket;
 }