我无法弄清楚我做错了什么。我正在为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编码字符串吗?
答案 0 :(得分:1)
这里有几件事要检查:
当你有client_id和secret_id时。您应该具有在https://login.bigcommerce.com/oauth2/token
发送POST请求到BC Auth令牌服务所需的所有详细信息内容使用URL编码确保对您的内容进行URL编码。小心&amp;编码和=当这些实际被用作分隔符时的符号。
更多细节可以在这篇文章中找到: Can BigCommerce Private Apps use OAuth