public function approve(jmsPaymentMethodData $data, $retry = false) { $customerId = $this->createCustomer(); try { // set bank account data $result = $this->getDispatcher()->bankaccountSet($this->getAccessKey(), $this->getTestMode(), $customerId, $data['bank_country'], $data['bank_code'], $data['account_number'], $data['account_holder']); if ($result['barStatus'] !== 'ALLOWED') { $data->setResponseCode($result['barStatus']); $data->setReasonCode('Bank account is not allowed.'); $e = new jmsPaymentException('This bank account is blocked.'); $e->setPaymentMethodData($data); throw $e; } // create debit payment $result = $this->getDispatcher()->sessionCreate($this->getAccessKey(), $this->getTestMode(), $customerId, '', $this->getProject($data), $this->getProjectCampaign($data), '', '', $data->getAmount(), $data->getCurrency(), $data['subject'], $data['payment_text'] === null ? $data['subject'] : $data['payment_text'], $data['ip'], null); $data->setResponseCode($result['status']); $data->setProcessedAmount($data->getAmount()); $data['external_reference_number'] = $result['sessionId']; } catch (Exception $e) { $data->setReasonCode($e->getMessage()); $e = jmsPaymentException::fromException($e); $e->setPaymentMethodData($data); throw $e; } }