我正在尝试使用eway付款方式向客户收费。我正在通过curl实现该过程,这是函数的代码。
public function testing_direct() {
$url = 'https://api.sandbox.ewaypayments.com/DirectPayment.json'; // PROD
$postData = array(
'Method' => 'TokenPayment',
'TransactionType' => 'Recurring',
'TokenCustomerID' => '918549937032',
'TotalAmount' => '1995',
'InvoiceNumber' => '123',
'InvoiceDescription' => 'testing'
);
$ch = curl_init($url);
$api_authentication = base64_encode('####;****');
curl_setopt_array($ch, array(
CURLOPT_POST => TRUE,
CURLOPT_RETURNTRANSFER => TRUE,
CURLOPT_HTTPHEADER => array(
'Content-Type: application/json','Authorization:####'
),
CURLOPT_POSTFIELDS => json_encode($postData)
));
$response = curl_exec($ch);
// Check for errors
if ($response === FALSE) {
die(curl_error($ch));
}
$responseData = json_decode($response, TRUE);
print_r($responseData);
die;
}
此代码根本不打印任何内容...错误日志中没有任何内容......任何想法导致它无法正常工作?
由于
答案 0 :(得分:0)
要使该脚本正常工作,需要修复一些问题,特别是在身份验证方面,这是导致问题的最直接原因。
需要检查请求的HTTP状态,因为如果出现错误,curl_exec
仅返回FALSE - 例如404(未找到页面)或401(未经授权)仍被视为成功请求。
// Check for errors
if ($response === FALSE) {
die(curl_error($ch));
}
$code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($code != 200) {
die('HTTP error: '.$code);
}
实际身份验证似乎遇到两个主要问题:用户名(API密钥)和密码之间存在分号而不是冒号,并且缺少身份验证的Basic
部分:
$api_authentication = base64_encode('####:****');
CURLOPT_HTTPHEADER => array(
'Content-Type: application/json','Authorization: Basic '.$api_authentication
),
只需使用CURLOPT_USERPWD
:
CURLOPT_USERPWD => '####:****',
除此之外,请注意$postData
数组需要一些额外的嵌套:TokenCustomerID
应该是Customer
和TotalAmount
的子项以及Invoice
字段应该是Payment
的孩子:
$postData = array(
'Method' => 'TokenPayment',
'TransactionType' => 'Recurring',
'Customer' => array(
'TokenCustomerID' => '911058757297',
),
'Payment' => array(
'TotalAmount' => '1900',
'InvoiceNumber' => '123',
'InvoiceDescription' => 'testing',
),
);
查看示例in the documentation以获取完整的示例请求。
祝你好运!