Veritrans-PHP
, (*1)
Veritrans :heart: PHP!, (*2)
This is the all new PHP client library for Veritrans 2.0. This is the official PHP wrapper for Veritrans Payment API. Visit https://www.veritrans.co.id for more information about the product and see documentation at http://docs.veritrans.co.id for more technical details., (*3)
Installation
Composer Installation
If you are using Composer, add this require line to your composer.json
file:, (*4)
{
"require": {
"veritrans/veritrans-php": "dev-master"
}
}
and run composer install
on your terminal., (*5)
Manual Instalation
If you are not using Composer, you can clone or download this repository., (*6)
How to Use
General Settings
Set Server Key
Veritrans_Config::$serverKey = '<your server key>';
Set Client Key (VT-Direct)
Veritrans.client_key = "<your client key>";
Set Environment
// Development Environment (the default)
Veritrans_Config::$isProduction = false;
// Production Environment
Veritrans_Config::$isProduction = true;
Set Sanitization
// Set sanitization off (default)
Veritrans_Config::$isSanitized = false;
// Set sanitization on
Veritrans_Config::$isSanitized = true;
VT-Web
You can see some VT-Web examples here., (*7)
Get Redirection URL of a Charge
$params = array(
'transaction_details' => array(
'order_id' => rand(),
'gross_amount' => 10000,
),
'vtweb' => array()
);
try {
// Redirect to Veritrans VTWeb page
header('Location: ' . Veritrans_Vtweb::getRedirectionUrl($params));
}
catch (Exception $e) {
echo $e->getMessage();
}
Handle Notification Callback
$notif = new Veritrans_Notification();
$transaction = $notif->transaction_status;
$fraud = $notif->fraud_status;
error_log("Order ID $notif->order_id: "."transaction status = $transaction, fraud staus = $fraud");
if ($transaction == 'capture') {
if ($fraud == 'challenge') {
// TODO Set payment status in merchant's database to 'challenge'
}
else if ($fraud == 'accept') {
// TODO Set payment status in merchant's database to 'success'
}
}
else if ($transaction == 'cancel') {
if ($fraud == 'challenge') {
// TODO Set payment status in merchant's database to 'failure'
}
else if ($fraud == 'accept') {
// TODO Set payment status in merchant's database to 'failure'
}
}
else if ($transaction == 'deny') {
// TODO Set payment status in merchant's database to 'failure'
}
}
VT-Direct
You can see some VT-Direct examples here., (*8)
Checkout Page
<html>
<head>
<title>Checkout</title>
<link rel="stylesheet" href="jquery.fancybox.css">
</head>
<body>
Checkout
</body>
</html>
Checkout Process
1. Create Transaction Details
$transaction_details = array(
'order_id' => time(),
'gross_amount' => 200000
);
2. Create Item Details, Billing Address, Shipping Address, and Customer Details (Optional)
// Populate items
$items = array(
array(
'id' => 'item1',
'price' => 100000,
'quantity' => 1,
'name' => 'Adidas f50'
),
array(
'id' => 'item2',
'price' => 50000,
'quantity' => 2,
'name' => 'Nike N90'
));
// Populate customer's billing address
$billing_address = array(
'first_name' => "Andri",
'last_name' => "Setiawan",
'address' => "Karet Belakang 15A, Setiabudi.",
'city' => "Jakarta",
'postal_code' => "51161",
'phone' => "081322311801",
'country_code' => 'IDN'
);
// Populate customer's shipping address
$shipping_address = array(
'first_name' => "John",
'last_name' => "Watson",
'address' => "Bakerstreet 221B.",
'city' => "Jakarta",
'postal_code' => "51162",
'phone' => "081322311801",
'country_code' => 'IDN'
);
// Populate customer's info
$customer_details = array(
'first_name' => "Andri",
'last_name' => "Setiawan",
'email' => "test@test.com",
'phone' => "081322311801",
'billing_address' => $billing_address,
'shipping_address' => $shipping_address
);
3. Get Token ID from Checkout Page
// Token ID from checkout page
$token_id = $_POST['token_id'];
4. Create Transaction Data
// Transaction data to be sent
$transaction_data = array(
'payment_type' => 'credit_card',
'credit_card' => array(
'token_id' => $token_id,
'bank' => 'bni',
'save_token_id' => isset($_POST['save_cc'])
),
'transaction_details' => $transaction_details,
'item_details' => $items,
'customer_details' => $customer_details
);
5. Charge
$response = Veritrans_VtDirect::charge($transaction_data);
6. Handle Transaction Status
// Success
if($response->transaction_status == 'capture') {
echo "
Transaksi berhasil., (*13)
";
echo "
Status transaksi untuk order id $response->order_id: " .
"$response->transaction_status, (*14)
";
echo "
Detail transaksi:
";
echo "
";
var_dump($response);
echo "
";
}
// Deny
else if($response->transaction_status == 'deny') {
echo "
Transaksi ditolak., (*15)
";
echo "
Status transaksi untuk order id .$response->order_id: " .
"$response->transaction_status, (*16)
";
echo "
Detail transaksi:
";
echo "
";
var_dump($response);
echo "
";
}
// Challenge
else if($response->transaction_status == 'challenge') {
echo "
Transaksi challenge., (*17)
";
echo "
Status transaksi untuk order id $response->order_id: " .
"$response->transaction_status, (*18)
";
echo "
Detail transaksi:
";
echo "
";
var_dump($response);
echo "
";
}
// Error
else {
echo "
Terjadi kesalahan pada data transaksi yang dikirim., (*19)
";
echo "
Status message: [$response->status_code] " .
"$response->status_message, (*20)
";
echo "
";
var_dump($response);
echo "
";
}
Process Transaction
Get a Transaction Status
$status = Veritrans_Transaction::status($orderId);
var_dump($status);
Approve a Transaction
$approve = Veritrans_Transaction::approve($orderId);
var_dump($approve);
Cancel a Transaction
$cancel = Veritrans_Transaction::cancel($orderId);
var_dump($cancel);
Contributing
Developing e-commerce plug-ins
There are several guides that must be taken care of when you develop new plugins., (*21)
-
Handling currency other than IDR. Veritrans v1
and v2
currently accepts payments in Indonesian Rupiah only. As a corrolary, there is a validation on the server to check whether the item prices are in integer or not. As much as you are tempted to round-off the price, DO NOT do that! Always prepare when your system uses currencies other than IDR, convert them to IDR accordingly, and only round the price AFTER that., (*22)
-
Consider using the auto-sanitization feature., (*23)