eway直接付款卷曲代码不起作用

时间:2014-05-24 11:19:39

标签: php curl payment-gateway

我正在尝试使用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;
}

此代码根本不打印任何内容...错误日志中没有任何内容......任何想法导致它无法正常工作?

由于

1 个答案:

答案 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应该是CustomerTotalAmount的子项以及Invoice字段应该是Payment的孩子:

$postData = array(
    'Method' => 'TokenPayment',
    'TransactionType' => 'Recurring',
    'Customer' => array(        
      'TokenCustomerID' => '911058757297',
    ),
    'Payment' => array(
        'TotalAmount' => '1900',
        'InvoiceNumber' => '123',
        'InvoiceDescription' => 'testing',
     ),
);

查看示例in the documentation以获取完整的示例请求。

祝你好运!