commerce_dibs-8.x-1.0-rc10/src/PluginForm/OffsiteRedirect/EasyHostedPaymentPage.php

src/PluginForm/OffsiteRedirect/EasyHostedPaymentPage.php
<?php

namespace Drupal\commerce_dibs\PluginForm\OffsiteRedirect;

use Drupal\commerce_order\Entity\OrderInterface;
use Drupal\commerce_payment\Exception\PaymentGatewayException;
use Drupal\commerce_payment\PluginForm\PaymentOffsiteForm;
use Drupal\Component\Utility\UrlHelper;
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Url;

class EasyHostedPaymentPage extends PaymentOffsiteForm {

  /**
   * {@inheritDoc}
   */
  public function buildConfigurationForm(array $form, FormStateInterface $form_state) {
    $form = parent::buildConfigurationForm($form, $form_state);

    /** @var \Drupal\commerce_payment\Entity\PaymentInterface $payment */
    $payment = $this->entity;
    $payment_gateway = $payment->getPaymentGateway();
    $payment_gateway_config = $payment_gateway->getPluginConfiguration();
    $order = $payment->getOrder();

    /** @var \Drupal\commerce_dibs\EasyOrderBuilder $order_builder */
    $order_builder = \Drupal::service('commerce_dibs.easy_order_builder');
    $dibs_order = $order_builder->buildOrder($order);
    $dibs_order['checkout']['returnUrl'] = $form['#return_url'];
    $dibs_order['checkout']['integrationType'] = 'HostedPaymentPage';
    $dibs_order['checkout']['merchantHandlesConsumerData'] = TRUE;

    if ($form['#capture']) {
      $dibs_order['checkout']['charge'] = TRUE;
    }

    $terms_path = $payment_gateway_config['terms_path'] ?? '/';
    $terms_uri = UrlHelper::isExternal($terms_path) ? Url::fromUri($terms_path) : Url::fromUserInput('/' . ltrim($terms_path, '/'), ['absolute' => TRUE]);
    $dibs_order['checkout']['termsUrl'] = $terms_uri->toString();

    if (!isset($payment_gateway_config['enable_notification_webhook']) || $payment_gateway_config['enable_notification_webhook'] === TRUE) {
      $order->setData('easy_authorization', uniqid());
      $dibs_order['notifications']['webhooks'][] = [
        'eventName' => 'payment.checkout.completed',
        'url' => Url::fromRoute('commerce_payment.notify',
          ['commerce_payment_gateway' => $payment_gateway->id()])
          ->setAbsolute(TRUE)
          ->toString(),
        'authorization' => $order->getData('easy_authorization'),
      ];

      // Save authorization but skip the order processors.
      $order->setRefreshState(OrderInterface::REFRESH_SKIP);
      $order->save();
    }

    /** @var \Drupal\commerce_dibs\EasyApiHelper $apiHelper */
    $apiHelper = \Drupal::service('commerce_dibs.easy_api_helper');
    $apiHelper->setEnvironment($payment_gateway_config['mode']);
    $apiHelper->setSecretKey($payment_gateway_config['secret_key']);

    try {
      $result = $apiHelper->createPayment($dibs_order);
    }
    catch (\Exception $exception) {
      throw new PaymentGatewayException($exception->getMessage());
    }
    if (strpos($result['hostedPaymentPageUrl'],'?') !== FALSE) {
      $result['hostedPaymentPageUrl'] .= '&language=' . ($payment_gateway_config['langcode'] ?? 'en-GB');
    } else {
      $result['hostedPaymentPageUrl'] .= '?language=' . ($payment_gateway_config['langcode'] ?? 'en-GB');
    }
    return $this->buildRedirectForm($form, $form_state, $result['hostedPaymentPageUrl'], []);
  }

}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc