Add remaining project files (exclude ignored folders)
This commit is contained in:
@@ -0,0 +1,117 @@
|
||||
<?php
|
||||
// This is just for very basic implementation reference, in production, you should validate the incoming requests and implement your backend more securely.
|
||||
// Please refer to this docs:
|
||||
// https://docs.midtrans.com/en/core-api/credit-card?id=_2-sending-transaction-data-to-charge-api
|
||||
|
||||
namespace Midtrans;
|
||||
|
||||
require_once dirname(__FILE__) . '/../../Midtrans.php';
|
||||
|
||||
Config::$serverKey = '<your server key>';
|
||||
// Uncomment for append and override notification URL
|
||||
// Config::$appendNotifUrl = "https://example.com";
|
||||
// Config::$overrideNotifUrl = "https://example.com";
|
||||
|
||||
// non-relevant function only used for demo/example purpose
|
||||
printExampleWarningMessage();
|
||||
|
||||
// Uncomment for production environment
|
||||
// Config::$isProduction = true;
|
||||
|
||||
// Uncomment to enable sanitization
|
||||
// Config::$isSanitized = true;
|
||||
|
||||
// Uncomment to enable idempotency-key, more details: (http://api-docs.midtrans.com/#idempotent-requests)
|
||||
// Config::$paymentIdempotencyKey = "Unique-ID";
|
||||
|
||||
$transaction_details = array(
|
||||
'order_id' => time(),
|
||||
'gross_amount' => 200000
|
||||
);
|
||||
|
||||
// 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' => "andri@setiawan.com",
|
||||
'phone' => "081322311801",
|
||||
'billing_address' => $billing_address,
|
||||
'shipping_address' => $shipping_address
|
||||
);
|
||||
|
||||
// Token ID from checkout page
|
||||
$token_id = $_POST['token_id'];
|
||||
$authentication = isset($_POST['secure']);
|
||||
$save_token_id = isset($_POST['save_cc']);
|
||||
|
||||
// Transaction data to be sent
|
||||
$transaction_data = array(
|
||||
'payment_type' => 'credit_card',
|
||||
'credit_card' => array(
|
||||
'token_id' => $token_id,
|
||||
'authentication' => $authentication,
|
||||
// 'bank' => 'bni', // optional acquiring bank
|
||||
'save_token_id' => $save_token_id
|
||||
),
|
||||
'transaction_details' => $transaction_details,
|
||||
'item_details' => $items,
|
||||
'customer_details' => $customer_details
|
||||
);
|
||||
|
||||
try {
|
||||
$response = CoreApi::charge($transaction_data);
|
||||
header('Content-Type: application/json');
|
||||
echo json_encode($response);
|
||||
} catch (\Exception $e) {
|
||||
echo $e->getMessage();
|
||||
}
|
||||
|
||||
function printExampleWarningMessage() {
|
||||
if (strpos(Config::$serverKey, 'your ') != false ) {
|
||||
echo "<code>";
|
||||
echo "<h4>Please set your server key from sandbox</h4>";
|
||||
echo "In file: " . __FILE__;
|
||||
echo "<br>";
|
||||
echo "<br>";
|
||||
echo htmlspecialchars('Config::$serverKey = \'<your server key>\';');
|
||||
die();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,201 @@
|
||||
<?php
|
||||
// This is just for very basic implementation reference, in production, you should validate the incoming requests and implement your backend more securely.
|
||||
// Please refer to this docs:
|
||||
// https://docs.midtrans.com/en/core-api/credit-card?id=_1-getting-the-card-token
|
||||
|
||||
namespace Midtrans;
|
||||
|
||||
require_once dirname(__FILE__) . '/../../Midtrans.php';
|
||||
// Set Your server key
|
||||
// can find in Merchant Portal -> Settings -> Access keys
|
||||
Config::$clientKey = '<your client key>';
|
||||
|
||||
// non-relevant function only used for demo/example purpose
|
||||
printExampleWarningMessage();
|
||||
|
||||
function printExampleWarningMessage() {
|
||||
if (strpos(Config::$clientKey, 'your ') != false ) {
|
||||
echo "<code>";
|
||||
echo "<h4>Please set your client key from sandbox</h4>";
|
||||
echo "In file: " . __FILE__;
|
||||
echo "<br>";
|
||||
echo "<br>";
|
||||
echo htmlspecialchars('Config::$clientKey = \'<your client key>\';');
|
||||
die();
|
||||
}
|
||||
}
|
||||
?>
|
||||
<html>
|
||||
|
||||
<head>
|
||||
<title>Checkout</title>
|
||||
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/featherlight/1.7.12/featherlight.min.css">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<script id="midtrans-script" type="text/javascript" src="https://api.midtrans.com/v2/assets/js/midtrans-new-3ds.min.js" data-environment="sandbox" data-client-key="<?php echo Config::$clientKey;?>"></script>
|
||||
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
|
||||
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/featherlight/1.7.12/featherlight.min.js"></script>
|
||||
|
||||
<h1>Checkout</h1>
|
||||
<form action="checkout-process.php" method="POST" id="payment-form">
|
||||
<fieldset>
|
||||
<legend>Checkout</legend>
|
||||
<small><strong>Field that may be presented to customer:</strong></small>
|
||||
<p>
|
||||
<label>Card Number</label>
|
||||
<input class="card-number" name="card-number" value="4811 1111 1111 1114" size="23" type="text" autocomplete="off" />
|
||||
</p>
|
||||
<p>
|
||||
<label>Expiration (MM/YYYY)</label>
|
||||
<input class="card-expiry-month" name="card-expiry-month" value="12" placeholder="MM" size="2" type="text" />
|
||||
<span> / </span>
|
||||
<input class="card-expiry-year" name="card-expiry-year" value="2025" placeholder="YYYY" size="4" type="text" />
|
||||
</p>
|
||||
<p>
|
||||
<label>CVV</label>
|
||||
<input class="card-cvv" name="card-cvv" value="123" size="4" type="password" autocomplete="off" />
|
||||
</p>
|
||||
<p>
|
||||
<label>Save credit card</label>
|
||||
<input type="checkbox" id="save_cc" name="save_cc" value="true">
|
||||
</p>
|
||||
<small><strong>Fields that shouldn't be presented to the customer:</strong></small>
|
||||
<p>
|
||||
<label>3D Secure</label>
|
||||
<input type="checkbox" id="secure" name="secure" value="true" checked>
|
||||
</p>
|
||||
<input id="token_id" name="token_id" type="hidden" />
|
||||
<button class="submit-button" type="submit">Submit Payment</button>
|
||||
</fieldset>
|
||||
</form>
|
||||
|
||||
<code>
|
||||
<pre>
|
||||
<b>Testing cards:</b>
|
||||
|
||||
<b>For 3D Secure:</b>
|
||||
Visa 4811 1111 1111 1114
|
||||
MasterCard 5211 1111 1111 1117
|
||||
|
||||
<b>For Non 3D Secure:</b>
|
||||
Visa success 4011 1111 1111 1112
|
||||
Visa challenge 4111 1111 1111 1111
|
||||
Visa deny by FDS 4211 1111 1111 1110
|
||||
|
||||
MasterCard success 5481 1611 1111 1081
|
||||
MasterCard challenge 5110 1111 1111 1119
|
||||
MasterCard deny by FDS 5210 1111 1111 1118
|
||||
|
||||
</pre>
|
||||
</code>
|
||||
|
||||
<!-- Javascript for token generation -->
|
||||
<script type="text/javascript">
|
||||
$(function () {
|
||||
// open the console log to check the flow
|
||||
// 3ds new flow:
|
||||
// 1. get token_id
|
||||
// 2. send token_id to backend
|
||||
// 3. initial charge from backend to midtrans api
|
||||
// 4. open redirect_url
|
||||
|
||||
var options = {
|
||||
performAuthentication: function(redirect_url){
|
||||
openDialog(redirect_url);
|
||||
},
|
||||
onSuccess: function(response){
|
||||
console.log('success');
|
||||
console.log('response:',response);
|
||||
closeDialog();
|
||||
},
|
||||
onFailure: function(response){
|
||||
console.log('fail');
|
||||
console.log('response:',response);
|
||||
closeDialog();
|
||||
alert(response.status_message);
|
||||
$('button').removeAttr("disabled");
|
||||
},
|
||||
onPending: function(response){
|
||||
console.log('pending');
|
||||
console.log('response:',response);
|
||||
closeDialog();
|
||||
}
|
||||
};
|
||||
|
||||
function openDialog(url) {
|
||||
$.featherlight({
|
||||
iframe: url,
|
||||
iframeMaxWidth: '80%',
|
||||
iframeWidth: 700,
|
||||
iframeHeight: 500,
|
||||
closeOnClick: false,
|
||||
closeOnEsc: false,
|
||||
closeIcon:''
|
||||
});
|
||||
}
|
||||
|
||||
function closeDialog() {
|
||||
$.featherlight.close();
|
||||
}
|
||||
|
||||
$(".submit-button").click(function (event) {
|
||||
var card = {
|
||||
"card_number": $(".card-number").val(),
|
||||
"card_exp_month": $(".card-expiry-month").val(),
|
||||
"card_exp_year": $(".card-expiry-year").val(),
|
||||
"card_cvv": $(".card-cvv").val()
|
||||
};
|
||||
|
||||
event.preventDefault();
|
||||
$(this).attr("disabled", "disabled");
|
||||
|
||||
console.log('1. get token_id');
|
||||
MidtransNew3ds.getCardToken(card, getCardTokenCallback);
|
||||
return false;
|
||||
});
|
||||
|
||||
// callback functions
|
||||
var getCardTokenCallback = {
|
||||
onSuccess: function(response) {
|
||||
// Success to get card token_id, implement as you wish here
|
||||
console.log('Success to get card token_id, response:', response);
|
||||
var token_id = response.token_id;
|
||||
$("#token_id").val(token_id);
|
||||
|
||||
console.log('This is the card token_id:', token_id);
|
||||
// Implement sending the token_id to backend to proceed to next step
|
||||
console.log('2. send token_id to backend');
|
||||
// send token_id, save_cc and secure params
|
||||
// we send secure param for sample, in production, you should define transaction is secure/not in backend
|
||||
// we recommend always use secure=true
|
||||
// data: $("#token_id, #save_cc, #secure").serialize()
|
||||
$.ajax({
|
||||
type: 'POST',
|
||||
url: 'checkout-process.php',
|
||||
data: $("#token_id, #save_cc, #secure").serialize(),
|
||||
success: function(response){
|
||||
console.log('3. response charge from backend:', response);
|
||||
if (response.redirect_url){
|
||||
console.log('4. open redirect_url');
|
||||
MidtransNew3ds.authenticate(response.redirect_url, options);
|
||||
}
|
||||
},
|
||||
error: function(xhr, status, error){
|
||||
console.error(xhr);
|
||||
}
|
||||
});
|
||||
|
||||
},
|
||||
onFailure: function(response) {
|
||||
// Fail to get card token_id, implement as you wish here
|
||||
console.log('Fail to get card token_id, response:', response);
|
||||
closeDialog();
|
||||
$('button').removeAttr("disabled");
|
||||
}
|
||||
};
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
@@ -0,0 +1,74 @@
|
||||
<?php
|
||||
// This is just for very basic implementation reference, in production, you should validate the incoming requests and implement your backend more securely.
|
||||
|
||||
namespace Midtrans;
|
||||
|
||||
require_once dirname(__FILE__) . '/../../Midtrans.php';
|
||||
// Set Your server key
|
||||
// can find in Merchant Portal -> Settings -> Access keys
|
||||
Config::$serverKey = '<your server key>';
|
||||
|
||||
// non-relevant function only used for demo/example purpose
|
||||
printExampleWarningMessage();
|
||||
|
||||
// define variables and set to empty values
|
||||
$number = "";
|
||||
|
||||
if ($_SERVER["REQUEST_METHOD"] == "POST") {
|
||||
$number = ($_POST["number"]);
|
||||
}
|
||||
|
||||
// required
|
||||
$params = array(
|
||||
"payment_type" => "gopay",
|
||||
"gopay_partner" => array(
|
||||
"phone_number" => $number,
|
||||
"redirect_url" => "https://www.google.com"
|
||||
)
|
||||
);
|
||||
|
||||
$response = '';
|
||||
try {
|
||||
$response = CoreApi::linkPaymentAccount($params);
|
||||
} catch (\Exception $e) {
|
||||
echo $e->getMessage();
|
||||
die();
|
||||
}
|
||||
|
||||
function printExampleWarningMessage() {
|
||||
if (strpos(Config::$serverKey, 'your ') != false ) {
|
||||
echo "<code>";
|
||||
echo "<h4>Please set your server key from sandbox</h4>";
|
||||
echo "In file: " . __FILE__;
|
||||
echo "<br>";
|
||||
echo "<br>";
|
||||
echo htmlspecialchars('Config::$serverKey = \'<your server key>\';');
|
||||
die();
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
||||
|
||||
<!DOCTYPE HTML>
|
||||
<html>
|
||||
<head>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<h2>Simple Gopay Tokenization</h2>
|
||||
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
|
||||
Phone number: <input type="text" name="number">
|
||||
<br><br>
|
||||
<input type="submit" name="submit" value="Submit">
|
||||
</form>
|
||||
|
||||
|
||||
<?php
|
||||
echo "<h2>Result get pay account:</h2>";
|
||||
echo json_encode($response, JSON_UNESCAPED_SLASHES);
|
||||
echo "<br>";
|
||||
?>
|
||||
|
||||
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,50 @@
|
||||
<?php
|
||||
// This is just for very basic implementation reference, in production, you should validate the incoming requests and implement your backend more securely.
|
||||
|
||||
namespace Midtrans;
|
||||
|
||||
require_once dirname(__FILE__) . '/../../Midtrans.php';
|
||||
// Set Your server key
|
||||
// can find in Merchant Portal -> Settings -> Access keys
|
||||
Config::$serverKey = '<your server key>';
|
||||
|
||||
// non-relevant function only used for demo/example purpose
|
||||
printExampleWarningMessage();
|
||||
|
||||
$orderId = '<your order id / transaction id>';
|
||||
// Get transaction status to Midtrans API
|
||||
$status = '';
|
||||
try {
|
||||
$status = Transaction::status($orderId);
|
||||
} catch (\Exception $e) {
|
||||
echo $e->getMessage();
|
||||
die();
|
||||
}
|
||||
|
||||
echo '<pre>';
|
||||
echo json_encode($status);
|
||||
|
||||
function printExampleWarningMessage() {
|
||||
if (strpos(Config::$serverKey, 'your ') != false ) {
|
||||
echo "<code>";
|
||||
echo "<h4>Please set your server key from sandbox</h4>";
|
||||
echo "In file: " . __FILE__;
|
||||
echo "<br>";
|
||||
echo "<br>";
|
||||
echo htmlspecialchars('Config::$serverKey = \'<your server key>\';');
|
||||
die();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Approve a transaction that is in Challenge status
|
||||
// $approve = Transaction::approve($orderId);
|
||||
// var_dump($approve);
|
||||
|
||||
// Cancel a transaction
|
||||
// $cancel = Transaction::cancel($orderId);
|
||||
// var_dump($cancel);
|
||||
|
||||
// Expire a transaction
|
||||
// $expire = Transaction::expire($orderId);
|
||||
// var_dump($expire);
|
||||
@@ -0,0 +1,70 @@
|
||||
<?php
|
||||
// This is just for very basic implementation reference, in production, you should validate the incoming requests and implement your backend more securely.
|
||||
// Please refer to this docs for sample HTTP notifications:
|
||||
// https://docs.midtrans.com/en/after-payment/http-notification?id=sample-of-different-payment-channels
|
||||
|
||||
namespace Midtrans;
|
||||
|
||||
require_once dirname(__FILE__) . '/../Midtrans.php';
|
||||
Config::$isProduction = false;
|
||||
Config::$serverKey = '<your server key>';
|
||||
|
||||
// non-relevant function only used for demo/example purpose
|
||||
printExampleWarningMessage();
|
||||
|
||||
try {
|
||||
$notif = new Notification();
|
||||
}
|
||||
catch (\Exception $e) {
|
||||
exit($e->getMessage());
|
||||
}
|
||||
|
||||
$notif = $notif->getResponse();
|
||||
$transaction = $notif->transaction_status;
|
||||
$type = $notif->payment_type;
|
||||
$order_id = $notif->order_id;
|
||||
$fraud = $notif->fraud_status;
|
||||
|
||||
if ($transaction == 'capture') {
|
||||
// For credit card transaction, we need to check whether transaction is challenge by FDS or not
|
||||
if ($type == 'credit_card') {
|
||||
if ($fraud == 'challenge') {
|
||||
// TODO set payment status in merchant's database to 'Challenge by FDS'
|
||||
// TODO merchant should decide whether this transaction is authorized or not in MAP
|
||||
echo "Transaction order_id: " . $order_id ." is challenged by FDS";
|
||||
} else {
|
||||
// TODO set payment status in merchant's database to 'Success'
|
||||
echo "Transaction order_id: " . $order_id ." successfully captured using " . $type;
|
||||
}
|
||||
}
|
||||
} else if ($transaction == 'settlement') {
|
||||
// TODO set payment status in merchant's database to 'Settlement'
|
||||
echo "Transaction order_id: " . $order_id ." successfully transfered using " . $type;
|
||||
} else if ($transaction == 'pending') {
|
||||
// TODO set payment status in merchant's database to 'Pending'
|
||||
echo "Waiting customer to finish transaction order_id: " . $order_id . " using " . $type;
|
||||
} else if ($transaction == 'deny') {
|
||||
// TODO set payment status in merchant's database to 'Denied'
|
||||
echo "Payment using " . $type . " for transaction order_id: " . $order_id . " is denied.";
|
||||
} else if ($transaction == 'expire') {
|
||||
// TODO set payment status in merchant's database to 'expire'
|
||||
echo "Payment using " . $type . " for transaction order_id: " . $order_id . " is expired.";
|
||||
} else if ($transaction == 'cancel') {
|
||||
// TODO set payment status in merchant's database to 'Denied'
|
||||
echo "Payment using " . $type . " for transaction order_id: " . $order_id . " is canceled.";
|
||||
}
|
||||
|
||||
function printExampleWarningMessage() {
|
||||
if ($_SERVER['REQUEST_METHOD'] != 'POST') {
|
||||
echo 'Notification-handler are not meant to be opened via browser / GET HTTP method. It is used to handle Midtrans HTTP POST notification / webhook.';
|
||||
}
|
||||
if (strpos(Config::$serverKey, 'your ') != false ) {
|
||||
echo "<code>";
|
||||
echo "<h4>Please set your server key from sandbox</h4>";
|
||||
echo "In file: " . __FILE__;
|
||||
echo "<br>";
|
||||
echo "<br>";
|
||||
echo htmlspecialchars('Config::$serverKey = \'<your server key>\';');
|
||||
die();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,110 @@
|
||||
<?php
|
||||
// This is just for very basic implementation reference, in production, you should validate the incoming requests and implement your backend more securely.
|
||||
// Please refer to this docs for snap-redirect:
|
||||
// https://docs.midtrans.com/en/snap/integration-guide?id=alternative-way-to-display-snap-payment-page-via-redirect
|
||||
|
||||
namespace Midtrans;
|
||||
|
||||
require_once dirname(__FILE__) . '/../../Midtrans.php';
|
||||
// Set Your server key
|
||||
// can find in Merchant Portal -> Settings -> Access keys
|
||||
Config::$serverKey = '<your server key>';
|
||||
|
||||
// non-relevant function only used for demo/example purpose
|
||||
printExampleWarningMessage();
|
||||
|
||||
// Uncomment for production environment
|
||||
// Config::$isProduction = true;
|
||||
|
||||
// Uncomment to enable sanitization
|
||||
// Config::$isSanitized = true;
|
||||
|
||||
// Uncomment to enable 3D-Secure
|
||||
// Config::$is3ds = true;
|
||||
|
||||
// Required
|
||||
$transaction_details = array(
|
||||
'order_id' => rand(),
|
||||
'gross_amount' => 145000, // no decimal allowed for creditcard
|
||||
);
|
||||
|
||||
// Optional
|
||||
$item1_details = array(
|
||||
'id' => 'a1',
|
||||
'price' => 50000,
|
||||
'quantity' => 2,
|
||||
'name' => "Apple"
|
||||
);
|
||||
|
||||
// Optional
|
||||
$item2_details = array(
|
||||
'id' => 'a2',
|
||||
'price' => 45000,
|
||||
'quantity' => 1,
|
||||
'name' => "Orange"
|
||||
);
|
||||
|
||||
// Optional
|
||||
$item_details = array ($item1_details, $item2_details);
|
||||
|
||||
// Optional
|
||||
$billing_address = array(
|
||||
'first_name' => "Andri",
|
||||
'last_name' => "Litani",
|
||||
'address' => "Mangga 20",
|
||||
'city' => "Jakarta",
|
||||
'postal_code' => "16602",
|
||||
'phone' => "081122334455",
|
||||
'country_code' => 'IDN'
|
||||
);
|
||||
|
||||
// Optional
|
||||
$shipping_address = array(
|
||||
'first_name' => "Obet",
|
||||
'last_name' => "Supriadi",
|
||||
'address' => "Manggis 90",
|
||||
'city' => "Jakarta",
|
||||
'postal_code' => "16601",
|
||||
'phone' => "08113366345",
|
||||
'country_code' => 'IDN'
|
||||
);
|
||||
|
||||
// Optional
|
||||
$customer_details = array(
|
||||
'first_name' => "Andri",
|
||||
'last_name' => "Litani",
|
||||
'email' => "andri@litani.com",
|
||||
'phone' => "081122334455",
|
||||
'billing_address' => $billing_address,
|
||||
'shipping_address' => $shipping_address
|
||||
);
|
||||
|
||||
// Fill SNAP API parameter
|
||||
$params = array(
|
||||
'transaction_details' => $transaction_details,
|
||||
'customer_details' => $customer_details,
|
||||
'item_details' => $item_details,
|
||||
);
|
||||
|
||||
try {
|
||||
// Get Snap Payment Page URL
|
||||
$paymentUrl = Snap::createTransaction($params)->redirect_url;
|
||||
|
||||
// Redirect to Snap Payment Page
|
||||
header('Location: ' . $paymentUrl);
|
||||
}
|
||||
catch (\Exception $e) {
|
||||
echo $e->getMessage();
|
||||
}
|
||||
|
||||
function printExampleWarningMessage() {
|
||||
if (strpos(Config::$serverKey, 'your ') != false ) {
|
||||
echo "<code>";
|
||||
echo "<h4>Please set your server key from sandbox</h4>";
|
||||
echo "In file: " . __FILE__;
|
||||
echo "<br>";
|
||||
echo "<br>";
|
||||
echo htmlspecialchars('Config::$serverKey = \'<your server key>\';');
|
||||
die();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
<?php
|
||||
$base = $_SERVER['REQUEST_URI'];
|
||||
?>
|
||||
|
||||
<form action="<?php echo $base ?>checkout-process.php" method="GET">
|
||||
<input type="submit" value="Pay with Snap Redirect">
|
||||
</form>
|
||||
@@ -0,0 +1,104 @@
|
||||
<?php
|
||||
// This is just for very basic implementation reference, in production, you should validate the incoming requests and implement your backend more securely.
|
||||
// Please refer to this docs for snap popup:
|
||||
// https://docs.midtrans.com/en/snap/integration-guide?id=integration-steps-overview
|
||||
|
||||
namespace Midtrans;
|
||||
|
||||
require_once dirname(__FILE__) . '/../../Midtrans.php';
|
||||
// Set Your server key
|
||||
// can find in Merchant Portal -> Settings -> Access keys
|
||||
Config::$serverKey = 'SB-Mid-server-RxyojFyK90t-HrWwtDeV0QCO';
|
||||
Config::$clientKey = 'SB-Mid-client-NhMJk2e-7C27nGkV';
|
||||
|
||||
// non-relevant function only used for demo/example purpose
|
||||
printExampleWarningMessage();
|
||||
|
||||
// Uncomment for production environment
|
||||
// Config::$isProduction = true;
|
||||
Config::$isSanitized = Config::$is3ds = true;
|
||||
|
||||
// Required
|
||||
$transaction_details = array(
|
||||
'order_id' => rand(),
|
||||
'gross_amount' => 94000, // no decimal allowed for creditcard
|
||||
);
|
||||
// Optional
|
||||
$item_details = array (
|
||||
array(
|
||||
'id' => 'a1',
|
||||
'price' => 94000,
|
||||
'quantity' => 1,
|
||||
'name' => "Apple"
|
||||
),
|
||||
);
|
||||
// Optional
|
||||
$customer_details = array(
|
||||
'first_name' => "Andri",
|
||||
'last_name' => "Litani",
|
||||
'email' => "andri@litani.com",
|
||||
'phone' => "081122334455"
|
||||
);
|
||||
// Fill transaction details
|
||||
$transaction = array(
|
||||
'transaction_details' => $transaction_details,
|
||||
'customer_details' => $customer_details,
|
||||
'item_details' => $item_details,
|
||||
);
|
||||
|
||||
$snap_token = '';
|
||||
try {
|
||||
$snap_token = Snap::getSnapToken($transaction);
|
||||
}
|
||||
catch (\Exception $e) {
|
||||
echo $e->getMessage();
|
||||
}
|
||||
echo "snapToken = ".$snap_token;
|
||||
|
||||
function printExampleWarningMessage() {
|
||||
if (strpos(Config::$serverKey, 'your ') != false ) {
|
||||
echo "<code>";
|
||||
echo "<h4>Please set your server key from sandbox</h4>";
|
||||
echo "In file: " . __FILE__;
|
||||
echo "<br>";
|
||||
echo "<br>";
|
||||
echo htmlspecialchars('Config::$serverKey = \'<your server key>\';');
|
||||
die();
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
||||
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>PAYMENT </title>
|
||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.0/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-gH2yIJqKdNHPEq0n4Mqa/HGKIhSkIHeL5AyhkYV8i59U5AR6csBvApHHNl/vI1Bx" crossorigin="anonymous">
|
||||
</head>
|
||||
<body>
|
||||
<br>
|
||||
<br>
|
||||
<div class="container">
|
||||
<div class="card">
|
||||
<div class="card-body">
|
||||
<p>Registrasi Berhasil, Selesaikan Pembayaran Sekarang</p>
|
||||
<button id="pay-button" class="btn btn-primary">PILIH METODE PEMBAYARAN</button>
|
||||
|
||||
<!-- TODO: Remove ".sandbox" from script src URL for production environment. Also input your client key in "data-client-key" -->
|
||||
<script src="https://app.sandbox.midtrans.com/snap/snap.js" data-client-key="<?php echo Config::$clientKey;?>"></script>
|
||||
<script type="text/javascript">
|
||||
document.getElementById('pay-button').onclick = function(){
|
||||
// SnapToken acquired from previous step
|
||||
snap.pay('<?php echo $snap_token?>');
|
||||
};
|
||||
</script>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.0/dist/js/bootstrap.bundle.min.js" integrity="sha384-A3rJD856KowSb7dwlZdYEkO39Gagi7vIsF0jrRAoQmDKKtQBHUuLZ9AsSv4jD4Xa" crossorigin="anonymous"></script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,150 @@
|
||||
<?php
|
||||
// This is just for very basic implementation reference, in production, you should validate the incoming requests and implement your backend more securely.
|
||||
// Please refer to this docs for snap popup:
|
||||
// https://docs.midtrans.com/en/snap/integration-guide?id=integration-steps-overview
|
||||
|
||||
namespace Midtrans;
|
||||
|
||||
require_once dirname(__FILE__) . '/../../Midtrans.php';
|
||||
// Set Your server key
|
||||
// can find in Merchant Portal -> Settings -> Access keys
|
||||
Config::$serverKey = '<your server key>';
|
||||
Config::$clientKey = '<your client key>';
|
||||
|
||||
// non-relevant function only used for demo/example purpose
|
||||
printExampleWarningMessage();
|
||||
|
||||
// Uncomment for production environment
|
||||
// Config::$isProduction = true;
|
||||
|
||||
// Enable sanitization
|
||||
Config::$isSanitized = true;
|
||||
|
||||
// Enable 3D-Secure
|
||||
Config::$is3ds = true;
|
||||
|
||||
// Uncomment for append and override notification URL
|
||||
// Config::$appendNotifUrl = "https://example.com";
|
||||
// Config::$overrideNotifUrl = "https://example.com";
|
||||
|
||||
// Required
|
||||
$transaction_details = array(
|
||||
'order_id' => rand(),
|
||||
'gross_amount' => 94000, // no decimal allowed for creditcard
|
||||
);
|
||||
|
||||
// Optional
|
||||
$item1_details = array(
|
||||
'id' => 'a1',
|
||||
'price' => 18000,
|
||||
'quantity' => 3,
|
||||
'name' => "Apple"
|
||||
);
|
||||
|
||||
// Optional
|
||||
$item2_details = array(
|
||||
'id' => 'a2',
|
||||
'price' => 20000,
|
||||
'quantity' => 2,
|
||||
'name' => "Orange"
|
||||
);
|
||||
|
||||
// Optional
|
||||
$item_details = array ($item1_details, $item2_details);
|
||||
|
||||
// Optional
|
||||
$billing_address = array(
|
||||
'first_name' => "Andri",
|
||||
'last_name' => "Litani",
|
||||
'address' => "Mangga 20",
|
||||
'city' => "Jakarta",
|
||||
'postal_code' => "16602",
|
||||
'phone' => "081122334455",
|
||||
'country_code' => 'IDN'
|
||||
);
|
||||
|
||||
// Optional
|
||||
$shipping_address = array(
|
||||
'first_name' => "Obet",
|
||||
'last_name' => "Supriadi",
|
||||
'address' => "Manggis 90",
|
||||
'city' => "Jakarta",
|
||||
'postal_code' => "16601",
|
||||
'phone' => "08113366345",
|
||||
'country_code' => 'IDN'
|
||||
);
|
||||
|
||||
// Optional
|
||||
$customer_details = array(
|
||||
'first_name' => "Andri",
|
||||
'last_name' => "Litani",
|
||||
'email' => "andri@litani.com",
|
||||
'phone' => "081122334455",
|
||||
'billing_address' => $billing_address,
|
||||
'shipping_address' => $shipping_address
|
||||
);
|
||||
|
||||
// Optional, remove this to display all available payment methods
|
||||
$enable_payments = array('credit_card','cimb_clicks','mandiri_clickpay','echannel');
|
||||
|
||||
// Fill transaction details
|
||||
$transaction = array(
|
||||
'enabled_payments' => $enable_payments,
|
||||
'transaction_details' => $transaction_details,
|
||||
'customer_details' => $customer_details,
|
||||
'item_details' => $item_details,
|
||||
);
|
||||
|
||||
$snap_token = '';
|
||||
try {
|
||||
$snap_token = Snap::getSnapToken($transaction);
|
||||
}
|
||||
catch (\Exception $e) {
|
||||
echo $e->getMessage();
|
||||
}
|
||||
|
||||
echo "snapToken = ".$snap_token;
|
||||
|
||||
function printExampleWarningMessage() {
|
||||
if (strpos(Config::$serverKey, 'your ') != false ) {
|
||||
echo "<code>";
|
||||
echo "<h4>Please set your server key from sandbox</h4>";
|
||||
echo "In file: " . __FILE__;
|
||||
echo "<br>";
|
||||
echo "<br>";
|
||||
echo htmlspecialchars('Config::$serverKey = \'<your server key>\';');
|
||||
die();
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
||||
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<body>
|
||||
<button id="pay-button">Pay!</button>
|
||||
<pre><div id="result-json">JSON result will appear here after payment:<br></div></pre>
|
||||
|
||||
<!-- TODO: Remove ".sandbox" from script src URL for production environment. Also input your client key in "data-client-key" -->
|
||||
<script src="https://app.sandbox.midtrans.com/snap/snap.js" data-client-key="<?php echo Config::$clientKey;?>"></script>
|
||||
<script type="text/javascript">
|
||||
document.getElementById('pay-button').onclick = function(){
|
||||
// SnapToken acquired from previous step
|
||||
snap.pay('<?php echo $snap_token?>', {
|
||||
// Optional
|
||||
onSuccess: function(result){
|
||||
/* You may add your own js here, this is just example */ document.getElementById('result-json').innerHTML += JSON.stringify(result, null, 2);
|
||||
},
|
||||
// Optional
|
||||
onPending: function(result){
|
||||
/* You may add your own js here, this is just example */ document.getElementById('result-json').innerHTML += JSON.stringify(result, null, 2);
|
||||
},
|
||||
// Optional
|
||||
onError: function(result){
|
||||
/* You may add your own js here, this is just example */ document.getElementById('result-json').innerHTML += JSON.stringify(result, null, 2);
|
||||
}
|
||||
});
|
||||
};
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,16 @@
|
||||
<?php
|
||||
$base = $_SERVER['REQUEST_URI'];
|
||||
?>
|
||||
|
||||
<h3>Selected Items:</h3>
|
||||
<ul>
|
||||
<li>Jeruk 2 kg x @20000</li>
|
||||
<li>Apel 3 kg x @18000</li>
|
||||
</ul>
|
||||
|
||||
<h4>Total: Rp 94.000,00</h4>
|
||||
|
||||
<form action="<?php echo $base ?>checkout-process.php" method="POST">
|
||||
<input type="hidden" name="amount" value="94000"/>
|
||||
<input type="submit" value="Confirm">
|
||||
</form>
|
||||
Reference in New Issue
Block a user