/** * @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()); }
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; }
/** * @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; }
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; }
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; }
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]); } } } }
/** * @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; }
/** * [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; }
/** * 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; }
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; }
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); }