/**
  * {@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);
 }
示例#2
0
 /**
  * {@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());
     }
 }
示例#3
0
 /**
  * {@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);
 }
示例#4
0
 /**
  * @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());
 }