哪个 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 标签)