在制作适用于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网址是:
https://w- ap.com/dis/public/bigcommerce
bigcommerce我提供的我的APP回调网址是:与我的laravel网址相同
https://w- ap.com/dis/public/bigcommerce
,但给出错误'code'的消息是未定义的。。但是当我在bigcommerce中单击应用程序的安装按钮时,它会给我返回代码,上下文和作用域并在bigcommerce上显示它,但是当我运行laravel代码时,它会给我错误。
答案 0 :(得分:0)
auth回调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请求接收临时身份验证代码,上下文和范围,然后创建POST返回BigCommerce身份验证服务,以将其交换为永久性Oauth令牌(此时,您将存储令牌,并且应用程序在控制面板中显示“已安装”)。这就是回调函数正在做的here。
编辑: 看起来处理GET参数的语法与Laravel docs recommend的语法不一致:
$ code = $ request-> query('code');
您可能会在这里找到有用的答案:https://stackoverflow.com/a/34642837/8521556