0

我需要为我的 magento 网站集成 Authorize.net (Echeck.net) 付款方式。我已经用谷歌搜索,但我没有找到请建议付款方式是否有任何扩展,否则我们可以通过编码来实现这一点。我正在使用magento 1.7.0.2。

提前致谢!

4

2 回答 2

1

来自 authorize.net 的官方 Beta 版本可在 Magento 市场(Magento Connect)上获得。此模块仅在沙盒中测试,目前处于 Beta 状态,可能与 1.4 和 1.6 兼容。尚未尝试使用 1.7。如果有效,您可以尝试一下。请在以下链接中找到该模块

http://www.magentocommerce.com/magento-connect/echeck-payment-method-authorize-net.html

如果您需要自定义扩展,请随时联系 contact@sgssandhu.com 或http://oxosolutions.com/ 谢谢

于 2013-11-03T06:54:01.983 回答
0

嗨,这是通过 curl 请求和使用分隔符解析响应的 ECHECK 工作示例:

public function curlProcessECHECK(){


$query = "";
// Login Information
$query .= "x_login=" . urlencode($this->credentials->username) . "&";
$query .= "x_tran_key=" . urlencode($this->credentials->password) . "&";
$query .= "x_version=" . "3.1" . "&";
$query .= "x_delim_data=" . "TRUE" . "&";
$query .= "x_delim_char=" . "|" . "&";
$query .= "x_relay_response=" . "FALSE" . "&";
$query .= "x_amount=" . urlencode(number_format($data['orderTotalAmt'], 2, ".", "")) . "&";

// ECHECk payments..... code to check ECHECK request
switch ($data['bank_acct_type'])
{
    case 'checking':
    $echecktype = 'PPD';
    break;
    case 'businessChecking':
    $echecktype = 'CCD';
    break;
    case 'savings':
    $echecktype = 'PPD';
    break;
    default:
    $echecktype = 'PPD';
    break;
}
$query .= "x_method=ECHECK&";

$query .= "x_bank_name=" . urlencode($data['bank_name']) . "&";
$query .= "x_echeck_type=" . urlencode($echecktype) . "&";  //CCD, PPD, TEL ---[ARC, BOC]- bank_check_number ll be required, [WEB] recurring_billing ll be required.
$query .= "x_bank_acct_type=" . urlencode($data['bank_acct_type']) . "&";
$query .= "x_bank_acct_num=" . urlencode($data['bank_acct_num']) . "&";
$query .= "x_bank_aba_code=" . urlencode($data['bank_aba_code']) . "&";  // aba code should be valid get from google US based banks
$query .= "x_bank_acct_name=" . urlencode($data['bank_acct_name']) . "&";
$query .= "x_description=" . (isset($data['orderDescription']) ? urlencode($data['orderDescription']) : "") . "&";
$query .= "x_first_name=" . (isset($data['billingFirstName']) ? urlencode($data['billingFirstName']) : $data['firstName']) . "&";
$query .= "x_last_name=" . (isset($data['billingLastName']) ? urlencode($data['billingLastName']) : $data['lastName']) . "&";
$query .= "x_address=" . (isset($data['billingAddress1']) ? urlencode($data['billingAddress1']) : "") . "&";
$query .= "x_state=" . (isset($data['billingState']) ? urlencode($data['billingState']) : "") . "&";
$query .= "x_zip=" . (isset($data['billingZip']) ? urlencode($data['billingZip']) : "") . "&";

if($this->env == 1) {
$query .= "x_test_request=TRUE&";
}

$query .= "x_type=AUTH_CAPTURE";

$output = array();


$url = 'https://test.authorize.net/gateway/transact.dll';// TestMode
$ch_response = null;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
//   curl_setopt($ch, CURLOPT_VERBOSE, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 0);
curl_setopt($ch, CURLOPT_TIMEOUT, 15);

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

curl_setopt($ch, CURLOPT_POSTFIELDS, $query);
$ch_response = curl_exec($ch);


// Check that a connection was made
if (curl_error($ch)) {
    // If it wasn't...
    $output['status'] = "Failure";
    $output['response']['code'] = '-1';
    $output['data'] = null;
    $output['response']['responseMsg'] = curl_error($ch);
    $output['response']['gateway_response_code'] ='000';
    $output['response']['responsetext']= " No response from gateway";
    $output['response']['transactionid'] = '';
    $output['response']['init'] ="no";
    $output['response']['response_code']='000';
} else {
    $output['status'] = 'Success';
    $output['data'] = $ch_response;

    $output = $this->processResponse($output);
}

echo '<pre>';print_r($output);die;

}

现在解析结果

public function processResponse($output){

$response_array=$output;
if ($response_array) {

    // Split Array

    $encap_char = "|";
    $response_array = explode($encap_char, $response_array['data']);
    //echo"<pre>";print_r($response_array);die;
    /**
    * If AuthorizeNet doesn't return a delimited response.
    */
    if (count($response_array) < 10) {
        $approved = false;
        $error = true;
        $error_message = "Unrecognized response from AuthorizeNet: ";
        return;
    }

    // Set all fields
    $response_code = $response_array[0];
    $response_subcode = $response_array[1];
    $response_reason_code = $response_array[2];
    $response_reason_text = $response_array[3];
    $authorization_code = $response_array[4];
    $avs_response = $response_array[5];
    $transaction_id = $response_array[6];
    $invoice_number = $response_array[7];
    $description = $response_array[8];
    $amount = $response_array[9];
    $method = $response_array[10];
    $transaction_type = $response_array[11];
    $customer_id = $response_array[12];
    $first_name = $response_array[13];
    $last_name = $response_array[14];
    $company = $response_array[15];
    $address = $response_array[16];
    $city = $response_array[17];
    $state = $response_array[18];
    $zip_code = $response_array[19];
    $country = $response_array[20];
    $phone = $response_array[21];
    $fax = $response_array[22];
    $email_address = $response_array[23];
    $ship_to_first_name = $response_array[24];
    $ship_to_last_name = $response_array[25];
    $ship_to_company = $response_array[26];
    $ship_to_address = $response_array[27];
    $ship_to_city = $response_array[28];
    $ship_to_state = $response_array[29];
    $ship_to_zip_code = $response_array[30];
    $ship_to_country = $response_array[31];
    $tax = $response_array[32];
    $duty = $response_array[33];
    $freight = $response_array[34];
    $tax_exempt = $response_array[35];
    $purchase_order_number = $response_array[36];
    $md5_hash = $response_array[37];
    $card_code_response = $response_array[38];
    $cavv_response = $response_array[39];
    $account_number = $response_array[50];
    $card_type = $response_array[51];
    $split_tender_id = $response_array[52];
    $requested_amount = $response_array[53];
    $balance_on_card = $response_array[54];

    //                    $approved = ($response_code == self::APPROVED);
    //                    $declined = ($response_code == self::DECLINED);
    //                    $error    = ($response_code == self::ERROR);
    //                    $held     = ($response_code == self::HELD);
    $approved = "";
    $declined = "";
    $error = "";
    $held = "";
    if ($response_code == 1) {
        $result['response']['response_code'] = 100;
        $result['response']['gateway_response_code'] = 100;
        $result['response']['responsetext'] = "Success";
        $result['status'] = 'success';

    } elseif ($response_code == 2) {
        $result['response']['response_code'] = 800;
        $result['response']['gateway_response_code'] = 800;
        $result['response']['responsetext'] = "Declined";
        $result['status'] = $response_reason_text;
    } else {
        $result['response']['response_code'] = $response_code;
        $result['response']['gateway_response_code'] = $response_code;
        $result['response']['responsetext'] = $response_reason_text;
        $result['status'] = $response_reason_text;
    }

    $result['method'] = $method;
    $result['md5_hash'] = $md5_hash;
    $result['card_type'] = $card_type;
    $result['account_number'] = $account_number;
    $result['response']['transactionid'] = $transaction_id;
    $result['response']['processor_id'] = "";
    $result['response']['cvvresponse'] = $cavv_response;
    $result['response']['avsresponse'] = $avs_response;
    $result['response']['authcode'] = $authorization_code;
    $result['response']['type'] = "Sale";
    $result['response']['init'] = "no";


    return $result;

}

}

于 2017-04-24T11:47:39.773 回答