哪个 url 必须放在 bigcommerce 的 AUTH 回调 url 中

Posted

技术标签:

【中文标题】哪个 url 必须放在 bigcommerce 的 AUTH 回调 url 中【英文标题】:Which url has to be put in AUTH callback url in bigcommerce 【发布时间】:2019-04-02 08:02:59 【问题描述】:

在为 Bigcommerce api 制作应用程序时,必须将哪个 URL 放入 AUTH 回调 URL?

当我点击我的草稿应用时,它什么也没有显示。

我现在正在使用这个网址:

https://we-apps.com/disstem/public/bigcommerce/auth

https://we-apps.com/disstem/public/bigcommerce :它是我的文件的路径。

注意:我使用的是 laravel 框架

我的控制器文件

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');

我运行此代码的 laravel url 是:

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

bigcommerce 我给的 APP 回调 url 是:和我的 laravel url 一样

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

但它给出的 'code' 错误是未定义的。 。但是当我在 bigcommerce 中单击应用程序的安装按钮时,它会给我返回代码、上下文和范围并在 bigcommerce 上显示它,但是当我运行我的 laravel 代码时,它给了我错误。

【问题讨论】:

【参考方案1】:

身份验证回调 URL 应与您在应用中定义的任何路由相匹配,以响应 GET request(在控制面板中单击草稿应用的安装按钮时触发)。

这是 BC 示例 php 应用程序中的一个示例,其中 '/auth/callback' 是已注册的路由: https://github.com/bigcommerce/hello-world-app-php-silex/blob/master/index.php#L37

在这种情况下,身份验证回调 URL 将是 https://myapp.com/auth/callback

如果你使用 Laravel 作为你的框架,syntax 有点不同,但概念是一样的。在您的应用程序中定义一个路由会告诉应用程序侦听到特定 URL (/auth/callback) 的 http 请求(在本例中为 GET)。当您的应用检测到 GET 请求已发送到 /auth/callback 时,它将运行您指定的回调函数来处理 http 请求。

在安装 BigCommerce 应用程序的情况下,该回调函数应该从 GET 请求中接收临时身份验证代码、上下文和范围,然后创建一个返回 BigCommerce 身份验证服务的 POST 以将这些交换为永久 Oauth 令牌(此时,您存储令牌并且应用程序在控制面板中显示“已安装”)。这正是回调函数正在做的事情here。

编辑: 看起来处理 GET 参数的语法与 Laravel docs recommend 的语法不一致:

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

您可能会发现这里的答案很有帮助:https://***.com/a/34642837/8521556

【讨论】:

对不起,我不太理解这部分'身份验证回调 URL 应该匹配您在应用程序中定义的任何路由'。 @deep 我编辑了我的答案以添加更多细节:) 如果有帮助,请告诉我! 好的,我明白了,那么你能看一下我的代码,以便更好地理解。我正在编辑我的问题。 您能否尝试在 $postfields 上运行 var_dump 以查看数组是如何构建的(并检查以确保 code 填充正确)? 能否分享完整的 GET 请求 URL 以及代码、上下文和范围参数?

以上是关于哪个 url 必须放在 bigcommerce 的 AUTH 回调 url 中的主要内容,如果未能解决你的问题,请参考以下文章

在 BigCommerce HTML href 中回显 PHP(自引用 hreflang 标签)

付款方式 BigCommerce

如何在 Bigcommerce 商店中配置和上传 webhook?

Bigcommerce - 函数执行后是不是可以更改文本?

获取 BigCommerce 产品选项 variantId

BigCommerce 自定义结帐页面