/** * Gets a the gateway based on the payment * * @param Payment\Payment $payment The payment * @return GatewayInterface The found gateway */ public function getGatewayByPayment(Payment\Payment $payment) { $result = $this->_queryBuilderFactory->getQueryBuilder()->select('`gateway`')->from('`payment_gateway`')->where('`payment_id` = ?i', [$payment->id])->run(); if (!$result->count() || !$result->value()) { throw new GatewayNotFoundException("No record found for the given payment."); } $result = $result->value(); return $this->_gatewayCollection->get($result); }
/** * Register the available payment gateways. Construct each gateway adapter, * add to the gateway collection and define the default gateway service. * * @param \Message\Cog\Bootstrap\Services $services */ public function registerPaymentGateways($services) { // Local payments adapter $services['gateway.adapter.local-payment'] = function ($c) { return new Gateway\LocalPayment\Gateway(); }; // Zero payment adapter $services['gateway.adapter.zero-payment'] = function ($c) { return new Gateway\ZeroPayment\Gateway(); }; // Gateway collection $services['gateway.collection'] = function ($c) { return new Gateway\Collection([$c['gateway.adapter.local-payment'], $c['gateway.adapter.zero-payment']]); }; // Validation collection $services['gateway.validation'] = $services->factory(function ($c) { return new Gateway\Validation\Collection(); }); $services['gateway.validation.address'] = $services->factory(function ($c) { return new Gateway\Validation\AddressValidator($c['country.list'], $c['state.list']); }); // Active gateway service // @deprecated call `gateways` instead and select the appropriate gateway $services['gateway'] = function ($c) { $gateway = $c['cfg']->payment->gateway; if (is_array($gateway)) { $gateway = array_shift($gateway); } return $c['gateway.collection']->get($gateway); }; $services['gateways'] = function ($c) { $gateways = $c['cfg']->payment->gateway; if (!is_array($gateways)) { $gateways = [$gateways]; } $collection = $c['gateway.collection']; array_walk($gateways, function (&$gateway) use($collection) { $gateway = $collection->get($gateway); }); $gateways = new Gateway\Collection($gateways); $gateways->setSort(null); return $gateways; }; $services['payment.gateway.loader'] = function ($c) { return new Ecommerce\Payment\PaymentGatewayRecordLoader($c['payment.loader'], $c['gateway.collection'], $c['db.query.builder.factory']); }; $services['payment.gateway.edit'] = function ($c) { return new Ecommerce\Payment\PaymentGatewayRecordEdit($c['db.query']); }; }