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

时间:2018-02-27 16:42:24

标签: oauth bigcommerce

我无法弄清楚我做错了什么。我正在为BigCommerce开发一个应用程序,无法让简单的oAuth交换正常工作。

正在向https://www.my-app.com/oauth/bigcommerce/auth发出初始请求。这是该请求的控制器中的代码。这是一款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>";
    }
}

每次我尝试从BigCommerce控制面板安装我的草稿应用程序时,都会收到错误,因为$authTokenResponse不是对象。当我进一步调试Bigcommerce\Api\Connection类时,我可以看到来自服务器的响应是空的,状态是401,这意味着“未经授权”。

我无法弄清楚为什么会收到此错误。据我所知,我做的一切都是正确的。我已经尝试对从$request->get('scope')检索到的字符串进行urlencoding,因为Laravel对该字符串进行了解码,但这似乎没有帮助。

我也很困惑这甚至应该如何工作。在BigCommerce文档中,他们显示了此示例POST请求,该请求使用application / x-www-form-urlencoded Content-Type并将请求正文作为url编码的字符串传递:

  

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

     

的client_id = {CLIENT_ID}&安培; client_secret = {CLIENT_SECRET}&安培;代码= qr6h3thvbvag2ffq&安培;范围= store_v2_orders&安培; grant_type = authorization_code&安培; REDIRECT_URI = https://app.example.com/oauth&context=stores/ {STORE_HASH}

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

1 个答案:

答案 0 :(得分:1)

这里有几件事要检查:

当你有client_id和secret_id时。您应该具有在https://login.bigcommerce.com/oauth2/token

发送POST请求到BC Auth令牌服务所需的所有详细信息

内容使用URL编码确保对您的内容进行URL编码。小心&amp;编码和=当这些实际被用作分隔符时的符号。

更多细节可以在这篇文章中找到: Can BigCommerce Private Apps use OAuth

相关问题