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);
|
||||
Reference in New Issue
Block a user