Visa Developer API身份验证错误

时间:2016-02-06 22:35:57

标签: php api curl

我正在努力实施VISA Developer Foreign Exchange API 使用CURL但是当我发送请求时,我收到Authentication Error消息。我在本地测试API,这是我的实现。

data_string = $_POST;                                                                                   
$ch = curl_init('https://sandbox.api.visa.com/forexrates/v1/foreignexchangerates');   
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json', "Accept:application/json", "Authorization:".base64_encode("usernamestring:passwordstring")));
curl_setopt($ch, CURLOPT_URL, "https://sandbox.api.visa.com/forexrates/v1/foreignexchangerates");  
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data_string));
curl_setopt($ch, CURLOPT_POST, 1); 
$results = curl_exec($ch);

他们还生成一个.pem证书,我不确定我是否必须使用Foreign Exchnage API请求,但是请你看看我是否做错了什么?

2 个答案:

答案 0 :(得分:1)

此api是相互身份验证并且要调用api,您需要在开发人员平台上为此api创建应用程序,然后需要在授权标头中传递您的用户标识密码。 用户ID和密码特定于您创建的应用,可以在您的应用详细信息页面中看到。

除了授权标头之外,您还需要发送密钥和证书文件。 密钥文件将在创建应用程序时创建,并将下载到您的系统中。

请使用平台为PHP提供的示例代码。要访问您为此api创建应用程序所需的示例代码。

如果您有任何其他问题,请告诉我?

答案 1 :(得分:0)

您需要在用户ID /密码部分传递私钥(创建项目时下载的.pem文件)和证书密钥(凭证中的.pem文件)。

使用PHP提供的示例代码或尝试以下代码。

$userId = ""; /*Your user id*/
$password = ""; /*Your password*/
$postBody = array(); /*Your POST body*/
$authString = $userId.':'.$password;
$authStringBytes = utf8_encode($authString);
$authloginString = base64_encode($authStringBytes);
$authHeader= "Authorization:Basic ".$authloginString;
$header = (array("Accept: application/json", "Content-Type: application/json", $authHeader));
$ch = curl_init();
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
curl_setopt($ch, CURLOPT_URL, "https://sandbox.api.visa.com/forexrates/v1/foreignexchangerates");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($postBody));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSLCERT, 'PATH_TO_CERT_FILE');
curl_setopt($ch, CURLOPT_SSLKEY, 'PATH_TO_PRIVATE_KEY_FILE');
$results = curl_exec($ch);
curl_close($ch);
print_r(json_decode($results));