350 lines
14 KiB
PHP
350 lines
14 KiB
PHP
<?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 d’erreur au front)
|
||
// - soit on CONTINUE quand même vers la capture (si invoice_id n’est 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); |