Files
ms1inscription-v5/paypal_advanced/paypal_checkout_init.php
2026-05-13 09:43:32 -04:00

350 lines
14 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
//error_reporting(E_ALL);
//ini_set('display_errors', '0');
//ini_set('log_errors', '1');
//ini_set('error_log', __DIR__ . '/php_errors.log');
require_once('../php/inc_start_time.php');
require_once('../php/inc_fonctions.php');
require_once('../php/inc_fx_panier.php');
require_once('../php/inc_fx_messages.php');
global $vPaypal_devise,$objDatabase,$itemNumber ,$itemName,$itemPrice,$currency ,$vblnEnvironementDev,$vDomaine, $vClient, $strCode, $strLangue, $vRepertoireFichiers,$vPaypaladv_SANDBOX;
// Include the configuration file
require_once '../paypal_advanced/config.php';
// Include the database connection file
include_once '../paypal_advanced/dbConnect.php';
$dbpaypal = new mysqli(DB_HOST, DB_USERNAME, DB_PASSWORD, DB_NAME);
// Display error if failed to connect
if ($dbpaypal->connect_errno) {
printf("sl Connect failed: %s\n", $dbpaypal->connect_error);
exit();
}
error_log("PP BASE=".(defined('PAYPAL_BASE_URL')?PAYPAL_BASE_URL:'(undef)'));
error_log("PP AUTH=".(defined('PAYPAL_AUTH_URL')?PAYPAL_AUTH_URL:'(undef)'));
error_log("PP API =".(defined('PAYPAL_API_URL')?PAYPAL_API_URL:'(undef)'));
error_log("PP ENV =".(defined('PAYPAL_ENV')?PAYPAL_ENV:'(undef)')." SANDBOX=".(defined('PAYPAL_SANDBOX')?(PAYPAL_SANDBOX?'1':'0'):'(undef)'));
// Include the PayPal API library
require_once '../paypal_advanced/PaypalCheckout.class.php';
$paypal = new PaypalCheckout;
$response = array('status' => 0, 'msg' => 'Request Failed!');
$api_error = '';
// pour tester dons
//$_POST['request_type']='create_order';
//$_POST['payment_source']='paypal';
//$_POST['eve_id_don']=971;
//$_POST['sel_don']=99;
// test card
//$_POST['request_type']='create_order';
//$_POST['payment_source']='card';
//create_order valide
//create_order
if(!empty($_POST['request_type']) && $_POST['request_type'] == 'create_order'){
$payment_source = $_POST['payment_source'];
$intPaiement=2;
require_once $_SERVER['DOCUMENT_ROOT'].'/paiement_redirect_check.php';
// require_once $_SERVER['DOCUMENT_ROOT'].'/paiement_redirect_check.php';
$product_data = array(
"intent" => "CAPTURE",
"purchase_units" => $paypal_purchase_units
);
// Create order with PayPal Orders API
try {
$order = $paypal->createOrder($product_data, $payment_source);
$suite="ok";
} catch(Exception $e) {
$api_error = $e->getMessage();
error_log("[PayPal ERROR][" . date("Y-m-d H:i:s") . "] " . $api_error . "\n", 3, "/var/log/paypal_error.log");
$suite="erreur";
}
if($suite=="ok"){
$response = array(
'status' => 1,
'data' => $order
);
}else{
$response['msg'] = $api_error;
}
}
if (!empty($_POST['request_type']) && $_POST['request_type'] === 'set_invoice_id') {
header('Content-Type: application/json; charset=utf-8');
$order_id = $_POST['order_id'] ?? '';
if ($order_id === '') {
echo json_encode(['ok' => 0, 'msg' => 'Missing order_id']);
exit;
}
try {
// $no_commande = fxGetNoCommande('ms1_');
$_SESSION['no_commande_paypal'] = "ms1";
// ⚠️ Cette méthode NE DOIT PAS capturer. Elle fait uniquement le PATCH.
$paypal->setInvoiceId($order_id, $no_commande);
echo json_encode(['ok' => 1, 'invoice_id' => $no_commande]);
} catch (Throwable $e) {
echo json_encode(['ok' => 0, 'msg' => 'setInvoiceId '.$e->getMessage()]);
}
exit; // on ne continue surtout pas vers d'autres handlers
}
//capture_order
if(!empty($_POST['request_type']) && $_POST['request_type'] == 'capture_order'){
$order_id = $_POST['order_id'];
// Create order with PayPal Orders API
try {
$no_commande = "ms1";
$_SESSION['no_commande_paypal']= $no_commande;
$paypal->setInvoiceId($order_id, $no_commande);
} catch (Exception $e) {
$api_error="setInvoiceId ". $e->getMessage() ;
// À TOI de décider :
// - soit on ARRÊTE ici (return JSON derreur au front)
// - soit on CONTINUE quand même vers la capture (si invoice_id nest pas bloquant)
// return; // <- décommente si tu veux bloquer la suite
}
try {
$order = $paypal->captureOrder($order_id);
} catch (Exception $e) {
$api_error="captureOrder ". $e->getMessage();
}
if(!empty($order)){
$order_id = $order['id'];
$order_status = $order['status'];
$payment_source = $payment_source_card_name = $payment_source_card_last_digits = $payment_source_card_expiry = $payment_source_card_brand = $payment_source_card_type = '';
if(!empty($order['payment_source'])){
foreach($order['payment_source'] as $key=>$value){
$payment_source = $key;
if($payment_source == 'card'){
//$payment_source_card_name = $value['name'];
$payment_source_card_name = $value['name'] ?? '';
$payment_source_card_name=htmlspecialchars($payment_source_card_name, ENT_QUOTES, 'UTF-8');
$payment_source_card_name = str_replace("'", " ", $payment_source_card_name);
$payment_source_card_name = str_replace('"', " ", $payment_source_card_name);
//$payment_source_card_name = "";
$payment_source_card_last_digits = $value['last_digits'];
$payment_source_card_expiry = $value['expiry'];
$payment_source_card_brand = $value['brand'];
$payment_source_card_type = $value['type'];
}
}
}
if(!empty($order['purchase_units'][0])){
$purchase_unit = $order['purchase_units'][0];
if(!empty($purchase_unit['payments'])){
$payments = $purchase_unit['payments'];
if(!empty($payments['captures'])){
$captures = $payments['captures'];
if(!empty($captures[0])){
$transaction_id = $captures[0]['id'];
$payment_status = $captures[0]['status'];
$custom_id = $captures[0]['custom_id'];
$amount_value = $captures[0]['amount']['value'];
$currency_code = $captures[0]['amount']['currency_code'];
$create_time = date("Y-m-d H:i:s", strtotime($captures[0]['create_time']));
}
}
}
}
if(!empty($order_id) && $order_status == 'COMPLETED'){
// Check if any transaction data is exists already with the same TXN ID
$sqlQ = "SELECT id FROM transactions_paypal WHERE transaction_id = ?";
$stmt = $dbpaypal->prepare($sqlQ);
$stmt->bind_param("s", $transaction_id);
$stmt->execute();
$stmt->bind_result($row_id);
$stmt->fetch();
$payment_id = 0;
if(!empty($row_id)){
$payment_id = $row_id;
}else{
$payername=$_POST['payername'] ?? '';
$payeremail=$_POST['payeremail'] ?? '';
// Insert transaction data into the database
$sqlQ = "INSERT INTO transactions_paypal (item_number,item_name,item_price,item_price_currency,order_id,transaction_id,paid_amount,paid_amount_currency,payment_source,payment_source_card_name,payment_source_card_last_digits,payment_source_card_expiry,payment_source_card_brand,payment_source_card_type,payment_status,created,modified) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,NOW())";
$stmt = $dbpaypal->prepare($sqlQ);
$stmt->bind_param("ssdsssdsssssssss", $custom_id, $itemName, $itemPrice, $currency, $order_id, $transaction_id, $amount_value, $currency_code, $payment_source, $payment_source_card_name, $payment_source_card_last_digits, $payment_source_card_expiry, $payment_source_card_brand, $payment_source_card_type, $payment_status, $create_time);
$insert = $stmt->execute();
if($insert){
$payment_id = $stmt->insert_id;
}
}
//if(!empty($payment_id)){
$ref_id_enc = base64_encode($transaction_id);
//}
if ($payment_status=="COMPLETED"){
// transaction complete
$sqlUpdate = "UPDATE inscriptions_panier_acheteurs SET paypal_card_expiry='".$payment_source_card_expiry."',paypal_card_brand='".$payment_source_card_brand."',paypal_card_type='".$payment_source_card_type."',paypal_card_name='".$payment_source_card_name."',paypal_card_last_digits='".$payment_source_card_last_digits."',paypal_source='".$payment_source."',paypal_created=NOW(),paypal_user='".$payeremail."',receipt_text = 'APPROUVEE - MERCI',TransactionID = '" .$transaction_id."' , sta_id = 3, ach_error_log = '" .$payment_status."', ach_ack = '" .$payment_status."' WHERE no_panier = '" . $objDatabase->fxEscape($_SESSION['no_panier']) . "'";
// $sqlUpdate = "UPDATE inscriptions_panier_acheteurs SET receipt_text = 'APPROUVEE - MERCI', TransactionID = '" .$transaction_id."' , sta_id = 3, ach_error_log = '" .$payment_status."', ach_ack = '" .$payment_status."' WHERE no_panier = '" . $objDatabase->fxEscape($_SESSION['no_panier']) . "'";
$qryUpdate = $objDatabase->fxQuery($sqlUpdate);
$strNoCommande = fxMajCommande($_SESSION['no_panier'], $_SESSION['lang']);
$response = array('update' => $sqlUpdate,'status' => 1, 'msg' => 'Transaction completed!', 'ref_id' => $ref_id_enc);
}else{
$sqlUpdate = "UPDATE inscriptions_panier_acheteurs SET receipt_text = '" .$payment_status."' , TransactionID = '" .$transaction_id."' , sta_id = 1, ach_error_log = '" .$payment_status."', ach_ack = '" .$payment_status."' WHERE no_panier = '" . $objDatabase->fxEscape($_SESSION['no_panier']) . "'";
$qryUpdate = $objDatabase->fxQuery($sqlUpdate);
$response = array('update' => $sqlUpdate,'status' => 0, 'msg' => 'checkout_validation-declined', 'ref_id' => $ref_id_enc);
}
}else{ $response['msg'] = $api_error;
}
}else{
$response['msg'] = $api_error;
}
}
//$_POST['request_type']='fin_paypal';
//$_POST['order_id']='9R308831VL998461K';
//$_POST['transaction_id']="7C899611XF668343M";
//$_POST['order_status']="COMPLETED";
//$_POST['payername']="test buyer";
//$_POST['payeremail']="mayrand.p-buyer@ms1timing.com";
//fin_paypal
if(!empty($_POST['request_type']) && $_POST['request_type'] == 'fin_paypal'){
// echo( $_POST['request_type']);
$payment_source = $payment_source_card_name = $payment_source_card_last_digits = $payment_source_card_expiry = $payment_source_card_brand = $payment_source_card_type = '';
$custom_i = $itemName = $itemPrice=$currency = $transaction_id = $amount_value = $currency_code = $payment_source = $payment_source_card_name = $payment_source_card_last_digits = $payment_source_card_expiry = $payment_source_card_brand = $payment_source_card_type = $payment_status = $create_time='';
$order_id = $_POST['order_id'];
$transaction_id=$_POST['transaction_id'];
$order_status = $_POST['order_status'];
$payment_source = "paypal";
$payername="";
$payeremail=$_POST['payeremail'];
if(!empty($order_id) && $order_status == 'COMPLETED'){
// Check if any transaction data is exists already with the same TXN ID
$sqlQ = "SELECT id FROM transactions_paypal WHERE transaction_id = ?";
$stmt = $dbpaypal->prepare($sqlQ);
$stmt->bind_param("s", $transaction_id);
$stmt->execute();
$stmt->bind_result($row_id);
$stmt->fetch();
$payment_id = 0;
if(!empty($row_id)){
$payment_id = $row_id;
}else{
// Insert transaction data into the database
$sqlQ = 'INSERT INTO transactions_paypal (paypal_email,payment_source_card_name,item_number,order_id,transaction_id,payment_source,payment_status,created,modified) VALUES ("'.$payeremail.'","'.$payername.'","'.$_SESSION["no_panier"].'","'.$order_id.'","'.$transaction_id.'","'.$payment_source.'","'.$order_status.'",NOW(),NOW())';
$stmt = $dbpaypal->prepare($sqlQ);
// $stmt->bind_param("ssdsssdsssssssss", $custom_id, $itemName, $itemPrice, $currency, $order_id, $transaction_id, $amount_value, $currency_code, $payment_source, $payment_source_card_name, $payment_source_card_last_digits, $payment_source_card_expiry, $payment_source_card_brand, $payment_source_card_type, $payment_status, $create_time);
$insert = $stmt->execute();
if($insert){
$payment_id = $stmt->insert_id;
}
}
//if(!empty($payment_id)){
$ref_id_enc = base64_encode($transaction_id);
//}
// transaction complete
$sqlUpdate = "UPDATE inscriptions_panier_acheteurs SET paypal_source='".$payment_source."',paypal_created=NOW(),paypal_card_name=' ',paypal_user='".$payeremail."',receipt_text = 'APPROUVEE - MERCI',pai_id=1, TransactionID = '" .$transaction_id."' , sta_id = 3, ach_error_log = '" .$payment_status."', ach_ack = '" .$payment_status."' WHERE no_panier = '" . $objDatabase->fxEscape($_SESSION['no_panier']) . "'";
$qryUpdate = $objDatabase->fxQuery($sqlUpdate);
$strNoCommande = fxMajCommande($_SESSION['no_panier'], $_SESSION['lang']);
$response = array('update' => $sqlUpdate,'status' => 1, 'msg' => 'Transaction completed!', 'ref_id' => $ref_id_enc);
}
}
echo json_encode($response);