/** * Process Paypal IPN response to payment. * * When the IPN mesage is validated, a payment success event * should be dispatched. * * @param int $orderId Order Id * @param array $parameters parameter array coming from Paypal IPN notification * * @throws ParameterNotReceivedException * @throws PaymentException */ public function processPaypalIPNMessage($orderId, array $parameters) { /** * Retrieving the order object. */ $order = $this->paymentBridge->findOrder($orderId); if (!$order) { throw new PaymentOrderNotFoundException(sprintf('Order #%s not found', $orderId)); } $this->paymentBridge->setOrder($order); /** * Check that we receive the mandatory parameters. */ $this->checkResultParameters($parameters); /** * Initializing PaypalWebCheckoutMethod, which is * an object representation of the payment information * coming from the payment processor. */ $paypalMethod = $this->paymentMethodFactory->create($parameters['mc_gross'], $parameters['payment_status'], $parameters['notify_version'], $parameters['payer_status'], $parameters['business'], null, $parameters['verify_sign'], $parameters['payer_email'], $parameters['txn_id'], $parameters['payment_type'], $parameters['receiver_email'], null, $parameters['txn_type'], null, $parameters['mc_currency'], null, $parameters['test_ipn'], $parameters['ipn_track_id']); /** * Notifying payment.done, which means that the * payment has been received, although we still * do not know if it is succesful or not. * Listening fot this event is useful when one * wants to record transaction informations. */ $this->paymentEventDispatcher->notifyPaymentOrderDone($this->paymentBridge, $paypalMethod); /** * Check if the transaction is successful. */ if (!$this->transactionSuccessful($parameters)) { $this->paymentEventDispatcher->notifyPaymentOrderFail($this->paymentBridge, $paypalMethod); throw new PaymentException(); } /** * Payment paid successfully. * * Paid process has ended successfully */ $this->paymentEventDispatcher->notifyPaymentOrderSuccess($this->paymentBridge, $paypalMethod); }
/** * Validates payment, given an Id of an existing order * * @param integer $orderId Id from order to validate * * @return BankwireManager self Object * * @throws PaymentOrderNotFoundException */ public function validatePayment($orderId) { /** * Loads order to validate */ $this->paymentBridge->findOrder($orderId); /** * Order Not found Exception must be thrown just here */ if (!$this->paymentBridge->getOrder()) { throw new PaymentOrderNotFoundException(); } /** * Payment paid successfully * * Paid process has ended successfully */ $this->paymentEventDispatcher->notifyPaymentOrderSuccess($this->paymentBridge, $this->bankwireMethodWrapper->getBankwireMethod()); return $this; }
/** * Decline payment, given an Id of an existing order. * * @param int $orderId Id from order to decline * * @return BankwireManager self Object * * @throws PaymentOrderNotFoundException */ public function declinePayment($orderId) { /** * Loads order to validate. */ $this->paymentBridge->findOrder($orderId); /** * Order Not found Exception must be thrown just here. */ if (!$this->paymentBridge->getOrder()) { throw new PaymentOrderNotFoundException(); } /** * Payment failed. * * Paid process has ended with failure */ $this->paymentEventDispatcher->notifyPaymentOrderFail($this->paymentBridge, $this->methodFactory->create()); return $this; }