public function buyItem(Request $request) { $subTotal = 0; $data = $request->input('products'); Session::put('product_info', $data); $payer = Paypalpayment::payer(); $payer->setPaymentMethod("paypal"); $products = Products::whereIn('id', array_keys($data))->get(); foreach ($products as $product) { $quantity = $data[$product->id]['quantity']; $quantity = $product->quantity < $quantity ? $product->quantity : $quantity; $product_list[] = Paypalpayment::item()->setName($product->name)->setDescription($product->id)->setCurrency('USD')->setQuantity($quantity)->setPrice($product->price); $subTotal += $product->price * $quantity; } $itemList = Paypalpayment::itemList(); $itemList->setItems($product_list); $details = Paypalpayment::details(); $details->setShipping("100")->setTax("10")->setSubtotal($subTotal); //Payment Amount $amount = Paypalpayment::amount(); $amount->setCurrency("USD")->setTotal($subTotal + 110)->setDetails($details); // ### 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 = Paypalpayment::transaction(); $transaction->setAmount($amount)->setItemList($itemList)->setDescription("Payment description")->setInvoiceNumber(uniqid()); // ### Payment // A Payment Resource; create one using // the above types and intent as 'sale' $baseUrl = url(); $redirectUrls = Paypalpayment::redirectUrls(); $redirectUrls->setReturnUrl("{$baseUrl}/paypal/ok")->setCancelUrl("{$baseUrl}/paypal/error"); $payment = Paypalpayment::payment(); $payment->setIntent("sale")->setPayer($payer)->setRedirectUrls($redirectUrls)->setTransactions(array($transaction)); try { // ### Create Payment // Create a payment by posting to the APIService // using a valid ApiContext // The return object contains the status; $payment->create($this->_apiContext); } catch (\PPConnectionException $ex) { return "Exception: " . $ex->getMessage() . PHP_EOL; exit(1); } //dd($payment); return redirect($payment->getApprovalLink()); }