BigCommerce oAuth身份验证令牌请求始终返回401

BigCommerce oAuth身份验证令牌请求始终返回401,oauth,bigcommerce,Oauth,Bigcommerce,我不知道我做错了什么。我正在为BigCommerce开发一个应用程序,无法使简单的oAuth exchange正常工作 正在向发出初始get请求。这是控制器中用于该请求的代码。这是一款Laravel 5.6应用程序: use Illuminate\Http\Request; use Bigcommerce\Api\Client as Bigcommerce; class BigcommerceOAuthController extends Controller { public fun

我不知道我做错了什么。我正在为BigCommerce开发一个应用程序,无法使简单的oAuth exchange正常工作

正在向发出初始get请求。这是控制器中用于该请求的代码。这是一款Laravel 5.6应用程序:

use Illuminate\Http\Request;
use Bigcommerce\Api\Client as Bigcommerce;

class BigcommerceOAuthController extends Controller
{
    public function auth(Request $request)
    {
        $object = new \stdClass();
        $object->client_id = 'my-client-id';
        $object->client_secret = 'my-client-secret';
        $object->redirect_uri = 'https://my-app.com/oauth/bigcommerce/auth';
        $object->code = $request->get('code');
        $object->context = $request->get('context');
        $object->scope = $request->get('scope');

        $authTokenResponse = Bigcommerce::getAuthToken($object);

        $storeHash = str_replace('stores/', '', $request->get('context'));

        Bigcommerce::configure(array(
            'client_id' => 'my-client-id',
            'auth_token' => $authTokenResponse->access_token,
            'store_hash' => $storeHash
        ));

        echo "<pre>";
        print_r($authTokenResponse);
        print_r(Bigcommerce::getTime());
        echo "</pre>";
    }
}
使用照亮\Http\Request;
使用Bigcommerce\Api\Client作为Bigcommerce;
类BigCommerceAuthController扩展控制器
{
公共函数身份验证(请求$Request)
{
$object=new\stdClass();
$object->client_id='my client id';
$object->client_secret='my client secret';
$object->重定向https://my-app.com/oauth/bigcommerce/auth';
$object->code=$request->get('code');
$object->context=$request->get('context');
$object->scope=$request->get('scope');
$authTokenResponse=Bigcommerce::getAuthToken($object);
$storeHash=str_replace('stores/','',$request->get('context');
Bigcommerce::配置(数组)(
'客户id'=>'我的客户id',
'auth_-token'=>$authTokenResponse->access_-token,
'store_hash'=>$storeHash
));
回声“;
打印($authTokenResponse);
print_r(Bigcommerce::getTime());
回声“;
}
}
每次我试图从BigCommerce控制面板安装我的draft应用程序时,我都会收到一个错误,因为
$authTokenResponse
不是一个对象。当我进一步调试到
Bigcommerce\Api\Connection
类时,我可以看到服务器的响应为空,状态为a
401
,这意味着“未授权”

我不明白为什么我会犯这个错误。就我所知,我做的一切都是对的。我尝试对从
$request->get('scope')
检索到的字符串进行URL编码,因为该字符串被Laravel取消编码,但这似乎没有帮助

我也很困惑这到底是怎么回事。在BigCommerce文档中,它们显示了此示例POST请求,该请求使用application/x-www-form-urlencoded内容类型,并将请求正文作为url编码字符串传递:

POST/oauth2/token HTTP/1.1主机:login.bigcommerce.com内容类型: application/x-www-form-Url编码内容长度:186

client_id={client_id}和client_secret={client_secret}&code=qr6h3thvbvag2fq&scope=store_v2_orders&grant_type=authorization_code&redirect_uri={store_HASH}


但是,如果您检查Connection类中发生了什么,您可以看到内容类型被设置为application/x-www-form-urlencoded,正如文档所说,但是请求主体是作为json字符串而不是url字符串传入的。请求不应该是文档建议的url编码字符串吗?

这里有几点需要检查:

  • 您是否有一个可以接收身份验证回调的公共URL
  • 如果是,店主是否成功注册了应用程序
当您拥有客户端id和机密id时。您应该拥有向位于的BC Auth Token服务发送POST请求所需的所有详细信息

内容使用URL编码确保对内容进行URL编码。在实际用作分隔符时,请注意&和=符号的编码

更多详细信息可在此帖子中找到:

在我的bigcommerce演示商店中,在控制台响应[{状态:401,消息:“指定的凭据无效。”}]0:{状态:401,消息:“指定的凭据无效。”}你知道问题出在哪里吗