Я пытаюсь настроить gitkit на своем веб-сайте, но не могу пройти мимо этой одной строки кода. Независимо от того, что я делаю, file_get_contents
продолжает возвращать пустой.
Я уже установил свой php.ini: always_populate_raw_post_data = On
Моя среда – это PHP 5.3.3
, Apache 2.2.6
, localhost.
Вот какой код.
В моем index.php я вызываю API google и пытаюсь войти в систему с учетной записью gmail, другими словами, для федеративного входа.
(это из консоли Google API)
<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script> <script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jqueryui/1.8.2/jquery-ui.min.js"></script> <script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/googleapis/0.0.4/googleapis.min.js"></script> <script type="text/javascript" src="//ajax.googleapis.com/jsapi"></script> <script type="text/javascript"> google.load("identitytoolkit", "1", {packages: ["ac"], language:"en"}); </script> <script type="text/javascript"> $(function() { window.google.identitytoolkit.setConfig({ developerKey: "HERE_GOES_MY_DEVELOPER_KEY", companyName: "Valentinos Pizzaria", callbackUrl: "http://localhost/valentinos/callback.php", realm: "", userStatusUrl: "http://localhost/valentinos/userstatus.php", loginUrl: "http://localhost/valentinos/login.php", signupUrl: "http://localhost/valentinos/register.php", homeUrl: "http://localhost/valentinos/index.php", logoutUrl: "http://localhost/valentinos/logout.php", idps: ["Gmail", "Yahoo"], tryFederatedFirst: true, useCachedUserStatus: false, useContextParam: true }); $("#navbar").accountChooser(); }); </script>
Я получаю ответ IDP, регистрируюсь и прошу разрешения. По возвращении на мою страницу обратного вызова, в которой я использовал образец кода, предоставленный Google (который ниже), эта одна строка кода, похоже, не возвращается правильно.
Я вообще делаю что-то глупое?
Любая помощь будет оценена.
Вот весь callback.php (пока нет HTML-кода):
session_start(); $url = EasyRpService::getCurrentUrl(); #$postData = @file_get_contents('php://input'); $postData = file_get_contents('php://input'); $result = EasyRpService::verify($url, $postData); // Turn on for debugging. // var_dump($result); class EasyRpService { // Replace $YOUR_DEVELOPER_KEY private static $SERVER_URL = 'https://www.googleapis.com/rpc?key=HERE_GOES_MY_DEVELOPER_KEY'; public static function getCurrentUrl() { $url = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') ? 'https://' : 'http://'; $url .= $_SERVER['SERVER_NAME']; if ($_SERVER['SERVER_PORT'] != '80') { $url .= ':'. $_SERVER['SERVER_PORT']; } $url .= $_SERVER['REQUEST_URI']; return $url; } private static function post($postData) { $ch = curl_init(); curl_setopt_array($ch, array( CURLOPT_URL => EasyRpService::$SERVER_URL, CURLOPT_RETURNTRANSFER => 1, CURLOPT_HTTPHEADER => array('Content-Type: application/json'), CURLOPT_POSTFIELDS => json_encode($postData))); $response = curl_exec($ch); $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); if ($http_code == '200' && !empty($response)) { return json_decode($response, true); } return NULL; } public static function verify($continueUri, $response) { $request = array(); $request['method'] = 'identitytoolkit.relyingparty.verifyAssertion'; $request['apiVersion'] = 'v1'; $request['params'] = array(); $request['params']['requestUri'] = $continueUri; $request['params']['postBody'] = $response; $result = EasyRpService::post($request); if (!empty($result['result'])) { return $result['result']; } return NULL; } } # End Class EasyRpService
Прежде чем кто-нибудь спросит, я заменяю HERE_GOES_MY_DEVELOPER_KEY
моим ключом разработчика …
Еще раз, любая помощь будет высоко оценена. C ya.
Данные HTTP POST обычно заполняются в $ _POST, php: // ввод обычно содержит данные PUT.
Вы пытались использовать $ _POST? php://input
не работает для enctype = "multipart / form-data". Может быть, вы получаете ответ как multipart / form-data, в этом случае $ _POST [0] должен работать.