Browse Source

dev 2019-12

Max YO 5 years ago
parent
commit
19fe30ef87
2 changed files with 56 additions and 24 deletions
  1. 44 22
      src/Lib/Payment/Paypal_lib.php
  2. 12 2
      src/Lib/Payment/Stripe_lib.php

+ 44 - 22
src/Lib/Payment/Paypal_lib.php

@@ -14,7 +14,7 @@ class Paypal_lib
 	// https://github.com/paypal/PayPal-PHP-SDK/wiki/Making-First-Call
 	// https://www.grafikart.fr/tutoriels/paypal-express-checkout-rest-962
 	
-	public static function PaymentPaypal($payment_label='', $payment_product_label='', $payment_price=0, $customer_description='')
+	public static function paymentPaypal($url_callback="/paypal-callback", $url_cancel="/paypal-cancel", $payment_label='', $payment_price=0, $products_details=[], $customer_description='', $optionnal_data=[])
 	{
 		// Paypal STEP 1 (creating payment)
 
@@ -22,7 +22,7 @@ class Paypal_lib
 			return false;
 		}
 
-		if (PAYPAL_ENV == 'PROD') {
+		if (in_array(PAYPAL_ENV, ['PROD', 'LIVE'])) {
 			if (! defined('PAYPAL_PROD_CLIENT_ID') || ! defined('PAYPAL_PROD_SECRET')) {
 				return false;
 			}
@@ -51,7 +51,7 @@ class Paypal_lib
 			//'log.LogEnabled' => true,
 			//'log.FileName' => '/tmp/PayPal.log',
 			//'log.LogLevel' => 'FINE',
-			'mode' => (PAYPAL_ENV == 'PROD') ? 'live' : 'sandbox',
+			'mode' => (in_array(PAYPAL_ENV, ['PROD', 'LIVE'])) ? 'live' : 'sandbox',
 		]);
 
 		
@@ -74,15 +74,19 @@ class Paypal_lib
 			$transaction->setDescription($payment_label); // optionnal
 		}
 
-		if (! empty($payment_product_label)) {
+		if (! empty($products_details)) {
 			// specify products list
 			$list = new \PayPal\Api\ItemList();
-			$item = (new \PayPal\Api\Item())
-	                ->setName($payment_product_label)
-	                ->setPrice($payment_price)
-	                ->setCurrency('EUR')
-	                ->setQuantity(1);
-	        $list->addItem($item);
+			
+			foreach ($products_details as $product_detail) {
+				$item = (new \PayPal\Api\Item())
+		                ->setName($product_detail['name'])
+		                ->setPrice($product_detail['price'])
+		                ->setCurrency('EUR')
+		                ->setQuantity($product_detail['quantity']);
+		        $list->addItem($item);
+			}
+
 			$transaction->setItemList($list); // optionnal
 		}
 
@@ -95,7 +99,7 @@ class Paypal_lib
 		// set redirections urls
 		$scheme = ( (! empty($_SERVER['REQUEST_SCHEME']) && $_SERVER['REQUEST_SCHEME'] == 'https') || (! empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') || (! empty($_SERVER['REDIRECT_HTTPS']) && $_SERVER['REDIRECT_HTTPS'] == 'on') ) ? 'https' : 'http';
 		$redirectUrls = new \PayPal\Api\RedirectUrls();
-		$redirectUrls->setReturnUrl($scheme."://" . $_SERVER['HTTP_HOST'] . "/paypal_callback")->setCancelUrl($scheme."://" . $_SERVER['HTTP_HOST'] . "/paypal_canceled");
+		$redirectUrls->setReturnUrl($scheme."://" . $_SERVER['HTTP_HOST'] . $url_callback)->setCancelUrl($scheme."://" . $_SERVER['HTTP_HOST'] . $url_cancel);
 
 
 		// Build payment
@@ -128,6 +132,13 @@ class Paypal_lib
 		}
 
 
+		$_SESSION['paypal_payment'][$paymentId] = [];
+
+        if (! empty($optionnal_data)) {
+        	$_SESSION['paypal_payment'][$paymentId] = array_merge($_SESSION['paypal_payment'][$paymentId], $optionnal_data);
+        }
+
+
 		return [
 			'approval_url' => $approval_url,
 			'paypal_error' => $paypal_error,
@@ -137,7 +148,7 @@ class Paypal_lib
 
 
 
-	public static function PaymentPaypal_Callback()
+	public static function paymentPaypal_Callback()
 	{
 		// Paypal STEP 2 (validating payment)
 
@@ -145,7 +156,7 @@ class Paypal_lib
 			return false;
 		}
 
-		if (PAYPAL_ENV == 'PROD') {
+		if (in_array(PAYPAL_ENV, ['PROD', 'LIVE'])) {
 			if (! defined('PAYPAL_PROD_CLIENT_ID') || ! defined('PAYPAL_PROD_SECRET')) {
 				return false;
 			}
@@ -198,20 +209,31 @@ class Paypal_lib
 			}
 		}
 
-		$paypal_result = [
-			'payment_ok' => $payment_ok,
-	    	'paymentId' => $paymentId,
-	    	'token' => $token,
-	    	'PayerID' => $PayerID,
-	    	'payment' => $payment,
-		];
+
+		$_SESSION['paypal_payment'][$paymentId]['payment_accepted'] = $payment_ok;
+		$_SESSION['paypal_payment'][$paymentId]['payment_id'] = $paymentId;
+		$_SESSION['paypal_payment'][$paymentId]['token'] = $token;
+		$_SESSION['paypal_payment'][$paymentId]['PayerID'] = $PayerID;
+		//$_SESSION['paypal_payment'][$paymentId]['payment'] = $payment;
 
 		if (! $payment_ok) {
-			return $paypal_result;
+			$_SESSION['paypal_payment'][$paymentId]['payment'] = $payment;
+
+			return $_SESSION['paypal_payment'][$paymentId];
 		}
 
 
 		if (false) {
+			// DEBUG
+
+			$paypal_result = [
+				'payment_ok' => $payment_ok,
+		    	'paymentId' => $paymentId,
+		    	'token' => $token,
+		    	'PayerID' => $PayerID,
+		    	'payment' => $payment,
+			];
+
 			$transaction = $paypal_result['payment']->getTransactions()[0];
 
 			echo "paymentId: " . $paymentId . "<hr />";
@@ -225,7 +247,7 @@ class Paypal_lib
 			echo "<pre>" . print_r($paypal_result['payment'], 1);
 		}
 
-		return $paypal_result;
+		return $_SESSION['paypal_payment'][$paymentId];
 
 	}
 

+ 12 - 2
src/Lib/Payment/Stripe_lib.php

@@ -188,8 +188,13 @@ class Stripe_lib
 			$payment_ok = true;
 		}
 
+		$payment_id = $charge->id;
+		$amount = $charge->amount;
+
 		return [
 			'payment_accepted' => $payment_ok,
+			'payment_id' => $payment_id,
+			'amount' => $amount,
 			'customer_id' => $customer_id,
 			'stripe_token' => $stripe_token,
 			'stripe_error' => $stripe_error,
@@ -200,7 +205,7 @@ class Stripe_lib
 
 	public function paymentIntentInit($unit, $quantity=1, $optionnal_data=[])
 	{
-		// Paiement en 2 temps, via Stripe.js
+		// Paiement en 2 temps, via Stripe.js - 1/2  (method 1)
 		// Methode appelée en ajax
 
 		if (in_array(STRIPE_ENV, ['LIVE', 'PROD'])) {
@@ -228,6 +233,11 @@ class Stripe_lib
 
         $client_secret = $intent->client_secret;
 
+
+		if (empty($_SESSION['stripe_payment'])) {
+			$_SESSION['stripe_payment'] = [];
+		}
+
         $_SESSION['stripe_payment'][$client_secret] = [
         	'unit' => $unit,
         	'quantity' => $quantity,
@@ -246,7 +256,7 @@ class Stripe_lib
 
 	public function paymentIntentConfirm()
 	{
-		// Paiement en 2 temps, via Stripe.js
+		// Paiement en 2 temps, via Stripe.js - 2/2  (method 1)
 		// Methode appelée en ajax
 
         $payment_id = get('pid');