我一直在尝试让我的 PHP 应用程序创建一个成功的令牌请求,因为最终按照此处的文档设法让它与 Postman 一起工作
显然 API 使用的是 OAuth 2.0,这就是为什么我希望发送grant_type, client_id,client_secret和expires_in(如果我没有指定这些字段之一,那么 API 将成功告诉我它丢失了)。
现在我遇到的问题是我必须生成这个 OAuth 1.0 授权标头,Postman 这样做似乎没有问题,但是尝试在 PHP 中执行它我只是从 API 返回一个关于签名的错误不匹配:
array:6 [
"errorId" => "ERROR-fde4f0f1-9d5c-43fd-80eb-056cbf2c3259"
"httpStatus" => 401
"errorCode" => 401300
"message" => "Signature mismatch. Authorization signature or client credential is wrong."
"error" => "invalid_client"
"error_description" => "errorCode: '401300'. Signature mismatch. Authorization signature or client credential is wrong."
]
我尝试了各种调试,其中很多都给了我不同的错误,然后我一直回到这个错误,所以签名一定是问题所在。
我在这里创建了以下类来处理生成标头,从包中的类获得一些指导guzzle/oauth-subscriber。
这是生成的请求标头的示例:
array:2 [
"Content-Type" => "application/x-www-form-urlencoded"
"Authorization" => "OAuth oauth_consumer_key="XXXXXXXXXXXX",oauth_signature_method="HMAC-SHA256",oauth_timestamp="1583629976",oauth_nonce="Br2HsCVzsaEe3KswBhtCzsSxjUDWgX56",oauth_version="1.0",oauth_signature="G7%2B5f2v2Kdx3rp%2B28DcuJRBvhi9H7fHC1mFLqJIgmMc%3D""
]
请求正文:
array:4 [
"grant_type" => "client_credentials"
"client_id" => "XXXXXXXXXXXX"
"client_secret" => "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
"expires_in" => 87000
]
敏感细节已替换但consumer_key正确client_id,consumer_secret与client_secret
无论我如何尝试更改signUsingHmac()更改签名的方法,它都不起作用,对我来说一切都很好 D:
有人有什么想法吗?
如果我能很好地工作,我会将它拉到包中,以使 PHP 中这个 API 的身份验证不那么痛苦。
宝慕林4294392
莫回无
千巷猫影
随时随地看视频慕课网APP