我正在尝试通过curl调用服务,这是我的代码,每次我收到附加错误
error_reporting(-1);
$qbsite = "https://qbo.sbfinance.intuit.com/resource/account/v2/960432556";
$headers = array(
'Content-Type'=>'application/xml',
'oauth_version' => "1.0",
'oauth_signature_method'=>"HMAC-SHA1",
'oauth_nonce'=>"xxx",
'oauth_timestamp'=>"xxx",
'oauth_consumer_key'=>"qyprdvZraQrBVbrPIptwd6gl6C6knP",
'oauth_token'=>"qyprdyLcCq9KMGVzqxtObeOkTvSWhhi7sNSW62u9gwqDXsc7",
'oauth_signature'=>"LnVYSgE9YZ77KgKZ1kLT3ouIu1M=",
);
$xmlData = '<?xml version="1.0" encoding="utf-16"?>
<Account xmlns:ns2="http://www.intuit.com/sb/cdm/qbo" xmlns="http://www.intuit.com/sb/cdm/v2">
<Name>Loan Account </Name>
<Desc>Loan Account</Desc>
<Subtype>Savings</Subtype>
<AcctNum>5001</AcctNum>
<OpeningBalanceDate>2010-05-14</OpeningBalanceDate>
</Account>';
$ch = curl_init($qbsite);
curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_POSTFIELDS, "\n{$xmlData}");
$response = curl_exec($ch);
print($response);die; !
答案 0 :(得分:2)
此:
$headers = array(
'Content-Type'=>'application/xml',
'oauth_version' => "1.0",
'oauth_signature_method'=>"HMAC-SHA1",
'oauth_nonce'=>"xxx",
'oauth_timestamp'=>"xxx",
'oauth_consumer_key'=>"qyprdvZraQrBVbrPIptwd6gl6C6knP",
'oauth_token'=>"qyprdyLcCq9KMGVzqxtObeOkTvSWhhi7sNSW62u9gwqDXsc7",
'oauth_signature'=>"LnVYSgE9YZ77KgKZ1kLT3ouIu1M=",
);
甚至没有接近正确的OAuth签名。 OAuth签名将所有信息放在单个Authorization: ...
HTTP标头中,而您在单独的HTTP标头中打了每个OAuth数据。
例如,正确的OAuth标头如下所示:
Authorization: OAuth realm="",
oauth_consumer_key="dpf43f3p2l4k3l03",
oauth_nonce="kllo9940pd9333jh",
oauth_timestamp="1191242096",
oauth_signature_method="HMAC-SHA1",
oauth_version="1.0",
oauth_signature="tR3%2BTy81lMeYAr%2FFid0kMTYa%2FWM%3D"
此外,OAuth签名不是静态值 - 必须计算它们,并且它们随着每个请求而变化。
你应该下载QuickBooks PHP DevKit的夜间版本(免责声明:我是作者) - 这是一个专门设计用于完成你正在做的事情的库(与QuickBooks集成),它需要为您建立正确的OAuth请求。
具体来说,请下载并查看以下示例:
答案 1 :(得分:0)
您是否尝试删除此行末尾的
'oauth_signature'=>"LnVYSgE9YZ77KgKZ1kLT3ouIu1M=",