TARKUS
TARKUS

Reputation: 2200

How to invoke the demo url using VinceG php-first-data-api

I am trying to integrate First Data e4 Gateway using PHP. I downloaded the VinceG/php-first-data-api PHP First Data Service API class. The code comes with some examples.

I have my Terminal ID (API_LOGIN) and Password (32 character string).

What confuses me is that when I use one of the examples, I don't know how to tell the class that I want to use the demo url, not the production url.

The class comes with two constants:

const LIVE_API_URL = 'https://api.globalgatewaye4.firstdata.com/transaction/';
const TEST_API_URL = 'https://api.demo.globalgatewaye4.firstdata.com/transaction/';

In the First Data console, when I generated my password, it said to use the v12 api, /transaction/v12, so I changed the protected $apiVersion = 'v12';

All I want to do is write my first development transaction using First Data e4. I have yet to get any kind of response. Obviously I need a lot of hand holding to get started.

When I set up a website to use BalancedPayments, they have a support forum that's pretty good, and I was able to get that running fairly quickly. First Data has a lot of documentation, but for some reason not much of it has good PHP examples.

My hope is that some expert has already mastered the VinceG/php-first-data-api, and can help me write one script that works.

Here's the pre-auth code I'm using, that invokes the FirstData class:

// 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
}

Upvotes: 0

Views: 527

Answers (1)

TARKUS
TARKUS

Reputation: 2200

My number one problem was that I had not created (applied for, with instant approval) a demo account on First Data. I didn't realize this was a separate thing on First Data. On Balanced Payments, for instance, you have one account, and you can run your script on a test url with test values.

From the Administration panel, click "Terminals", then your Gateway number on the ECOMM row (will look something like AH1234-03), then you have to click "Generate" on password save it to your personal notes), then click UPDATE.

Now replace your parameter values in your test scripts. I use a variable assignment block that looks something like this:

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);

at the end of the VinceG test scripts, I output my gateway response with a print_r, like this:

$firstData->process();

// Check
if($firstData->isError()) {
    echo "!!!";
    // there was an error
} else {
    echo "@@@";
    // transaction passed
}
echo "<pre>";
print_r($firstData);

Upvotes: 0

Related Questions