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; }