0

我正在尝试通过 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; !

在此处输入图像描述

4

2 回答 2

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 标头中,而您将每条 OAuth 数据放在单独的 HTTP 标头中。

例如,正确的 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 请求。

具体来说,下载它并查看以下示例:

  • 文档/example_ipp_oauth.php
  • 文档/example_ipp_ids_5.php
于 2013-02-22T11:54:44.497 回答
0

您是否尝试过删除此行末尾的 ,

'oauth_signature'=>"LnVYSgE9YZ77KgKZ1kLT3ouIu1M=",
于 2013-02-22T11:03:19.363 回答