我目前正試圖生成一個簽名以在線對quickbooks進行API調用,但是我不斷收到身份驗證錯誤。我確定簽名部分是我出錯的地方。這是不正確的:如何爲OAuth生成簽名
//method to generate signature
//$this->method = "GET"
//QBO_SANDBOX_URL = 'https://some_url.com/'
//$this->_query = 'something=something'
public function generate_signature()
{
$base = $this->_method.'&'.rawurlencode($this->_url.QBO_SANDBOX_URL.'v3/company/'.$this->_realm_id).'&'
.rawurlencode("oauth_consumer_key=".rawurlencode($this->_consumer_key).'&'
.'&oauth_nonce='.rawurlencode('34604g54654y456546')
.'&oauth_signature_method='.rawurlencode('HMAC-SHA1')
.'&oauth_timestamp='.rawurlencode(time())
.'&oauth_token='.rawurlencode($this->_auth_token)
.'&oauth_version='.rawurlencode('1.0')
.'&'.rawurlencode($this->_query));
$key = rawurlencode($this->_consumer_secret.'&'.$this->_token_secret);
$this->_signature = base64_encode(hash_hmac("sha1", $base, $key, true));
}
現在,當我去送了我的要求,這裏有頭:
$this->_headers = array(
'Authorization: '.urlencode('OAuth oauth_token="'.$this->_auth_token.'",oauth_nonce="ea9ec8429b68d6b77cd5600adbbb0456",oauth_consumer_key="'.$this->_consumer_key.'",oauth_signature_method="HMAC-SHA1", oauth_timestamp="'.time().'", oauth_version ="1.0"oauth_signature="'.$this->_signature.'"').''
);
,我收到了401授權響應。我是否簽名不正確?
編輯:這裏沒有包括所有字段(即$this->_auth_token
)。
我試圖做到這一點同樣的事情,我正在嘗試使用此代碼,你如何獲得App Token Secret?根據[文檔](https://developer.intuit.com/docs/0100_quickbooks_online/0100_essentials/000500_authentication_and_authorization/connect_from_within_your_app),我需要簽名才能檢索App Token Secret,但是您正在使用它來生成簽名'$ this - > _ token_secret',有什麼幫助? –
@Josh Whitlow:您的應用程序令牌應由任何您想要驗證的服務提供給您。通常在儀表板的某處。順便說一下,上面的代碼工作,問題是雙'&'結束了$ base變量聲明的第二行。 – Kisaragi