我为我的应用程序构建的用户流程是用户可以单击myAccounts,我将显示getCustomerAccounts结果。这非常有效。然后,对于每个帐户,我有一个名为get transactions的超链接。这会将用户带到一个新页面,该页面应该列出该帐户的交易。出于某种原因,我总是在调用getAccountTransactions时获得401代码:ApplicationAuthenticationFailed,即使之前调用的getCustomerAccounts工作正常。
我很困惑,因为我认为401失败的身份验证与之前的调用完全相同。这是我的代码:
function get_transactions($ accountID)
{
IntuitAggCatHelpers::GetOAuthTokens( $oauth_token, $oauth_token_secret);
$signatures = array( 'consumer_key' => OAUTH_CONSUMER_KEY,
'shared_secret' => OAUTH_SHARED_SECRET,
'oauth_token' => $oauth_token,
'oauth_secret' => $oauth_token_secret);
$txnStartDate = '2014-06-01'; // YYYY-MM-DD
$url = FINANCIAL_FEED_URL ."v1/accounts/$accountID/transactions?txnStartDate=$txnStartDate";
$action = 'GET';
$oauthObject = new OAuthSimple();
$oauthObject->setAction( $action );
$oauthObject->reset();
$result = $oauthObject->sign(
array
(
'path' => $url,
'parameters'=>
array
(
'oauth_signature_method' => 'HMAC-SHA1',
'Host' => FINANCIAL_FEED_HOST
),
'signatures'=> $signatures
)
);
$options = array();
$curlError = fopen('php://temp', 'rw+');
$options[CURLOPT_STDERR] = $curlError;
$options[CURLOPT_CUSTOMREQUEST] = $action;
$options[CURLOPT_URL] = $result['signed_url'];
$options[CURLOPT_HEADER] = 1;
$options[CURLOPT_VERBOSE] = 1;
$options[CURLOPT_RETURNTRANSFER] = 1;
$options[CURLOPT_SSL_VERIFYPEER] = true;
$options[CURLOPT_HTTPHEADER] = array
(
'Accept:application/json',
'Content-Type:application/json',
//'Content-Length:' . strlen( $postData ),
'Host:'. FINANCIAL_FEED_HOST,
//'Authorization:' . $result['header']
);
$curlError = fopen('php://temp', 'rw+');
$options[CURLOPT_STDERR] = $curlError;
$ch = curl_init();
curl_setopt_array( $ch, $options );
$responseText = urldecode( curl_exec( $ch ) );
echo $responseText;
//display curl http conversation
rewind( $curlError );
stream_get_contents( $curlError );
fclose( $curlError );
$httpCode = curl_getinfo( $ch, CURLINFO_HTTP_CODE );
curl_close( $ch );
return $responseText;
}
答案 0 :(得分:0)
使用相同的证书(.p12),请尝试从APIExplorer工具调用上述getAccountTransaction。
https://developer.intuit.com/apiexplorer?apiname=CustomerAccountData
用法参考 - https://developer.intuit.com/docs/0020_customeraccountdata/007_firstrequest
如果效果很好,请将请求标头和网址与上述代码中的相同。 401建议您的OAuth标头未正确形成/不正确时出现身份验证错误。以上比较应该排除这一点。
PN - 在ApiExplorer中上传.p12文件(SAML)时,我收到以下错误消息。 “您的证书无效。请使用base64编码的CER格式并确保该文件不为空”。如果你得到相同的话就不能在ApiExplorer中测试。
由于
答案 1 :(得分:0)
这对我有用:
$result = $oauthObject->sign(array(
'path' => FINANCIAL_FEED_URL . 'v1/accounts/400037865348',
'parameters'=> array('oauth_signature_method' => 'HMAC-SHA1',
'Host'=> FINANCIAL_FEED_HOST,
'txnStartDate' => '2014-01-01',
'txnEndDate' => '2014-08-29'),
'signatures'=> $signatures));