/** * {@inheritDoc} * * @param Capture $request */ public function execute($request) { RequestNotSupportedException::assertSupports($this, $request); $model = ArrayObject::ensureArrayObject($request->getModel()); $httpRequest = new GetHttpRequest(); $this->gateway->execute($httpRequest); if (isset($httpRequest->request[Api::FIELD_V2_HASH])) { $model->replace($httpRequest->request); //validate hash if (false === $this->api->verifyHash($httpRequest->request[Api::FIELD_V2_HASH], $httpRequest->request)) { throw new HttpRedirect((string) $request->getToken()->getAfterUrl()); } } else { //payment canceled if (isset($httpRequest->request[Api::FIELD_PAYMENT_BATCH_NUM]) && (int) $httpRequest->request[Api::FIELD_PAYMENT_BATCH_NUM] === 0) { $model->replace($httpRequest->request); throw new HttpRedirect((string) $request->getToken()->getAfterUrl()); } if (false === isset($model[Api::FIELD_PAYMENT_URL]) && $request->getToken()) { $model[Api::FIELD_PAYMENT_URL] = $request->getToken()->getTargetUrl(); } if (false === isset($model[Api::FIELD_NOPAYMENT_URL]) && $request->getToken()) { $model[Api::FIELD_NOPAYMENT_URL] = $request->getToken()->getTargetUrl(); } throw new HttpPostRedirect($this->api->getApiEndpoint(), $this->api->preparePayment($model->toUnsafeArray())); } }
/** * {@inheritDoc} * * @param GetStatusInterface $request */ public function execute($request) { RequestNotSupportedException::assertSupports($this, $request); $model = ArrayObject::ensureArrayObject($request->getModel()); if (null === $model[Api::FIELD_V2_HASH] && null === $model[Api::FIELD_PAYMENT_BATCH_NUM]) { $request->markNew(); return; } if (array_key_exists(Api::FIELD_PAYMENT_BATCH_NUM, $model) && (int) $model[Api::FIELD_PAYMENT_BATCH_NUM] === 0) { $request->markCanceled(); return; } if ($model[Api::FIELD_V2_HASH] && $this->api->verifyHash($model[Api::FIELD_V2_HASH], $model->toUnsafeArray())) { $request->markCaptured(); return; } $request->markFailed(); }
/** * @test */ public function shouldEndpointBeString() { $api = new Api(['alternate_passphrase' => 'passphares', 'payee_account' => 'account', 'display_name' => 'payment', 'sandbox' => false], $this->createHttpClientMock()); $this->assertInternalType('string', $api->getApiEndpoint()); }