Какой URL должен быть помещен в URL обратного вызова AUTH в bigcommerce - PullRequest
0 голосов
/ 29 октября 2018

Какой URL необходимо указать в URL обратного вызова AUTH при создании приложения для Bigcommerce API?

Когда я нажимаю на мое черновое приложение, оно ничего не показывает.

Я сейчас использую этот URL:

https://we -apps.com / disstem / государственные / BigCommerce / Auth

https://we -apps.com / distem / public / bigcommerce : это путь к моему файлу.

Примечание: я использую Laravel Framework

Файл моего контроллера

public function bigcommerce()
{
   $user_id = Auth::id();
   $header =  array(
      "Content-Type" => "application/x-www-form-urlencoded",
   ); 

   $client_id = 'xxxx';
   $client_secret = 'xxxxx';
   $redirect_uri = 'https://w- ap.com/dis/public/bigcommerce';
   $postfields = array(
      "client_id" => $client_id,
      "client_secret" => $client_secret,
      "redirect_uri" => $redirect_uri,
      "grant_type" => "authorization_code",
      "code" =>$_GET['code'],
      "scope" => $_GET['scope'],
      "context" => $_GET['context'],
   );

   $postfields = http_build_query($postfields);
   $ch = curl_init();
         curl_setopt($ch, CURLOPT_URL, 'https://login.bigcommerce.com/oauth2/token');
         curl_setopt($ch, CURLOPT_HTTPHEADER, $header); 
         curl_setopt( $ch, CURLOPT_VERBOSE, 0 );
         curl_setopt( $ch, CURLOPT_CUSTOMREQUEST, 'POST');
         curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, 0 );
         curl_setopt($ch, CURLOPT_POSTFIELDS, $postfields);
         curl_setopt( $ch, CURLOPT_SSL_VERIFYHOST, 0 );
         curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1 );
   $response = curl_exec( $ch );
   $result = json_decode($response);
   print_r($response);

файл моего маршрута

 Route::get('/bigcommerce', 'IntegrationController@bigcommerce')->name('bigcommerce')->middleware('auth');

мой URL-адрес laravel для запуска этого кода:

 https://w- ap.com/dis/public/bigcommerce

bigcommerce URL моего обратного вызова APP, который я дал: такой же, как мой URL laravel

https://w- ap.com/dis/public/bigcommerce

, но выдает ошибку 'code' не определено. . но когда я нажимаю на кнопку установки приложения в bigcommerce, он возвращает мне код, контекст и область действия и показывает его в bigcommerce, но когда я запускаю свой код laravel, он выдает мне ошибку.

1 Ответ

0 голосов
/ 31 октября 2018

URL-адрес обратного вызова аутентификации должен соответствовать любому маршруту, который вы определили в своем приложении, чтобы ответить на GET-запрос (срабатывает при нажатии кнопки «Установить» вашего чернового приложения на панели управления).

Вот пример из примера приложения PHP BC, где '/auth/callback' - это зарегистрированный маршрут: https://github.com/bigcommerce/hello-world-app-php-silex/blob/master/index.php#L37

В этом случае URL обратного вызова аутентификации будет https://myapp.com/auth/callback

Если вы используете Laravel в качестве своей среды, синтаксис немного отличается, но концепция та же. Определение маршрута в вашем приложении указывает приложению прослушивать http-запрос (в данном случае GET) на определенный URL-адрес (/ auth / callback). Когда ваше приложение обнаружит, что запрос GET отправлен в / auth / callback, оно запустит указанную вами функцию обратного вызова для обработки http-запроса.

В случае установки приложения BigCommerce эта функция обратного вызова должна получить временный код авторизации, контекст и области действия из запроса GET, а затем создать POST обратно в службу аутентификации BigCommerce, чтобы обменять их на постоянный токен Oauth ( в этот момент вы сохраняете токен, и приложение показывает «установлен» на панели управления). Это именно то, что делает функция обратного вызова здесь .

Edit: Похоже, что синтаксис для обработки параметров GET не согласуется с тем, что Laravel docs рекомендует :

$ code = $ request-> query ('code');

Вам может быть полезен ответ здесь: https://stackoverflow.com/a/34642837/8521556

...