Я пытаюсь интегрировать First Data e4 Gateway с помощью PHP. Я загрузил API API First Data Service VinceG/php-first-data-api. Код содержит несколько примеров.
У меня есть ID терминала (API_LOGIN) и Пароль (32 символьная строка).
Меня смущает то, что, когда я использую один из примеров, я не знаю, как сказать классу, что я хочу использовать демо-url, а не производственный url.
Класс поставляется с двумя константами:
const LIVE_API_URL = 'https://api.globalgatewaye4.firstdata.com/transaction/';
const TEST_API_URL = 'https://api.demo.globalgatewaye4.firstdata.com/transaction/';
В консоли First Data, когда я сгенерировал свой пароль, он сказал использовать v12 api, /transaction/v12
, поэтому я изменил protected $apiVersion = 'v12';
Все, что я хочу сделать, это написать мою первую транзакцию разработки, используя First Data e4. Я еще не получил никакого ответа. Очевидно, мне нужно много рук, чтобы начать.
Когда я настраивал веб-сайт для использования BalancedPayments, у них есть форум поддержки, который очень хорош, и я смог добиться этого достаточно быстро. У First Data много документации, но по некоторым причинам не так много хороших примеров PHP.
Я надеюсь, что какой-то эксперт уже освоил VinceG/php-first-data-api и может помочь мне написать один скрипт, который работает.
Здесь используется код pre-auth, который вызывает класс FirstData:
// Pre Auth Transaction Type
define("API_LOGIN", "B123456-01");
define("API_KEY", "xxxxxxxxxxyyyyyyyyyyyyzzzzzzzzzz");
$data = array();
$data['type'] = "00";
$data['number'] = "4111111111111111";
$data['name'] = "Cyrus Vance";
$data['exp'] = "0618";
$data['amount'] = "100.00";
$data['zip'] = "33333";
$data['cvv'] = "123";
$data['address'] = "1111 OCEAN BLVD MIAMI FL";
$orderId = "0001";
require_once("FirstData.php");
$firstData = new FirstData(API_LOGIN, API_KEY, true);
// Charge
$firstData->setTransactionType(FirstData::TRAN_PREAUTH);
$firstData->setCreditCardType($data['type'])
->setCreditCardNumber($data['number'])
->setCreditCardName($data['name'])
->setCreditCardExpiration($data['exp'])
->setAmount($data['amount'])
->setReferenceNumber($orderId);
if($data['zip']) {
$firstData->setCreditCardZipCode($data['zip']);
}
if($data['cvv']) {
$firstData->setCreditCardVerification($data['cvv']);
}
if($data['address']) {
$firstData->setCreditCardAddress($data['address']);
}
$firstData->process();
// Check
if($firstData->isError()) {
echo "!!!";
// there was an error
} else {
echo "@@@";
// transaction passed
}
Моя проблема номер один состояла в том, что я не создал (применял для мгновенного одобрения) демо-учетную запись в First Data. Я не понял, что это была отдельная вещь в First Data. Например, в Balanced Payments у вас есть одна учетная запись, и вы можете запустить свой скрипт на тестовом URL-адресе с тестовыми значениями.
На панели "Администрирование" нажмите "Терминалы", затем номер шлюза в строке ECOMM (будет выглядеть как AH1234-03), затем вы должны нажать "Создать" на пароле, сохранив его в своих личных заметках), затем нажмите "ОБНОВЛЕНИЕ".
Теперь замените значения параметров в тестовых сценариях. Я использую блок назначения переменных, который выглядит примерно так:
define("API_LOGIN", "AH1234-05"); //fake
define("API_KEY", "44p7797xxx790098z1z2n6f270ys1z0x"); //fake
$data = array();
$data['type'] = "03";
$data['number'] = "4111111111111111";
$data['name'] = "Cyrus Vancce";
$data['exp'] = "0618";
$data['amount'] = "100.00";
$data['zip'] = "33320";
$data['cvv'] = "123";
$data['address'] = "1234 N OCEAN BLVD MIAMI BEACH FL";
$orderId = "0001";
require_once("FirstData.php");
$firstData = new FirstData(API_LOGIN, API_KEY, true);
в конце тестовых скриптов VinceG я выдаю свой ответ на шлюз с помощью print_r, например:
$firstData->process();
// Check
if($firstData->isError()) {
echo "!!!";
// there was an error
} else {
echo "@@@";
// transaction passed
}
echo "<pre>";
print_r($firstData);