Hi Team
I need some help, i have two tables when merchant process payment one is cancel_payment(this updates when merchants cancel their process) but payments table is the one that is not storing the merchant details and need some help from this part.
What I have tried:
// payment_integration logic to process payment through payfast live .
<pre><?php
session_start();
function savePaymentData($data)
{
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "ecommerce_store";
$pdo = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
$stmt = $pdo->prepare("INSERT INTO payments (merchant_id, merchant_key, return_url, cancel_url, notify_url, name_first, name_last, email_address, m_payment_id, amount, item_name)
VALUES (:merchant_id, :merchant_key, :return_url, :cancel_url, :notify_url, :name_first, :name_last, :email_address, :m_payment_id, :amount, :item_name)");
$stmt->bindParam(':merchant_id', $data['merchant_id']);
$stmt->bindParam(':merchant_key', $data['merchant_key']);
$stmt->bindParam(':return_url', $data['return_url']);
$stmt->bindParam(':cancel_url', $data['cancel_url']);
$stmt->bindParam(':notify_url', $data['notify_url']);
$stmt->bindParam(':name_first', $data['name_first']);
$stmt->bindParam(':name_last', $data['name_last']);
$stmt->bindParam(':email_address', $data['email_address']);
$stmt->bindParam(':m_payment_id', $data['m_payment_id']);
$stmt->bindParam(':amount', $data['amount']);
$stmt->bindParam(':item_name', $data['item_name']);
$stmt->execute();
}
$cartTotal = 10.00;
$passphrase = '';
$data = array(
'merchant_id' => '***',
'merchant_key' => '***',
'return_url' => 'http://localhost:8080/payment_return.php',
'cancel_url' => 'http://localhost:8080/eCommerce/eshopper/eshopper-1.0.0/payment_cancel.php',
'notify_url' => 'http://localhost:8080/payment_notify.php',
'name_first' => 'Jackson ',
'name_last' => 'Pty Ltd',
'email_address'=> 'gcira2023@outlook.com',
'm_payment_id' => '1234',
'amount' => number_format( sprintf( '%.2f', $cartTotal ), 2, '.', '' ),
'item_name' => 'Order#123'
);
$testingMode = false;
$pfHost = 'www.payfast.co.za';
$merchantID = $data['merchant_id'];
$merchantKey = $data['merchant_key'];
$amount = $data['amount'];
$htmlForm = '<div class="card text-center">
<div class="card-body text-center p-0 d-flex flex-column align-items-center">
<div class="col-lg-6 mx-auto">
<div class="blog-3-each mb-30 transition-4">
<div class="blog-date text-left text-sm-center">
<img src="img/payfast.png" alt="Icon">
</div>
<div class="blog-content">
<h5 class="fs-19 f-700 mb-10">
<a href="#"> PayFast Method</a>
</h5>
<div class="hr-1 opacity-1 mt-10 mb-10"></div>
<p> You can easily make an online payment below using PayFast.</p>
<form name="PayFastPayNowForm" action="https://www.payfast.co.za/eng/process" method="post">
<input required type="hidden" name="cmd" value="_paynow">
<input required type="hidden" name="receiver" pattern="[0-9]" value="' . $data['merchant_id'] . '">
<input required type="hidden" name="item_name" maxlength="255" value="Pay Now">
<input required type="amount" name="amount" value="'. $data['amount'].'">
<input required type="hidden" name="merchant_id" value="' . $data['merchant_id'] . '">
<input required type="hidden" name="merchant_key" value="' . $data['merchant_key'] . '">
<input required type="hidden" name="return_url" value="' . $data['return_url'] . '">
<input required type="hidden" name="cancel_url" value="' . $data['cancel_url'] . '">
<input required type="hidden" name="notify_url" value="' . $data['notify_url'] . '">
<input required type="hidden" name="email_address" value="' . $data['email_address'] . '">
<input required type="hidden" name="name_first" value="' . $data['name_first'] . '">
<input required type="hidden" name="name_last" value="' . $data['name_last'] . '">
<div class="text-center">
<input type="image" src="https://my.payfast.io/images/buttons/PayNow/Dark-Large-PayNow.png" alt="Pay Now" title="Pay Now with Payfast">
</div>
</form>
</div>
</div>
</div>
</div>
</div>';
echo $htmlForm;
?>
//payment_cancel.php
<pre><?php
require_once 'save_payment_data.php';
function saveCanceledPaymentData($data)
{
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "ecommerce_store";
$pdo = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
$stmt = $pdo->prepare("INSERT INTO canceled_payments (payment_id, cancel_reason, cancellation_time)
VALUES (:payment_id, :cancel_reason, NOW())");
$stmt->bindParam(':payment_id', $data['payment_id']);
$stmt->bindParam(':cancel_reason', $data['cancel_reason']);
$stmt->execute();
}
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$payment_id = $_POST['payment_id'];
$cancel_reason = $_POST['cancel_reason'];
$data = array(
'payment_id' => $payment_id,
'cancel_reason' => $cancel_reason
);
saveCanceledPaymentData($data);
header("Location: cancel_confirmation.php");
exit;
}
?>
//save_payment_data.php
<pre><?php
session_start();
function savePaymentData($data)
{
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "ecommerce_store";
$pdo = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
$stmt = $pdo->prepare("INSERT INTO payments (merchant_id, merchant_key, return_url, cancel_url, notify_url, name_first, name_last, email_address, m_payment_id, amount, item_name)
VALUES (:merchant_id, :merchant_key, :return_url, :cancel_url, :notify_url, :name_first, :name_last, :email_address, :m_payment_id, :amount, :item_name)");
$stmt->bindParam(':merchant_id', $data['merchant_id']);
$stmt->bindParam(':merchant_key', $data['merchant_key']);
$stmt->bindParam(':return_url', $data['return_url']);
$stmt->bindParam(':cancel_url', $data['cancel_url']);
$stmt->bindParam(':notify_url', $data['notify_url']);
$stmt->bindParam(':name_first', $data['name_first']);
$stmt->bindParam(':name_last', $data['name_last']);
$stmt->bindParam(':email_address', $data['email_address']);
$stmt->bindParam(':m_payment_id', $data['m_payment_id']);
$stmt->bindParam(':amount', $data['amount']);
$stmt->bindParam(':item_name', $data['item_name']);
$stmt->execute();
}
?>