/** * {@inheritDoc} * * @param Convert $request */ public function execute($request) { RequestNotSupportedException::assertSupports($this, $request); /** @var PaymentInterface $payment */ $payment = $request->getSource(); $details = ArrayObject::ensureArrayObject($payment->getDetails()); $details->defaults(array('Ds_Merchant_Amount' => $payment->getTotalAmount(), 'Ds_Merchant_Order' => $this->api->ensureCorrectOrderNumber($payment->getNumber()), 'Ds_Merchant_MerchantCode' => $this->api->getMerchantCode(), 'Ds_Merchant_Currency' => $this->api->getISO4127($payment->getCurrencyCode()), 'Ds_Merchant_TransactionType' => Api::TRANSACTIONTYPE_AUTHORIZATION, 'Ds_Merchant_Terminal' => $this->api->getMerchantTerminalCode())); $request->setResult((array) $details); }
/** * {@inheritDoc} */ public function execute($request) { /** @var $request Capture */ RequestNotSupportedException::assertSupports($this, $request); $postData = ArrayObject::ensureArrayObject($request->getModel()); if (empty($postData['Ds_Merchant_MerchantURL']) && $request->getToken() && $this->tokenFactory) { $notifyToken = $this->tokenFactory->createNotifyToken($request->getToken()->getGatewayName(), $request->getToken()->getDetails()); $postData['Ds_Merchant_MerchantURL'] = $notifyToken->getTargetUrl(); } $postData->validatedKeysSet(array('Ds_Merchant_Amount', 'Ds_Merchant_Order', 'Ds_Merchant_Currency', 'Ds_Merchant_TransactionType', 'Ds_Merchant_MerchantURL')); $postData['Ds_Merchant_MerchantCode'] = $this->api->getMerchantCode(); $postData['Ds_Merchant_Terminal'] = $this->api->getMerchantTerminalCode(); if (false == $postData['Ds_Merchant_UrlOK'] && $request->getToken()) { $postData['Ds_Merchant_UrlOK'] = $request->getToken()->getTargetUrl(); } if (false == $postData['Ds_Merchant_UrlKO'] && $request->getToken()) { $postData['Ds_Merchant_UrlKO'] = $request->getToken()->getTargetUrl(); } $postData['Ds_SignatureVersion'] = Api::SIGNATURE_VERSION; if (false == $postData['Ds_MerchantParameters'] && $request->getToken()) { $postData['Ds_MerchantParameters'] = $this->api->createMerchantParameters($postData->toUnsafeArray()); } if (false == $postData['Ds_Signature']) { $postData['Ds_Signature'] = $this->api->sign($postData->toUnsafeArray()); throw new HttpPostRedirect($this->api->getRedsysUrl(), $postData->toUnsafeArray()); } }
/** * {@inheritDoc} * * @param Notify $request */ public function execute($request) { RequestNotSupportedException::assertSupports($this, $request); $details = ArrayObject::ensureArrayObject($request->getModel()); $this->gateway->execute($httpRequest = new GetHttpRequest()); if (null === $httpRequest->request['Ds_Signature']) { throw new HttpResponse('The notification is invalid', 400); } if (null === $httpRequest->request['Ds_MerchantParameters']) { throw new HttpResponse('The notification is invalid', 400); } if (false == $this->api->validateNotificationSignature($httpRequest->request)) { throw new HttpResponse('The notification is invalid', 400); } // After migrating to sha256, DS_Response param is not present in the // post request sent by the bank. Instead, bank sends an encoded string // our gateway needs to decode. // Once this is decoded we need to add this info to the details among // with the $httpRequest->request part $details->replace(ArrayObject::ensureArrayObject(json_decode(base64_decode(strtr($httpRequest->request['Ds_MerchantParameters'], '-_', '+/'))))->toUnsafeArray() + $httpRequest->request); throw new HttpResponse('', 200); }
/** * @test */ public function showReturnOptionsfromGetters() { $options = array('merchant_code' => 'a_merchant_code', 'terminal' => 'a_terminal', 'secret_key' => 'a_secret_key', 'sandbox' => true); $api = new Api($options); $this->assertEquals('a_merchant_code', $api->getMerchantCode()); $this->assertEquals('a_terminal', $api->getMerchantTerminalCode()); }