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; }
/** * 执行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; }
/** * 执行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; }
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; }
$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));
/** * 请求网关 * @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; }
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); }
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));
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; }