public function prepareAction(User $user, $mcuser, StoreItem $item) { $paymentName = 'paypal_express_checkout_plus_doctrine'; $data = array("currency" => "GBP"); $storage = $this->get('payum')->getStorage('Maxim\\CMSBundle\\Entity\\PaymentDetails'); $total = $item->getAmount() * 1; $tax = 0; if ($item->getTax() > 0) { $tax = $total * ($item->getTax() / 100); } /** @var $paymentDetails PaymentDetails */ $paymentDetails = $storage->createModel(); $paymentDetails['PAYMENTREQUEST_0_CURRENCYCODE'] = $data['currency']; $paymentDetails['PAYMENTREQUEST_0_ITEMAMT'] = number_format($total, 2); $paymentDetails['PAYMENTREQUEST_0_TAXAMT'] = number_format($tax, 2); $paymentDetails['PAYMENTREQUEST_0_AMT'] = number_format($total + $tax, 2); //$paymentDetails['PAYMENTREQUEST_0_ITEMCATEGORY'] = Api::PAYMENTREQUEST_ITERMCATEGORY_PHYSICAL; //$paymentDetails['PAYMENTREQUEST_0_QTY'] = 1; //$paymentDetails['PAYMENTREQUEST_0_NAME'] = $item->getName(); $paymentDetails['PAYMENTREQUEST_0_DESC'] = substr(strip_tags($item->getDescription()), 0, 126); $custom = array("user_id" => $user->getId(), "amount" => $total, "name" => $mcuser, "ip" => $user->getLastip(), "item_id" => $item->getId(), "discount" => $item->getReduction()); $paymentDetails['PAYMENTREQUEST_0_CUSTOM'] = json_encode($custom); // DIGITAL ITEM $paymentDetails['L_PAYMENTREQUEST_0_NAME0'] = strip_tags($item->getName()); $paymentDetails['L_PAYMENTREQUEST_0_AMT0'] = number_format($item->getAmount(), 2); $paymentDetails['L_PAYMENTREQUEST_0_QTY0'] = 1; $paymentDetails['L_PAYMENTREQUEST_0_DESC0'] = substr(strip_tags($item->getDescription()), 0, 126); $paymentDetails['L_PAYMENTREQUEST_0_TAXAMT0'] = number_format($tax, 2); $paymentDetails['L_PAYMENTREQUEST_0_ITEMCATEGORY0'] = Api::PAYMENTREQUEST_ITERMCATEGORY_PHYSICAL; $storage->updateModel($paymentDetails); $notifyToken = $this->getTokenFactory()->createNotifyToken($paymentName, $paymentDetails); $captureToken = $this->getTokenFactory()->createCaptureToken($paymentName, $paymentDetails, 'paypal_done'); $paymentDetails['INVNUM'] = $paymentDetails->getId(); $paymentDetails['RETURNURL'] = $captureToken->getTargetUrl(); $paymentDetails['CANCELURL'] = $captureToken->getTargetUrl(); $paymentDetails['PAYMENTREQUEST_0_NOTIFYURL'] = $notifyToken->getTargetUrl(); $storage->updateModel($paymentDetails); return $this->redirect($captureToken->getTargetUrl()); }