/** * @param Request $http * @throws CheckoutException */ public function processRequest(Request $http) { try { $response = \WebToPay::checkResponse($http->all(), array('projectid' => $this->projectId, 'sign_password' => $this->signPassword)); if ($response['test'] !== '0') { //throw new CheckoutException('Testing, real payment was not made'); } if ($response['type'] !== 'macro') { throw new CheckoutException('Only macro payment callbacks are accepted'); } if ($response['orderid'] != $this->request->transaction) { throw new CheckoutException('Incorrect transaction'); } if ($response['amount'] != $this->request->amount * 100) { throw new CheckoutException('Incorrect amount'); } if ($response['currency'] != $this->request->currency) { throw new CheckoutException('Incorrect currency'); } if ($this->request->status == TransactionData::PAID) { throw new CheckoutException('Transaction already done.'); } TransactionData::update($this->request->transaction, ['date_paid' => time(), 'status' => TransactionData::PAID, 'gateway_response' => $response]); Callback::call($this->request); echo 'OK'; } catch (CheckoutException $e) { throw new CheckoutException('Gateway got error', 500, $e); } }
/** * @param $transactionId * @param Request $request * @throws CheckoutException */ public function index($transactionId, Request $request) { $transaction = TransactionData::get($transactionId); if (empty($transaction->transaction)) { throw new CheckoutException('No transaction found!'); } $gatewayClass = '\\Kiberzauras\\Checkout\\Gateway\\' . Provider::getGatewayName($transaction->provider) . "Gateway"; (new $gatewayClass($transaction))->processRequest($request); }
/** * @param null $callback_url * @param null $accept_url * @param null $cancel_url * @throws CheckoutException */ public function pay($callback_url = null, $accept_url = null, $cancel_url = null) { $this->callback_url = $callback_url; $this->accept_url = $accept_url; $this->cancel_url = $cancel_url; if (!$this->accept_url) { $this->accept_url = url('/'); } if (!$this->cancel_url) { $this->cancel_url = url('/'); } if (count($this->product_list) && $this->amount > 0) { throw new CheckoutException('Can\'t use setAmount() together with addProduct(), please choose only one.'); } if (!$this->currency) { throw new CheckoutException('Currency code required'); } $expose = []; if (count($this->product_list)) { $expose = $this->handleProducts(); } if ($this->amount <= 0) { throw new CheckoutException('Amount (price) must be greater than zero'); } if (count($this->recurring_setup)) { if (!in_array($this->provider, array(Provider::PAYPAL, Provider::BRAINTREE, Provider::GOOGLEWALLET))) { throw new CheckoutException('Your selected provider cant serve subscriptions'); } } $this->request = get_object_vars($this); $this->request['product_list'] = $expose; unset($this->request['request']); $this->request = TransactionData::generate($this->request); $gatewayClass = '\\Kiberzauras\\Checkout\\Gateway\\' . Provider::getGatewayName($this->provider) . "Gateway"; (new $gatewayClass($this->request))->startPayment(); }