/** * Creates and fills a transactionmodel * * @param array $response * @return \Paymill\Models\Response\Transaction */ private function _createTransaction($response) { $model = new Models\Transaction(); $model->setId($response['id']); $model->setAmount($response['amount']); $model->setOriginAmount($response['origin_amount']); $model->setStatus($response['status']); $model->setDescription($response['description']); $model->setLivemode($response['livemode']); $model->setRefunds($this->_handleRecursive($response['refunds'], 'refund')); $model->setCurrency($response['currency']); $model->setCreatedAt($response['created_at']); $model->setUpdatedAt($response['updated_at']); $model->setResponseCode($response['response_code']); $model->setShortId($response['short_id']); $model->setInvoices($response['invoices']); $model->setPayment($this->_convertResponseToModel($response['payment'], "payment")); $model->setClient($this->_convertResponseToModel($response['client'], "client")); $model->setPreauthorization($this->_convertResponseToModel($response['preauthorization'], "preauthorization")); $model->setFees($response['fees']); $model->setAppId($response['app_id']); return $model; }
/** * Tries to process a payment through Paymill * * @param PaymillMethod $paymentMethod Payment method * @param integer $amount Amount * * @return PaymillManager Self object * * @throws PaymentAmountsNotMatchException * @throws PaymentOrderNotFoundException * @throws PaymentException */ public function processPayment(PaymillMethod $paymentMethod, $amount) { /// first check that amounts are the same $paymentBridgeAmount = intval($this->paymentBridge->getAmount()); /** * If both amounts are different, execute Exception */ if ($amount != $paymentBridgeAmount) { throw new PaymentAmountsNotMatchException(sprintf('Amounts differ. Requested: [%s] but in PaymentBridge: [%s].', $amount, $paymentBridgeAmount)); } /** * At this point, order must be created given a card, and placed in PaymentBridge * * So, $this->paymentBridge->getOrder() must return an object */ $this->paymentEventDispatcher->notifyPaymentOrderLoad($this->paymentBridge, $paymentMethod); /** * Order Not found Exception must be thrown just here */ if (!$this->paymentBridge->getOrder()) { throw new PaymentOrderNotFoundException(); } /** * Order exists right here */ $this->paymentEventDispatcher->notifyPaymentOrderCreated($this->paymentBridge, $paymentMethod); /** * Validate the order in the module * params for paymill interaction */ $extraData = $this->paymentBridge->getExtraData(); $params = array('amount' => $paymentBridgeAmount, 'currency' => $this->paymentBridge->getCurrency(), 'token' => $paymentMethod->getApiToken(), 'description' => $extraData['order_description']); try { $transaction = $this->paymillTransactionWrapper->create($params['amount'], $params['currency'], $params['token'], $params['description']); } catch (PaymillException $e) { /** * create 'failed' transaction */ $transaction = new Transaction(); $transaction->setStatus('failed'); $transaction->setDescription($e->getCode() . ' ' . $e->getMessage()); } $this->processTransaction($transaction, $paymentMethod); return $this; }
/** * Creates and fills a transaction model * * @param array $response * @return Transaction */ private function _createTransaction(array $response) { $model = new Transaction(); $model->setId($response['id']); $model->setAmount($response['amount']); $model->setOriginAmount($response['origin_amount']); $model->setStatus($response['status']); $model->setDescription($response['description']); $model->setLivemode($response['livemode']); $model->setRefunds($this->_handleRecursive($response['refunds'], 'refund')); $model->setCurrency($response['currency']); $model->setCreatedAt($response['created_at']); $model->setUpdatedAt($response['updated_at']); $model->setResponseCode($response['response_code']); $model->setShortId($response['short_id']); $model->setInvoices($response['invoices']); $model->setPayment($this->_convertResponseToModel($response['payment'], "payment")); $model->setClient($this->_convertResponseToModel($response['client'], "client")); $model->setPreauthorization($this->_convertResponseToModel($response['preauthorization'], "preauthorization")); $model->setFees($response['fees']); $model->setAppId($response['app_id']); if (isset($response[Transaction::RESPONSE_FIELD_SHIPPING_ADDRESS])) { $model->setShippingAddress($this->_convertResponseToModel($response[Transaction::RESPONSE_FIELD_SHIPPING_ADDRESS], AbstractAddress::TYPE_SHIPPING)); } if (isset($response[Transaction::RESPONSE_FIELD_BILLING_ADDRESS])) { $model->setBillingAddress($this->_convertResponseToModel($response[Transaction::RESPONSE_FIELD_BILLING_ADDRESS], AbstractAddress::TYPE_BILLING)); } if (isset($response[Transaction::RESPONSE_FIELD_ITEMS])) { $model->setItems($this->_handleRecursive($response[Transaction::RESPONSE_FIELD_ITEMS], 'item')); } return $model; }