Как выполнить POST через Reddit API (дополнение)

Я смог успешно зарегистрировать пользователя и вернуть их данные. Следующий шаг - заставить их опубликовать комментарий через мое приложение.

Я пробовал модифицировать код из reddit-php-sdk - https://github.com/jcleblanc/reddit-php-sdk/blob/master/reddit.php - но я не могу заставить его работать.

Мой код выглядит следующим образом:

function addComment($name, $text, $token){
 $response = null;
 if ($name && $text){
 $urlComment = "https://ssl.reddit.com/api/comment";
 $postData = sprintf("thing_id=%s&text=%s",
 $name,
 $text);
 $response = runCurl($urlComment, $token, $postData);
 }
 return $response;
}

function runCurl($url, $token, $postVals = null, $headers = null, $auth = false){
 $ch = curl_init($url);
 $auth_mode = 'oauth';

 $options = array(
 CURLOPT_RETURNTRANSFER => true,
 CURLOPT_CONNECTTIMEOUT => 5,
 CURLOPT_TIMEOUT => 10
 );

 $headers = array("Authorization: Bearer {$token}");
 $options[CURLOPT_HEADER] = false;
 $options[CURLINFO_HEADER_OUT] = false;
 $options[CURLOPT_HTTPHEADER] = $headers;

 if (!empty($_SERVER['HTTP_USER_AGENT'])){
 $options[CURLOPT_USERAGENT] = $_SERVER['HTTP_USER_AGENT'];
 }

 if ($postVals != null){
 $options[CURLOPT_POSTFIELDS] = $postVals;
 $options[CURLOPT_CUSTOMREQUEST] = "POST";
 }

 curl_setopt_array($ch, $options);
 $apiResponse = curl_exec($ch);
 $response = json_decode($apiResponse);

 //check if non-valid JSON is returned
 if ($error = json_last_error()){
 $response = $apiResponse; 
 }
 curl_close($ch);

 return $response;
}

$thing_id = 't2_'; // Not the actual thing id
$perma_id = '2daoej'; // Not the actual perma id

$name = $thing_id . $perma_id;
$text = "test text";

$reddit_access_token = $_SESSION['reddit_access_token'] // This is set after login

addComment($name, $text, $reddit_access_token);

Функция addComment помещает комментарий вместе в соответствии с их API - http://www.reddit.com/dev/api

addComment затем вызывает runCurl для выполнения запроса. Я предполагаю, что запрос на завиток испорчен, потому что я не получаю никакого ответа вообще. Я не получаю никаких ошибок, поэтому я не уверен, что происходит не так. Любая помощь будет действительно оценена. Благодарю!

1 ответ

Если вы используете свое собственное решение oAuth, я бы предложил использовать SDK, как я сказал в своем комментарии, но расширьте его, чтобы перезаписать метод построения.

class MyReddit extends reddit {
 public function __construct()
 {
 //set API endpoint
 $this->apiHost = ENDPOINT_OAUTH;
 }
 public function setAuthVars($accessToken, $tokenType)
 {
 $this->access_token = $accessToken;
 $this->token_type = $tokenType;

 //set auth mode for requests
 $this->auth_mode = 'oauth';
 }
}

Вам просто нужно убедиться, что вы вызываете setAuthVars перед запуском любых вызовов api.

licensed under cc by-sa 3.0 with attribution.