setConfig( array( 'mode' => $vPaypal['mode'], 'log.LogEnabled' => true, 'log.FileName' => '../PayPal.log', 'log.LogLevel' => $vPaypal['log_level'], 'cache.enabled' => true, // 'http.CURLOPT_CONNECTTIMEOUT' => 30 // 'http.headers.PayPal-Partner-Attribution-Id' => '123123123' ) ); return $apiContext; } // Wrapper methods for all PayPal integration use PayPal\Api\PaymentExecution; use PayPal\Api\Amount; use PayPal\Api\CreditCard; use PayPal\Api\Details; use PayPal\Api\FundingInstrument; use PayPal\Api\Item; use PayPal\Api\ItemList; use PayPal\Api\Payer; use PayPal\Api\Payment; use PayPal\Api\Transaction; use PayPal\Api\RedirectUrls; /* $card = new CreditCard(); $card->setType("visa") ->setNumber("4148529247832259") ->setExpireMonth("11") ->setExpireYear("2019") ->setCvv2("012") ->setFirstName("Joe") ->setLastName("Shopper"); $fi = new FundingInstrument(); $fi->setCreditCard($card); $payer = new Payer(); $payer->setPaymentMethod("credit_card") ->setFundingInstruments(array($fi)); $item1 = new Item(); $item1->setName('Ground Coffee 40 oz') ->setDescription('Ground Coffee 40 oz') ->setCurrency('CAD') ->setQuantity(1) ->setTax(0.3) ->setPrice(7.50); $item2 = new Item(); $item2->setName('Granola bars') ->setDescription('Granola Bars with Peanuts') ->setCurrency('CAD') ->setQuantity(5) ->setTax(0.2) ->setPrice(2); $itemList = new ItemList(); $itemList->setItems(array($item1, $item2)); $details = new Details(); $details->setShipping(1.2) ->setTax(1.3) ->setSubtotal(17.5); $amount = new Amount(); $amount->setCurrency("CAD") ->setTotal(20) ->setDetails($details); $transaction = new Transaction(); $transaction->setAmount($amount) ->setItemList($itemList) ->setDescription("Payment description") ->setInvoiceNumber(uniqid()); $payment = new Payment(); $payment->setIntent("sale") ->setPayer($payer) ->setTransactions(array($transaction)); $request = clone $payment; try { $payment->create($apiContext); } catch (Exception $ex) { print_r(array('Create Payment Using Credit Card. If 500 Exception, try creating a new Credit Card using Step 4, on this link, and using it.', 'Payment', null, $request, $ex)); exit(1); } print_r(array('Create Payment Using Credit Card', 'Payment', $payment->getId(), $request, $payment)); */ /** * Détermine le type de carte de crédit * @param string $str Numéro de la carte * @return string */ function getCreditCardType($str) { $strRetour = 'error'; $matchingPatterns = array( 'visa' => '/^4[0-9]{12}(?:[0-9]{3})?$/', 'mastercard' => '/^5[1-5][0-9]{14}$/' ); foreach ($matchingPatterns as $key => $pattern) { if (preg_match($pattern, $str)) { $strRetour = $key; } } return $strRetour; } /** * Fait un paiement par carte de crédit< * @param string $type Type de la carte * @param string $number Numéro de la carte * @param string $expire_month Mois d'expiration * @param string $expire_year Année d'expiration * @param string $cvv2 Code de vérification * @param string $first_name Prénom du titulaire * @param string $last_name Nom de famille du titulaire * @param string $currency Devise d'argent utilisée * @param float $total Montant total du panier * @param array $details Détails de la commande (montant livraison, taxes, sous-total) * @param string $description Description globale de ce qui est acheté * @param array $items Liste des items achetés (nom, quantité et prix) * @param string $invoice_number Numéro de transaction * @return array */ function makePaymentUsingCC($type, $number, $expire_month, $expire_year, $cvv2, $first_name, $last_name, $currency = 'CAD', $total, $details, $description, $items, $invoice_number) { $tabRetour = array(); if (trim($type) == '') $type = getCreditCardType($number); $card = new CreditCard(); $card->setType($type) ->setNumber($number) ->setExpireMonth($expire_month) ->setExpireYear($expire_year) ->setCvv2($cvv2) ->setFirstName($first_name) ->setLastName($last_name); $fi = new FundingInstrument(); $fi->setCreditCard($card); $payer = new Payer(); $payer->setPaymentMethod("credit_card") ->setFundingInstruments(array($fi)); $tabItems = array(); foreach ($items as $tab) { $item = new Item(); $item->setName($tab['name']) ->setCurrency($currency) ->setQuantity($tab['quantity']) ->setPrice($tab['price']); $tabItems[] = $item; } $itemList = new ItemList(); $itemList->setItems($tabItems); $details1 = new Details(); $details1->setShipping($details['shipping']) ->setTax($details['tax']) ->setSubtotal($details['subtotal']); $amount = new Amount(); $amount->setCurrency($currency) ->setTotal($total) ->setDetails($details1); $transaction = new Transaction(); $transaction->setAmount($amount) ->setItemList($itemList) ->setDescription($description) ->setInvoiceNumber($invoice_number); $payment = new Payment(); $payment->setIntent("sale") ->setPayer($payer) ->setTransactions(array($transaction)); try { $payment->create(getApiContext()); } catch (PayPal\Exception\PayPalConnectionException $ex) { /* echo $ex->getCode(); // Prints the Error Code echo $ex->getData(); // Prints the detailed error message die($ex); */ $tabRetour['exception'] = array('code' => $ex->getCode(), 'Message' => $ex->getMessage(), 'data' => $ex->getData()); } catch (Exception $ex) { /*echo '
';
print_r(array($request, $ex));
echo '';
exit(1); */
die($ex);
}
$tabRetour['payment'] = $payment;
$tabRetour['id'] = $payment->getId();
$tabRetour['state'] = $payment->getState();
return $tabRetour;
}
/**
* Create a payment using the buyer's paypal
* account as the funding instrument. Your app
* will have to redirect the buyer to the paypal
* website, obtain their consent to the payment
* and subsequently execute the payment using
* the execute API call.
*
* @param string $total payment amount in DDD.DD format
* @param string $currency 3 letter ISO currency code such as 'USD'
* @param string $paymentDesc A description about the payment
* @param string $returnUrl The url to which the buyer must be redirected
* to on successful completion of payment
* @param string $cancelUrl The url to which the buyer must be redirected
* to if the payment is cancelled
* @return \PayPal\Api\Payment
*/
function makePaymentUsingPayPal($total, $currency, $paymentDesc, $returnUrl, $cancelUrl) {
$payer = new Payer();
$payer->setPaymentMethod("paypal");
// Specify the payment amount.
$amount = new Amount();
$amount->setCurrency($currency);
$amount->setTotal($total);
// ###Transaction
// A transaction defines the contract of a
// payment - what is the payment for and who
// is fulfilling it. Transaction is created with
// a `Payee` and `Amount` types
$transaction = new Transaction();
$transaction->setAmount($amount);
$transaction->setDescription($paymentDesc);
$redirectUrls = new RedirectUrls();
$redirectUrls->setReturnUrl($returnUrl);
$redirectUrls->setCancelUrl($cancelUrl);
$payment = new Payment();
$payment->setRedirectUrls($redirectUrls);
$payment->setIntent("sale");
$payment->setPayer($payer);
$payment->setTransactions(array($transaction));
$payment->create(getApiContext());
return $payment;
}
/**
* Completes the payment once buyer approval has been
* obtained. Used only when the payment method is 'paypal'
*
* @param string $paymentId id of a previously created
* payment that has its payment method set to 'paypal'
* and has been approved by the buyer.
*
* @param string $payerId PayerId as returned by PayPal post
* buyer approval.
*/
function executePayment($paymentId, $payerId) {
$payment = getPaymentDetails($paymentId);
$paymentExecution = new PaymentExecution();
$paymentExecution->setPayerId($payerId);
$payment = $payment->execute($paymentExecution, getApiContext());
return $payment;
}
/**
* Retrieves the payment information based on PaymentID from Paypal APIs
*
* @param $paymentId
*
* @return Payment
*/
function getPaymentDetails($paymentId) {
$payment = Payment::get($paymentId, getApiContext());
return $payment;
}