$payment->setIntent("sale"); $payment->setPayer($payer); $payment->setTransactions(array($transaction)); // ### Create Payment // Create a payment by posting to the APIService // using a valid ApiContext (See bootstrap.php for more on `ApiContext`) // The return object contains the status; try { $payment->create($apiContext); } catch (\PPConnectionException $ex) { echo "Exception: " . $ex->getMessage() . PHP_EOL; var_dump($ex->getData()); exit(1); } ?> <html> <body> <div> Created payment: <?php echo $payment->getId(); ?> </div> <pre><?php var_dump($payment->toArray()); ?> </pre> <a href='../index.html'>Back</a> </body> </html>
/** * Callback method * * @param array $data * @return array */ public function callback($data = array()) { $app = App::getInstance('zoo'); $joomla = JFactory::getApplication(); $data = $this->app->request->get('pp', 'array'); // Configure: $apiContext = new ApiContext(new OAuthTokenCredential($this->params->get('client_id', ''), $this->params->get('secret', ''))); $apiContext->setConfig(array('mode' => $this->params->get('test', 0) ? 'sandbox' : 'live', 'http.ConnectionTimeOut' => 60, 'log.LogEnabled' => false)); // Retrieve order data: $order = $app->zoocart->table->orders->get((int) $data['order_id']); $status = 0; $transaction_id = ''; if (!empty($order)) { // Process payment: // Create credit card: $card = new CreditCard(); $card->setType($data['cardtype'])->setNumber($data['cardnumber'])->setExpireMonth($data['month'])->setExpireYear($data['year'])->setCvv2($data['cvv'])->setFirstName($data['firstname'])->setLastName($data['lastname']); $fi = new FundingInstrument(); $fi->setCreditCard($card); // Create Payer: $payer = new Payer(); $payer->setPaymentMethod("credit_card")->setFundingInstruments(array($fi)); $orderitems = $order->getItems(); if (!empty($orderitems)) { $list = array(); $itemList = new ItemList(); $totalProductsAmount = 0; foreach ($orderitems as $order_item) { $item = new Item(); $item->setName($order_item->name)->setCurrency($order->getCurrency()->code)->setQuantity($order_item->quantity)->setPrice(money_format('%.2n', round($order_item->price, 2))); $totalProductsAmount += round($order_item->price, 2); $list[] = $item; } //add payment fee as product if ($order->payment) { $item = new Item(); $item->setName(JText::_('PLG_ZOOCART_PAYMENT_PAYPALPRO_FEE_LABEL'))->setCurrency($order->getCurrency()->code)->setQuantity(1)->setPrice(money_format('%.2n', round($order->payment, 2))); $totalProductsAmount += round($order->payment, 2); $list[] = $item; } //add discount as a product if ($order->payment) { $item = new Item(); $item->setName(JText::_('PLG_ZOOCART_PAYMENT_PAYPALPRO_DISCOUNT_LABEL'))->setCurrency($order->getCurrency()->code)->setQuantity(1)->setPrice(money_format('%.2n', round(0 - $order->discount, 2))); $totalProductsAmount += round(0 - $order->discount, 2); $list[] = $item; } $itemList->setItems($list); } $details = new Details(); $details->setShipping(money_format('%.2n', round($order->shipping, 2)))->setTax(money_format('%.2n', round($order->getTaxTotal(), 2)))->setSubtotal(money_format('%.2n', round($totalProductsAmount, 2))); $amount = new Amount(); $amount->setCurrency($order->getCurrency()->code)->setTotal(money_format('%.2n', $order->getTotal()))->setDetails($details); // Create transaction: $transaction = new Transaction(); $transaction->setAmount($amount)->setItemList($itemList)->setDescription("Order #" . (int) $order->id . " payment"); // Create payment: $payment = new Payment(); $payment->setIntent("sale")->setPayer($payer)->setTransactions(array($transaction)); try { $payment->create($apiContext); $response = $payment->toArray(); $response['order_total'] = $order->getTotal(); if (!$this->isValidIPN($response)) { $joomla->enqueueMessage(JText::_('PLG_ZOOCART_PAYPALPRO_INVALID_IPN'), 'error'); return; } $transaction_id = $response['id']; if ($response['state'] == 'approved') { $status = 1; } } catch (PayPal\Exception\PPConnectionException $ex) { $joomla->enqueueMessage(JText::sprintf('PLG_ZOOCART_PAYPALPRO_GOT_EXCEPTION', $ex->getMessage()), 'error'); } } else { // No order found exception } return array('status' => $status, 'transaction_id' => $transaction_id, 'order_id' => $order->id, 'total' => $order->getTotal()); }