setCurrency() public method

3-letter currency code.
public setCurrency ( string $currency )
$currency string
 /**
  * @param PaymentInterface $payment
  */
 public function init(PaymentInterface $payment)
 {
     $credentials = new OAuthTokenCredential($this->options['client_id'], $this->options['secret']);
     $apiContext = new ApiContext($credentials);
     $apiContext->setConfig(['mode' => $this->options['mode']]);
     $payer = new Payer();
     $payer->setPaymentMethod('paypal');
     $amount = new Amount();
     $amount->setCurrency($this->options['currency']);
     $amount->setTotal($payment->getPaymentSum());
     $item = new Item();
     $item->setName($payment->getDescription());
     $item->setCurrency($amount->getCurrency());
     $item->setQuantity(1);
     $item->setPrice($amount->getTotal());
     $itemList = new ItemList();
     $itemList->addItem($item);
     $transaction = new Transaction();
     $transaction->setAmount($amount);
     $transaction->setDescription($payment->getDescription());
     $transaction->setItemList($itemList);
     $redirectUrls = new RedirectUrls();
     $redirectUrls->setReturnUrl($payment->getExtraData('return_url'));
     $redirectUrls->setCancelUrl($payment->getExtraData('cancel_url'));
     $paypalPayment = new Payment();
     $paypalPayment->setIntent('sale');
     $paypalPayment->setPayer($payer);
     $paypalPayment->setTransactions([$transaction]);
     $paypalPayment->setRedirectUrls($redirectUrls);
     $paypalPayment->create($apiContext);
     $payment->setExtraData('paypal_payment_id', $paypalPayment->getId());
     $payment->setExtraData('approval_link', $paypalPayment->getApprovalLink());
 }
Example #2
0
 public static function createItem()
 {
     $item = new Item();
     $item->setName(self::$name);
     $item->setPrice(self::$price);
     $item->setQuantity(self::$quantity);
     $item->setSku(self::$sku);
     $item->setCurrency(self::$currency);
     return $item;
 }
Example #3
0
 /**
  * @param string $name
  * @param int $currency
  * @param int $quantity
  * @param string $sku
  * @param int $price
  * @return Item
  */
 public static function createItem($name, $currency, $quantity, $sku, $price)
 {
     $item = new Item();
     $item->setName($name);
     $item->setCurrency($currency);
     $item->setQuantity($quantity);
     $item->setSku($sku);
     $item->setPrice($price);
     return $item;
 }
Example #4
0
 public function setPaypalItem($name, $currency, $quantity, $sku, $price)
 {
     $price = number_format($price, 2);
     $item = new Item();
     $item->setQuantity($quantity);
     $item->setName($name);
     $item->setPrice($price);
     $item->setCurrency($currency);
     $item->setSku($sku);
     return $item;
 }
Example #5
0
function CreateItem($itemDetails)
{
    $item = new Item();
    foreach ($GLOBALS['META_DATA']['item'] as $meta) {
        if (isset($itemDetails[$meta])) {
            $item->{'set' . str_replace('_', '', $meta)}($itemDetails[$meta]);
        }
    }
    // defaults
    $item->setCurrency($GLOBALS['PAYPAL']['currency']);
    return $item;
}
Example #6
0
 private function createPayment($details)
 {
     $payment = new Payment();
     $payer = new Payer();
     $payer->payment_method = "paypal";
     $amount = new Amount();
     $amount->currency = $details['PAYMENTREQUEST_CURRENCYCODE'];
     $amount->total = $details['PAYMENTREQUEST_AMT'];
     $transaction = new Transaction();
     $transaction->amount = $amount;
     $transaction->description = $details['PAYMENTREQUEST_DESCRIPTION'];
     $itemList = new ItemList();
     foreach ($details['PAYMENTREQUEST_ITEMS'] as $itemInfo) {
         $item = new Item();
         $item->setQuantity($itemInfo['quantity']);
         $item->setName($itemInfo['name']);
         $item->setDescription($itemInfo['description']);
         $item->setPrice($itemInfo['price']);
         $item->setCategory($itemInfo['category']);
         $item->setCurrency($itemInfo['currency']);
         $item->setTax($itemInfo['tax']);
         $item->setSku($itemInfo['sku']);
         $itemList->addItem($item);
     }
     $addressInfo = $details['PAYMENTREQUEST_SHIPPING_ADDRESS'];
     $shippingAddress = new ShippingAddress();
     $shippingAddress->setRecipientName($addressInfo['recipient_name']);
     $shippingAddress->setLine1($addressInfo['line1']);
     $shippingAddress->setPostalCode($addressInfo['postal_code']);
     $shippingAddress->setCity($addressInfo['city']);
     $shippingAddress->setCountryCode($addressInfo['country_code']);
     $itemList->setShippingAddress($shippingAddress);
     $transaction->setItemList($itemList);
     $redirectUrls = new RedirectUrls();
     $redirectUrls->return_url = $details['RETURN_URL'];
     $redirectUrls->cancel_url = $details['CANCEL_URL'];
     $payment->intent = "sale";
     $payment->payer = $payer;
     $payment->redirect_urls = $redirectUrls;
     $payment->transactions = [$transaction];
     if (false == isset($details['response']) && false == isset($details['response']['state']) && isset($payment->payer->payment_method) && 'paypal' == $payment->payer->payment_method) {
         $paymentResponse = $payment->create($this->api);
         $details->replace(['response' => $paymentResponse->toArray()]);
         foreach ($paymentResponse->links as $link) {
             if ($link->rel == 'approval_url') {
                 $details->replace(['approval_url' => $link->href]);
             }
         }
     }
 }
Example #7
0
 /**
  * @return ItemList
  */
 protected function getItemList()
 {
     $items = array();
     foreach ($this->order->get_order_items() as $order_item) {
         /** @var \AppZap\Payment\Model\OrderItem $order_item */
         $item = new Item();
         $item->setName($order_item->get_title());
         $item->setQuantity($order_item->get_quantity());
         $item->setSku($order_item->get_article_number());
         $item->setPrice($order_item->get_price());
         $item->setCurrency("EUR");
         $items[] = $item;
     }
     $itemList = new ItemList();
     $itemList->setItems($items);
     return $itemList;
 }
 /**
  * @return array array of PayPal\Api\Transaction
  */
 protected function getTransactions()
 {
     $payPalItems = array();
     $currency = $this->currency ? $this->currency : $this->context->getCurrency();
     $payPalItem = new Item();
     $payPalItem->setName($this->name);
     $payPalItem->setCurrency($currency);
     $payPalItem->setQuantity($this->quantity);
     $payPalItem->setPrice($this->price);
     $payPalItems[] = $payPalItem;
     $totalPrice = $this->quantity * $this->price;
     $itemLists = new ItemList();
     $itemLists->setItems($payPalItems);
     $amount = new Amount();
     $amount->setCurrency($currency);
     $amount->setTotal($totalPrice);
     $transaction = new Transaction();
     $transaction->setAmount($amount);
     $transaction->setItemList($itemLists);
     return array($transaction);
 }
 public static function create($items, Details $shippingDetails, $paymentIntent, $paymentMethod, $fi = null)
 {
     $payer = new Payer();
     $payer->setPaymentMethod($paymentMethod);
     if ($fi !== null) {
         $payer->setFundingInstruments(array($fi));
     }
     $fullList = array();
     foreach ($items as $item) {
         if (!$item instanceof ItemInterface) {
             throw new Exception('All the item created for the payment MUST implement the ItemInterface');
         }
         $singleItem = new Item();
         $singleItem->setName($item->getName());
         $singleItem->setSku($item->getSku());
         $singleItem->setCurrency($item->getCurrency());
         $singleItem->setPrice($item->getPrice());
         $singleItem->setQuantity($item->getQuantity());
         $fullList[] = $singleItem;
     }
     $itemList = new ItemList();
     $itemList->setItems($fullList);
     $details = $shippingDetails;
     $subtotal = 0.0;
     /** @var Item $singleItem */
     foreach ($fullList as $singleItem) {
         $subtotal += floatval($singleItem->getPrice()) * floatval($singleItem->getQuantity());
     }
     $details->setSubtotal($subtotal);
     $total = $subtotal + floatval($details->getTax()) + floatval($details->getShipping());
     $currencyMode = Validation::currencyMode($items);
     $amount = new Amount();
     $amount->setCurrency($currencyMode)->setTotal($total)->setDetails($details);
     $transaction = new Transaction();
     $transaction->setAmount($amount)->setItemList($itemList);
     $payment = new Payment();
     $payment->setIntent($paymentIntent)->setPayer($payer)->setTransactions(array($transaction));
     return $payment;
 }
 public function callCreate($clientId, $clientSecret, $orderId, $amount, $currency, $description, $returnUrl, $cancelUrl)
 {
     $oauthCredential = new OAuthTokenCredential($clientId, $clientSecret);
     $apiContext = new ApiContext($oauthCredential);
     $apiContext->setConfig(['mode' => $this->mode]);
     $payer = new Payer();
     $payer->setPaymentMethod('paypal');
     $item = new Item();
     $item->setName($description);
     $item->setCurrency($currency);
     $item->setPrice($amount);
     $item->setQuantity(1);
     $itemList = new ItemList();
     $itemList->setItems(array($item));
     $amountObject = new Amount();
     $amountObject->setCurrency($currency);
     $amountObject->setTotal($amount);
     $transaction = new Transaction();
     $transaction->setItemList($itemList);
     $transaction->setAmount($amountObject);
     $transaction->setDescription($description);
     $transaction->setInvoiceNumber($orderId);
     $redirectUrls = new RedirectUrls();
     $redirectUrls->setReturnUrl($returnUrl)->setCancelUrl($cancelUrl);
     $payment = new Payment();
     $payment->setIntent('sale');
     $payment->setPayer($payer);
     $payment->setRedirectUrls($redirectUrls);
     $payment->setTransactions(array($transaction));
     try {
         $payment->create($apiContext);
     } catch (\Exception $e) {
         throw new PaymentException('PayPal Exception: ' . $e->getMessage());
     }
     $approvalUrl = $payment->getApprovalLink();
     return $approvalUrl;
 }
Example #11
0
 /**
  * [makePaymentUsingPayPal description]
  * @param  [type] $order     [description]
  * @param  [type] $currency  [description]
  * @param  [type] $returnUrl [description]
  * @param  [type] $cancelUrl [description]
  * @return [type]            [description]
  */
 function makePaymentUsingPayPal($order, $currency, $returnUrl, $cancelUrl)
 {
     $payer = new Payer();
     $payer->setPaymentMethod("paypal");
     //  $payee = new Payee();
     //  $payee->setEmail((string)$order['email_paypal']);
     // Specify the payment amount.
     $item = new Item();
     $item->setQuantity((string) $order['quantity']);
     $item->setName($order['description']);
     $item->setPrice((string) $order['input_price']);
     $item->setCurrency($currency);
     $item->setSku($order['item_number']);
     $array_item[] = $item;
     if (isset($order['price_ship'])) {
         $item_ship = new Item();
         $item_ship->setQuantity('1');
         $item_ship->setName('shipping');
         $item_ship->setPrice((string) $order['price_ship']);
         $item_ship->setCurrency($currency);
         $item_ship->setSku('shipping');
         $array_item[] = $item_ship;
     }
     $item_list = new ItemList();
     $item_list->setItems($array_item);
     $amount = new Amount();
     $amount->setCurrency($currency);
     $amount->setTotal((string) $order['total']);
     //$amount->setTax()
     // ###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($order['description']);
     $transaction->setItemList($item_list);
     // $transaction->setPayee($payee);
     $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($this->getApiContext());
     return $payment;
 }
Example #12
0
 /**
  * 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
     $item = new Item();
     $item->setQuantity(1);
     $item->setName($paymentDesc);
     $item->setPrice($total);
     $item->setCurrency("USD");
     $itemList = new ItemList();
     $itemList->setItems(array($item));
     $transaction = new Transaction();
     $transaction->setAmount($amount);
     $transaction->setItemList($itemList);
     $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($this->getApiContext());
     return $payment;
 }
 /**
  * Creates a single PayPal item from given order product
  *
  * @param OrderProductInterface $orderProduct
  *
  * @return Item
  */
 protected function createItem(OrderProductInterface $orderProduct) : Item
 {
     $item = new Item();
     $item->setName($orderProduct->getProduct()->translate()->getName());
     $item->setCurrency($orderProduct->getSellPrice()->getCurrency());
     $item->setQuantity($orderProduct->getQuantity());
     $item->setSku($orderProduct->getProduct()->getSku());
     $item->setPrice($orderProduct->getSellPrice()->getNetAmount());
     $item->setTax($orderProduct->getSellPrice()->getTaxAmount());
     return $item;
 }
Example #14
0
 public function pay()
 {
     // BEGINNING OF PAYMENT CHECK
     if (empty($_COOKIE)) {
         echo json_encode(array("error" => true, "description" => "Non hai effettuato l'accesso a reSeed. Effettua l'accesso e riprova.", "errorCode" => "ACCESS_DENIED", "parameters" => array()));
         return;
     }
     if (!isset($_COOKIE['cart'])) {
         echo json_encode(array("error" => true, "description" => "Non hai inserito alcun articolo nel carrello.", "errorCode" => "EMPTY_CART_ERROR", "parameters" => array()));
         return;
     }
     $userID = $_COOKIE['username'];
     if (!$userID) {
         echo json_encode(array("error" => true, "description" => "Non hai effettuato l'accesso a reSeed. Effettua l'accesso e riprova.", "errorCode" => "ACCESS_DENIED", "parameters" => array()));
         return;
     }
     $cart = json_decode($_COOKIE['cart'], true);
     $cartItems = $cart['items'];
     $cartOptions = $cart['options'];
     if (!array_key_exists('paymentMediaChosen', $cartOptions)) {
         echo json_encode(array("error" => true, "description" => "Non hai selezionato un mezzo di pagamento.", "errorCode" => "MISSING_PAYMENT_MEDIA", "parameters" => array()));
         return;
     }
     if ($this->debugMode) {
         print "UTENTE: " . $userID;
     }
     if ($this->debugMode) {
         print "<br/>WHOLE CART:";
         print_r($cart);
     }
     if ($this->debugMode) {
         print "<br/>ITEMS:";
         print_r($cartItems);
     }
     if ($this->debugMode) {
         print "<br/>OPTIONS:";
         print_r($cartOptions);
     }
     // Prendi i corsi a cui è già iscritto l'utente
     $userCourses = array();
     foreach ($this->payment_model->get_courses($userID) as $course) {
         $userCourses[$course['courseID']] = $course;
     }
     if ($this->debugMode) {
         print "<br/>USER'S COURSES";
         print_r($userCourses);
     }
     // Prendi tutti i corsi disponibili
     $allCourses = [];
     foreach ($this->courses_model->get_all() as $course) {
         $allCourses[$course['courseID']] = $course;
     }
     $totalItems = array();
     $total = 0;
     foreach ($cartItems as $item) {
         $courseID = $item['courseID'];
         $courseInfo = $allCourses[$courseID];
         $alreadySubscribed = array_key_exists($courseID, $userCourses);
         // Evita di far pagare corsi che l'utente ha già acquistato
         $wantCourse = !$alreadySubscribed && $item['payCourse'] == "1";
         // Check se l'utente ha acquistato la simulazione
         $wantSimulation = $item['paySimulation'] == "1";
         if (!$alreadySubscribed && !$wantCourse && $wantSimulation) {
             if ($this->debugMode) {
                 print "ERRORE: non puoi comprare solo la simulazione.";
             }
             echo json_encode(array("error" => true, "description" => "Non è possibile acquistare soltanto la simulazione per un corso. Seleziona anche il corso e riprova.", "errorCode" => "INVALID_CHOICE", "parameters" => array("paySimulation")));
             return;
         }
         // Non dare per buone le somme che arrivano dai cookie. Ricalcola.
         if ($wantCourse) {
             $coursePrice = $courseInfo['price'];
             if ($this->debugMode) {
                 print "<br/>Costo di " . $courseID . ": " . $coursePrice;
             }
             $totalItems[] = array('item' => $courseID, 'itemType' => 'course', 'price' => $coursePrice, 'description' => "Il corso di " . $courseInfo['name'] . " a reSeed");
             $total += $coursePrice;
         }
         // Se l'utente ha pagato anche la simulazione, vediamo qual è il suo prezzo
         if ($wantSimulation) {
             $simulationPrice = $courseInfo['simulationPrice'];
             if ($this->debugMode) {
                 print "<br/>Costo della simulazione di " . $courseID . ": " . $simulationPrice;
             }
             if ($simulationPrice) {
                 $totalItems[] = array('item' => $courseID . "-simulation", 'itemType' => 'simulation', 'price' => $simulationPrice, 'description' => "La simulazione del corso di " . $courseInfo['name'] . " a reSeed");
                 $total += $simulationPrice;
             }
         }
     }
     if ($this->debugMode) {
         print "<br/>PREZZO FINALE (PRE-SCONTI): " . $total;
     }
     $seedOnDiscount = 0;
     // Prendi l'eventuale seedon che l'utente ha specificato e controlla che
     // i) ce l'abbia davvero
     // ii) sia ancora valido (non usato && non scaduto)
     if (array_key_exists('seedOnChosen', $cartOptions) && $cartOptions['seedOnChosen'] !== "-1") {
         // Prendi il seedon scelto
         $seedonChosen = $cartOptions['seedOnChosen'];
         if ($this->debugMode) {
             print_r("<br/>L'utente " . $userID . " ha scelto il seedon con ID=" . $cartOptions['seedOnChosen']);
         }
         // Prendi tutti i seedon dell'utente
         $userSeedons = [];
         foreach ($this->seedon_model->get_seedon_not_used($userID) as $seedon) {
             // Considera solo seedon che non sono scaduti
             if ($seedon['endingDate'] > $this->time->get_timestamp()) {
                 $userSeedons[$seedon['seedonID']] = $seedon;
             }
         }
         if ($this->debugMode) {
             print "<br/>Seedon dell'utente: ";
             print_r($userSeedons);
         }
         if ($this->debugMode) {
             print_r(array_key_exists($seedonChosen, $userSeedons));
         }
         if (array_key_exists($seedonChosen, $userSeedons)) {
             $seedonInfo = $userSeedons[$seedonChosen];
             if ($seedonInfo['tag'] === "DISCOUNT") {
                 $seedOnDiscount = $seedonInfo['data'];
             }
         }
     }
     if ($this->debugMode) {
         print "<br/>SCONTO SEEDON FINALE: " . $seedOnDiscount;
     }
     // Considera gli sconti lifetime dell'utente
     $lifetimeDiscount = 0;
     foreach ($this->user_achievements_rewards_model->get_achievements_and_rewards_obtained($userID, "REWARD", "DISCOUNT") as $discount) {
         $lifetimeDiscount += $discount['data'];
     }
     if ($this->debugMode) {
         print "<br/>SCONTO LIFETIME FINALE: " . $lifetimeDiscount;
     }
     $totalDiscount = $seedOnDiscount + $lifetimeDiscount;
     $total = $total - $total * $totalDiscount;
     foreach ($totalItems as $key => $item) {
         // 			print("<br/>Il prezzo prima: " . $item['price']);
         $item['price'] = $item['price'] - $item['price'] * $totalDiscount;
         $totalItems[$key] = $item;
         // 			print("<br/>Il prezzo dopo: " . $item['price']);
     }
     // Considera se l'utente ha scelto le rate mensili
     if (array_key_exists('paymentCycleChosen', $cartOptions)) {
         $paymentCycleChosen = $cartOptions['paymentCycleChosen'];
         if ($paymentCycleChosen === "monthly") {
             if ($this->debugMode) {
                 print "<br/>PAGANDO A RATE IL TOTALE " . $total . " DIVENTA " . $total / 3;
             }
             $total /= 3;
             foreach ($totalItems as $key => $item) {
                 $item['price'] /= 3;
                 $totalItems[$key] = $item;
             }
         }
     }
     if ($this->debugMode) {
         print "<br/>PREZZO FINALE: " . $total;
     }
     // END OF PAYMENT CHECK
     $paymentChoice = $cartOptions['paymentMediaChosen'];
     if ($paymentChoice === "wireTransfer") {
         // Salva sul DB la richiesta di pagamento
         $paymentID = "WT-" . $this->randomString();
         $this->paypal_history_model->add($paymentID, $userID, $_COOKIE['cart'], "", $this->time->get_timestamp(), "created");
         // Aggiungiamo la pre-iscrizione al DB (se necessario)
         foreach ($cartItems as $item) {
             $courseID = $item['courseID'];
             $payment = $this->payment_model->get_payment($userID, $courseID);
             if (empty($payment)) {
                 $this->payment_model->add($userID, $courseID);
             }
         }
         sleep(3);
         echo json_encode(array("error" => false, "url" => "index.php/Paypal/payment_successful?paymentId=" . $paymentID . "&PayerID=" . $userID));
         return;
     } else {
         if ($paymentChoice === "cash") {
             $paymentID = "CASH-" . $this->randomString();
             $this->paypal_history_model->add($paymentID, $userID, $_COOKIE['cart'], "", $this->time->get_timestamp(), "created");
             // Aggiungiamo la pre-iscrizione al DB (se necessario)
             foreach ($cartItems as $item) {
                 $courseID = $item['courseID'];
                 $payment = $this->payment_model->get_payment($userID, $courseID);
                 if (empty($payment)) {
                     $this->payment_model->add($userID, $courseID);
                 }
             }
             sleep(3);
             echo json_encode(array("error" => false, "url" => "index.php/Paypal/payment_successful?paymentId=" . $paymentID . "&PayerID=" . $userID));
             return;
         } else {
             if ($paymentChoice === "creditCard") {
                 $userInfo = $this->userinfo_model->get($userID);
                 $payer = new Payer();
                 $payerInfo = new PayerInfo();
                 if (array_key_exists('name', $userInfo)) {
                     $payerInfo->setFirstName($userInfo['name']);
                 }
                 if (array_key_exists('surname', $userInfo)) {
                     $payerInfo->setLastName($userInfo['surname']);
                 }
                 if (array_key_exists('birthdate', $userInfo)) {
                     $payerInfo->setBirthDate($userInfo['birthdate']);
                 }
                 $payerInfo->setPayerId($userID);
                 $payer->setPayerInfo($payerInfo);
                 $payer->setPaymentMethod('paypal');
                 $amount = new Amount();
                 $amount->setCurrency('EUR');
                 $amount->setTotal($total);
                 $transaction = new Transaction();
                 $transaction->setAmount($amount);
                 $itemList = new ItemList();
                 foreach ($totalItems as $cartItem) {
                     $item = new Item();
                     $item->setName($cartItem['item']);
                     $item->setDescription($cartItem['description']);
                     $item->setQuantity(1);
                     $item->setCurrency("EUR");
                     $item->setPrice($cartItem['price']);
                     $itemList->addItem($item);
                 }
                 $transaction->setItemList($itemList);
                 $payment = new Payment();
                 $payment->setIntent('sale');
                 $payment->setPayer($payer);
                 $payment->setTransactions(array($transaction));
                 // Set redirects URLs
                 $redirectUrls = new RedirectUrls();
                 $baseUrl = "https://www.reseed.it/index.php/";
                 $redirectUrls->setReturnUrl($baseUrl . "Paypal/payment_successful")->setCancelUrl($baseUrl . "Paypal/payment_cancelled");
                 $payment->setRedirectUrls($redirectUrls);
                 try {
                     // Prendiamo i docenti di tutti i corsi
                     $all_teachers = array();
                     foreach ($this->course_teachers_model->get_all_teachers() as $course_teacher) {
                         $all_teachers[$course_teacher['courseID']] = $course_teacher['teacherID'];
                     }
                     // Vediamo quali sono i docenti coinvolti dal pagamento dell'utente
                     $course_teachers = array();
                     foreach ($cartItems as $cartItem) {
                         if ($cartItem['payCourse'] == "1" || $cartItem['paySimulation'] == "1") {
                             $teacher = $all_teachers[$cartItem['courseID']];
                             if (!array_key_exists($teacher, $course_teachers)) {
                                 $course_teachers[] = $teacher;
                             }
                         }
                     }
                     $teacher = null;
                     if (count($course_teachers) == 1) {
                         $teacher = $course_teachers[0];
                     }
                     $apiContext = $this->get_credentials($teacher);
                     // 				print("USING CREDENTIALS: ");
                     // 				print_r($apiContext);
                     $response = $payment->create($apiContext);
                     // Salva sul DB il successo
                     $this->paypal_history_model->add($response->getId(), $userID, json_encode($payment->toJSON()), json_encode($response->toJSON()), $this->time->get_timestamp(), $response->getState());
                 } catch (\PayPal\Exception\PayPalConnectionException $ex) {
                     echo json_encode(array("error" => true, "description" => "Errore durante la connessione a Paypal. Riprova più tardi. Dettagli errore: " . $ex->getData(), "errorCode" => "PAYPAL_ERROR", "parameters" => array("")));
                     return;
                 }
                 // Aggiungiamo la pre-iscrizione al DB (se necessario)
                 foreach ($cartItems as $item) {
                     $courseID = $item['courseID'];
                     $payment = $this->payment_model->get_payment($userID, $courseID);
                     if (empty($payment)) {
                         $this->payment_model->add($userID, $courseID);
                     }
                 }
                 echo json_encode(array("error" => false, "url" => $response->getApprovalLink()));
                 return;
             }
         }
     }
 }
 function generateItemsList($order)
 {
     $currency = $this->properties->getCurrency();
     $orderItems = $order->items;
     $items = array();
     foreach ($orderItems as $orderItem) {
         $item = new Item();
         $item->setName($orderItem->name);
         $item->setQuantity($orderItem->quantity);
         $item->setCurrency($currency);
         $item->setPrice($orderItem->price);
         if (isset($orderItem->sku)) {
             $item->setSku($orderItem->sku);
         }
         $items[] = $item;
     }
     $itemList = new ItemList();
     $itemList->setItems($items);
     return $itemList;
 }
Example #16
0
 public function store(Request $request)
 {
     //stores a new order for confirmation
     $result = false;
     $msg = "";
     $info = $request->all();
     //return dd($request->all());
     //return var_dump( $info );
     if (Auth::check()) {
         if (User::profileComplete(Auth::user())) {
             $paypal_conf = config('paypal');
             $this->_api_context = new ApiContext(new OAuthTokenCredential($paypal_conf['client_id'], $paypal_conf['secret']));
             $this->_api_context->setConfig($paypal_conf['settings']);
             $fabric = Fabric::find($info["fabric"]);
             $user = Auth::user();
             $order = new Order();
             if ($fabric->stock >= $info["totalAmount"] && $info["totalAmount"] > 0) {
                 //create new order with from the given data.
                 $order->user_id = $user->id;
                 $order->fabric_id = $fabric->id;
                 $order->fabric_name = $fabric->name;
                 $order->amount = $info["totalAmount"];
                 $weight = $info["totalAmount"] / 5 * (2.5 * 1.2);
                 $order->shipping = $weight;
                 $order->type_sample = $info["type-sample"];
                 $order->carrier = $info["carrier"];
                 $order->sub_total = $fabric->priceYard * $info["totalAmount"];
                 $order->total = $order->sub_total + $order->shipping;
                 $order->status = "not-confirmed";
                 $fabric->stock -= $order->amount;
                 $result = true;
                 $dataMail["subTotal"] = $order->sub_total;
                 $dataMail["shipping"] = $order->shipping;
                 $dataMail["carrier"] = $order->carrier;
                 $dataMail["type-sample"] = $order->type_sample;
                 $dataMail["total"] = $order->total;
                 $dataMail["fabric-name"] = $fabric->name;
                 $dataMail["name"] = $user->name;
                 $dataMail["city"] = $user->city;
                 $dataMail["country"] = $user->country;
                 $dataMail["zp"] = $user->zp_code;
                 $dataMail["address"] = $user->address;
                 $dataMail["email"] = $user->email;
                 $dataMail["totalAmount"] = $order->amount;
                 // paypal logic starts here
                 $payer = new Payer();
                 $payer->setPaymentMethod('paypal');
                 $item = new Item();
                 $item->setName($order->fabric_name . $order->created_at);
                 $item->setCurrency('USD');
                 $item->setQuantity($order->amount);
                 $item->setPrice($fabric->priceYard);
                 $itemCarrier = new Item();
                 $itemCarrier->setName("Shipping Price");
                 $itemCarrier->setCurrency('USD');
                 $itemCarrier->setQuantity(1);
                 $itemCarrier->setPrice($weight);
                 // add item to list
                 $item_list = new ItemList();
                 $item_list->setItems([$itemCarrier, $item]);
                 $amount = new Amount();
                 $amount->setCurrency('USD');
                 $amount->setTotal($order->sub_total + $weight);
                 $transaction = new Transaction();
                 $transaction->setAmount($amount);
                 $transaction->setItemList($item_list);
                 $transaction->setDescription('New Fabric Order');
                 $redirect_urls = new RedirectUrls();
                 $redirect_urls->setReturnUrl(url('successPay/orders'));
                 $redirect_urls->setCancelUrl(url("cancelPay/orders"));
                 $payment = new Payment();
                 $payment->setIntent('Sale');
                 $payment->setPayer($payer);
                 $payment->setRedirectUrls($redirect_urls);
                 $payment->setTransactions(array($transaction));
                 try {
                     PPHttpConfig::$DEFAULT_CURL_OPTS[CURLOPT_SSLVERSION] = 4;
                     $payment->create($this->_api_context);
                 } catch (\PayPal\Exception\PPConnectionException $ex) {
                     if (config('app.debug')) {
                         echo "Exception: " . $ex->getMessage() . PHP_EOL;
                         $err_data = json_decode($ex->getData(), true);
                         echo '<pre>';
                         print_r(json_decode($pce->getData()));
                         exit;
                         exit;
                     } else {
                         die('Some error occur, sorry for inconvenient');
                     }
                 }
                 foreach ($payment->getLinks() as $link) {
                     if ($link->getRel() == 'approval_url') {
                         $redirect_url = $link->getHref();
                         break;
                     }
                 }
                 // add payment ID to session
                 $paypal_data = ['paypal_payment_id' => $payment->getId(), "fabric" => $fabric, "order" => $order, "data_mail" => $dataMail, "paypal_context" => $this->_api_context];
                 Session::put("paypal_data", $paypal_data);
                 $order_data = ["msg" => "Error: could not connect to paypal", "result" => false];
                 if (isset($redirect_url)) {
                     // redirect to paypal
                     return redirect($redirect_url);
                 } else {
                     return redirect('/fabrics')->with('order_data', $order_data);
                 }
             } else {
                 $msg = "Error: The order value exceeds the stock or its 0";
                 $result = false;
             }
         } else {
             $msg = "Error: To use this option you need to fill your profile first";
             $result = false;
         }
     } else {
         $msg = "Error: You need to create an account first";
     }
     $order_data = ["msg" => $msg, "result" => $result];
     return redirect("/fabrics")->with("order_data", $order_data);
 }