curl не работает, но не выдает никакой ошибки - PullRequest
0 голосов
/ 29 мая 2018

Я работаю над Globe Labs API для отправки SMS.Но прежде чем я смогу отправить SMS, необходимо подписаться на номер мобильного телефона, на который я хочу отправить сообщение, чтобы я мог получить access_token, который будет использоваться при отправке SMS.

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

Согласно документации , после того, как абонент ввел полученный пин-код подтверждения на странице и нажал кнопку «Подтвердить», чтобы авторизовать подписчика.затем страница будет перенаправлена ​​на redirect_uri моего приложения, и ей будет передан (с помощью GET) параметр Code.

Вот часть, где я не могу заставить ее работать:

Чтобы получить токен доступа, вам нужно выполнить запрос POST через https://developer.globelabs.com.ph/oauth/access_token с вашими «app_id», «app_secret» и «code» в качестве параметров.Параметры "access_token" и "subscriber_number" будут затем возвращены в ваш URI перенаправления в качестве ответа.

Вот мой код:

$app_id = '<my_app_id>';
$app_secret = '<my_app_secret>';

$content = array(
    'app_id' => $app_id,
    'app_secret' => $app_secret,
    'code' => $this->input->get('code')
);
$url = 'http://developer.globelabs.com.ph/oauth/access_token';

$this->post_to_url($url, $content);

function post_to_url($url, $data) {
   $fields = '';
   foreach($data as $key => $value) { 
      $fields .= $key . '=' . $value . '&'; 
   }
   rtrim($fields, '&');

   $post = curl_init();

   curl_setopt($post, CURLOPT_URL, $url);
   curl_setopt($post, CURLOPT_POST, count($data));
   curl_setopt($post, CURLOPT_POSTFIELDS, $fields);
   curl_setopt($post, CURLOPT_RETURNTRANSFER, 1);

   $result = curl_exec($post);

   curl_close($post);
   if(!$result){
        die('Error: "' . curl_error($post) . '" - Code: ' . curl_errno($post));
    } else {
        $this->Sms_Api_model->save_subscriber_data();
    }
}

Это мой URL перенаправления: http://api.forexcargo.us/sms_api/globelabs_api?code=[code]

И результат я получаю:

Ошибка: "" - Код:

РЕДАКТИРОВАТЬ:

Я пытался использовать форму и отправлять свои данные методом POST, и это сработало.Так что это действительно может быть моя установка локона.

Что я делаю не так?Любая помощь высоко ценится.Спасибо!

1 Ответ

0 голосов
/ 29 мая 2018

Извиняюсь за то, что был новичком в отношении керла.По-видимому, мне пришлось добавить следующий код, чтобы увидеть ошибки в моем коде, потому что в URL, который я использую, отключена проверка ошибок:

error_reporting(-1);
ini_set('display_errors', 1);
set_time_limit(0);

И мой новый код:

function do_post_request($post_data)
{
    error_reporting(-1);
    ini_set('display_errors', 1);
    set_time_limit(0);
    $url = 'https://developer.globelabs.com.ph/oauth/access_token';

    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);

    // execute!
    $response = curl_exec($ch);

    // close the connection, release resources used
    curl_close($ch);

    // do anything you want with your response
    if($this->json_validator($response) == 1){
        $decode_data = json_decode($response, true);

        $post_data_arr = array('access_token' => $decode_data['access_token'], 'subscriber_number' => $decode_data['subscriber_number']);

        $this->Sms_Api_model->save_subscriber_data($post_data_arr);
        //var_dump(http_response_code(200));
    }
}

$content = [
    'app_id' => $app_id,
    'app_secret' => $app_secret,
    'code' => $this->input->get('code')
    ];

$post_request = $this->do_post_request($content);

Теперь он работает, и мне удалось сохранить полученные данные в моей базе данных.Спасибо всем за помощь!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...