ОБНОВИТЬ:
Я буду честен, я сдался и сделал это в sails.js, в конце я оставлю этот вопрос на тот случай, если кто-нибудь увидит, где я ошибся.
интересно, может ли кто-нибудь помочь мне с чем-то странным, что я не могу решить.
У меня есть скрипт oAuth, который возвращает вывод массива json обратно в мое приложение для Android.
У меня проблема с неопределенным индексом по всем переменным json, однако, если я раскомментирую две строки, прокомментированные в моем коде, и посмотрю в браузере, то строка $ hdr будет выглядеть именно так, как должна, именно тогда, когда я пытаюсь вернуться $ hdr в моем заголовке я получаю:
callback://com.herghost.waves?code=&account_name=&refresh_token=&expires_in=
Вот скрипт, который я использую:
error_reporting(E_ALL);
$code = $_GET['code'];
$clientId = "";
$clientSecret = "";
$redirectionUrl = rawurlencode("http://waves-app.com/generate_token.php");
$url = sprintf("https://cloud.digitalocean.com/v1/oauth/token?client_id=%s&client_secret=%s&grant_type=authorization_code&code=%s&redirect_uri=%s", $clientId, $clientSecret, $code, $redirectionUrl);
$fields = array();
$fields_string = "";
$ch = curl_init();
curl_setopt($ch,CURLOPT_URL, $url);
curl_setopt($ch,CURLOPT_POST, count($fields));
curl_setopt($ch,CURLOPT_POSTFIELDS, $fields_string);
curl_setopt($ch,CURLOPT_RETURNTRANSFER, TRUE);
$result = curl_exec($ch);
curl_close($ch);
$json = json_decode($result, TRUE);
//print_r($json);
if (empty($code)) $code = '';
if (empty($name)) $name = '';
if (empty($refresh)) $refresh = '';
if (empty($expires)) $expires = '';
$code = $json['access_token'];
$name = rawurlencode($json["info"]["name"]);
$refresh = $json["refresh_token"];
$expires = $json["expires_in"];
$hdr = sprintf("Location:callback://com.herghost.waves?code=%s&account_name=%s&refresh_token=%s&expires_in=%s", $code, $name, $refresh,$expires);
//echo $hdr;
header($hdr);
РЕДАКТИРОВАТЬ: другие вещи, которые я сейчас попробовал
1) Установка жестко закодированной строки в sprintf
Location:callback://com.herghost.waves?code=1234&account_name=%s&refresh_token=%s&expires_in=%s"
Я получил правильный код обратно в моем приложении для Android
2) Установка переменной вручную и передача этого
$test = 'test'
header(sprintf("Location:callback://com.herghost.waves?code=%s&account_name=%s&refresh_token=%s&expires_in=%s",
$test, rawurlencode($json["info"]["name"]), $json["refresh_token"]//, $json["expires_in"]));
Я получаю тест, вернись в приложение для Android!
Я также проверил, есть ли ошибки скручивания, используя
if(curl_errno($ch))
{
echo 'Curl error: ' . curl_error($ch);
}
Нет ошибок.
var_dump определенно выводит результаты, так почему мои переменные пусты ?!
ДРУГОЕ РЕДАКТИРОВАНИЕ
Итак, я попробовал это:
$test = '45678';
$test2 = $json["refresh_token"];
$jsonerr = json_last_error();
echo $test2;
if($jsonerr == 0)
{
header("Location:callback://com.herghost.waves?code=" . $test2 . "+" . $test . "&account_name=1&refresh_token=2&expires_in=3");
}
else
{
header("Location:callback://com.herghost.waves?code=error&account_name=1&refresh_token=2&expires_in=3" . $jsonerr);
}
и мой ответ:
callback://com.herghost.waves?code=+45678&account_name=1&refresh_token=2&expires_in=3
Никогда не чувствовал себя таким разъяренным из-за простого куска кода!
Задача ещё не решена.
Других решений пока нет …