我正在努力实施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请求,但是请你看看我是否做错了什么?
答案 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));