authorize.net — подключение и работа

    Довелось мне делать интернет магазин, в котором оплату нужно было проводить кредитными картами. И всё не беда, если бы заказчика устроил PayPal.Точнее тогда я об этом ещё не знал. Заказчик имел мерчант-аккаунт на authorize.net. В ходе поисков нормальной системы оплаты авторайз был мною отброшен по причине убогости сайта. Сайт оставляет ощущение, что проект давно заброшен, и никто им не занимается. Ну да ладно. Клиент всегда прав. Итак.

    Что делает в первую очередь разработчик столкнувшись с задачей стандартной, но доселе им не реализованной? Правильно! Идёт в интернет и ищет готовые решения. Не исключено что это я плохой пользователь Гугла. Но, тем не менее — все готовые реализации были не более чем копиями sample кода взятого на сайте конторы. Ни тебе комментариев в коде, ни тебе сопроводительной записки.

    Следующий шаг: курениечтение мануала на сайте разработчика. Единственное что помог сделать мануал — понять, что на самом деле лишнее в сэмпл коде. Далее я предлагаю свои советы по работе с данным сервисом. Это частично и перевод руководства, и личный опыт.


    Для работы нужен либо merchant аккаунт, либо тест. Получить тестовый можно на сайте авторайз.нет

    Следует отметить, что приходят эти данные в двух экземплярах: Card Not Present и Card Present. Первый это вариант когда продавец не получает в руки карточку для проверки введённых данных пользователем. Второй — наоборот. Нас интересует первый.

    Есть несколько вариантов интеграции сервиса к себе на сайт.

    1) Advanced Integration Method (AIM). Позволяет держать у себя форму, заполняемую покупателем и отправлять данные по SSL на сервер провайдера услуги (в нашем случае — Authorize.net)

    2) Server Integration Method (SIM). Практически то-же самое только вам предоставят ещё и html форму.

    Как выбрать API?

    шаг 1: выбор типа работы. У нас это Card Not Present.

    шаг 2: есть ли на вашем хосте SSL? если есть — можно использовать AIM, если нет — нужно использовать SIM.

    шаг 3: нужно ли вам что бы форма указывала на ваш домен? если да — нужно использовать AIM, если нет — можно SIM

    шаг 4: нужно ли запоминать сессию пользователя в процессе оплаты. Да — только AIM, нет — можно SIM

    В моём случае походил только вариант AIM. Поэтому о нём и поговорим. К слову сказать — SIM практически ни чем не отличается.
    1) Массив параметров для проведения транзакции.

    Что нам нужно? Merchant или test аккаунт.

    $auth_net_login_id и $autn_net_tran_key — логин и ключ транзакции.

    приходят они на почту в таком виде:
    API Login: 6zz6m5N4Et
    Transaction Key: 9V9wUv6Yd92t27t5
    это тестовый аккаунт, так что не нужно сразу потирать ручки
    $authnet_values = array
    (
    “x_login” => $auth_net_login_id,
    “x_version” => “3.1″,
    “x_delim_char” => “|”,
    “x_delim_data” => “TRUE”,
    “x_url” => “FALSE”,
    “x_type” => “AUTH_CAPTURE”,
    “x_method” => “CC”,
    “x_tran_key” => $auth_net_tran_key,
    “x_relay_response” => “FALSE”,
    “x_card_num” => “4242424242424242″,
    “x_exp_date” => “1209″,
    “x_description” => “Recycled Toner Cartridges”,
    “x_amount” => “12.23″,
    “x_first_name” => “Charles D.”,
    “x_last_name” => “Gaulle”,
    “x_address” => “342 N. Main Street #150″,
    “x_city” => “Ft. Worth”,
    “x_state” => “TX”,
    “x_zip” => “12345″,
    “CustomerBirthMonth” => “Customer Birth Month: 12″,
    “CustomerBirthDay” => “Customer Birth Day: 1″,
    “CustomerBirthYear” => “Customer Birth Year: 1959″,
    “SpecialCode” => “Promotion: Spring Sale”,
    );

    Этот массив взят из семпл кода. Давайте разберёмся, что же это всё значит и нужно ли оно нам на самом деле.

    Обязательные параметры:

    x_login — API Login ID.

    x_tran_key — Transaction Key

    x_type — тип транзакции.
    Типы транзакций:

    AUTH_CAPTURE — авторизация и оплата. Всё в одном флаконе. Проверка карточки и если всё хорошо — проводим сразу и оплату.

    AUTH_ONLY — только авторизация. Проверка карты на валидность. Из ответа нужно сохранить Transaction ID

    PRIOR_AUTH_CAPTURE — завершает транзакцию, которая успешно прошла авторизацию. Для этого и нужен Transaction ID. Требования: оригинальная транзакция была проведена не позднее 30 дней; получен валидный tansaction Id; оригинальная транзакция не проведена, не истекла, не было ошибки: сумма меньше или равна сумме из оригинальной транзакции. Оригинальная транзакция — проведённая методом AUTH_ONLY, в результате чего был получен Transaction ID.

    CAPTURE_ONLY — завершает транзакцию, которая не была послана на шлюз или требует голосового подтверждения. По сути — ручное подтверждение в merchant интерфейсе. То есть продавец должен вручную на сайте авторайза подтвердить эту транзакцию. Добавляется обязательный параметр:

    x_auth_code=Authorization Code

    CREDIT — используется для возврата уже проведённой транзакции. Дополнительные параметры:

    x_trans_id=Transaction ID
    x_card_num=полный номер карты или последние 4 цифры
    Требования: транзакция была успешно проведена и был получен Transaction ID; сумма для возврата меньше или равна оплаченной сумме; если возврат делался частями — сумма меньше или равна оплаченной; возврат проводится не позднее 120 дней.

    VOID — для отмены отправленной транзакции, что бы избежать её обработки. Дополнительный параметр: x_trans_id=Transaction ID

    x_amount — сумма перевода с двумя знаками после точки. Например: 8.95 или 10.00. Длина до 15 символов.

    x_card_num — от 13 до 16 цифр — номер карты без пробелов. Если x_type=CREDIT — только последние 4 цифры.

    x_exp_date — дата истечения карты. Форматы: MMYY, MM/YY, MM-YY, MMYYYY, MM/YYYY, MM-YYYY

    x_trans_id — transaction ID. Нужен только если x_type=CREDIT, PRIOR_AUTH_CAPTURE, или VOID

    x_auth_code — 6 символов. Код авторизации оригинальной транзакции не проведённой на шлюзе. Нужен только если x_type=CAPTURE_ONLY

    Остальные парметры в принципе понятны и так. О них при желании можно почитать в руководстве.

    Опишу только приведённые в примере.

    x_version — опционально но очень рекоммендовано. Версия транзакции покупателя. Формат: 3.1 Версия указывает на список полей, которые продавец получит в ответе сервера.

    x_delim_char — опционально. Символ которым будут разделятся данные в строке ответа.

    x_delim_data — требуется для AIM транзакций. Указывается для получени разграниченного ответа.

    x_url — в руководстве не описан. Но насколько я понял — это урл на который будет сделан редирект покупателя просле проведения транзакции.

    x_method — опционально. Метод оплаты: CC(credit card) или ECHECK(electronic check). Формат: CC, ECHECK.

    x_relay_response — в руководстве не описан. Оо

    x_description — опционально. Описание транзакции. До 255 символов.

    x_first_name, x_last_name, x_address, x_city, x_state, x_zip, CustomerBirthMonth, CustomerBirthDay, CustomerBirthYear — данные покупателя. Опционально.

    SpecialCode — в руководстве не описан.
    2) Подготовка данных к отправке.
    fields = “”;
    foreach( $authnet_values as $key => $value ) $fields .= “$key=”. urlencode( $value ). “&”;

    3) Отправка данных
    $ch = curl_init(”https://test.authorize.net/gateway/transact.dll”);
    //верхняя строка для тест аккаунтов, нижняя для merchant
    // $ch = curl_init(”https://secure.authorize.net/gateway/transact.dll”);
    curl_setopt($ch, CURLOPT_HEADER, 0); // установить на 0 что бы убрать header info из ответа
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // возвращает ответ если 1
    curl_setopt($ch, CURLOPT_POSTFIELDS, rtrim( $fields, “& ” )); // использование HTTP POST to для отправки данных
    //curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); // раскомментировать, если не получаете вообще никакого ответа от сервера.
    $resp = curl_exec($ch); //execute post and get results
    curl_close ($ch);

    4) В сэмпл коде сделан вывод всех параметров приходящих в ответе сервера. Я сократил этот код для вывода нужных данных.
    for($j=1; $j <= $h; $j++){
    $p = strpos($text, “|”);
    $p++;
    $pstr = substr($text, 0, $p);

    //подготавливает текст и возвращает пары имя->значение
    $pstr_trimmed = substr($pstr, 0, -1); // удаляет “|” в конце строки.

    if($pstr_trimmed==”"){
    $pstr_trimmed=”NO VALUE RETURNED”;
    }

    if ($j == 1) {
    $fval=”";
    if($pstr_trimmed==”1″){
    $fval=”Approved”;
    }elseif($pstr_trimmed==”2″){
    $fval=”Declined”;
    }elseif($pstr_trimmed==”3″){
    $fval=”Error”;
    }
    }elseif ($j == 7){
    // transaction ID
    $trans_id = $pstr_trimmed;
    }
    // убрать часть, которую уже определили, и работать с оставшейся строкой.
    $text = substr($text, $p);
    }

    Вот собственно и всё. Это так сказать минимум необходимый для проведения успешной транзакции. Надеюсь эта статья кому-то пригодится

    Similar posts

    Ads
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More

    Comments 6

      0
      Authorize.net далеко не заброшен и им пользуются..
        0
        дык. я же не утверждаю что он заброшен. просто лично на меня их сайт произвёл именно такое впечатление
          0
          Сам authorize.net не открывает мерчант аккаунты, а делает это через банки партнеры или подключает уже готовые. Authorize.net это карточный шлюз между банком и продавцом.
            0
            пускай так :) всё таки статья о том как с авторайзом работать а не откуда получить мерчант аккаунт. для того что бы научится - вполне достаточно и тест аккаунта который можно получить непосредственно на сайте авторайза.
              0
              Я всего лишь прокомментировал вашу фразу: "Заказчик имел мерчант-аккаунт на authorize.net."
                0
                ясно. сразу просто не понял :)

          Only users with full accounts can post comments. Log in, please.