commerce_api-8.x-1.x-dev/src/Plugin/jsonapi_hypermedia/LinkProvider/PaymentApproveLinkProvider.php

src/Plugin/jsonapi_hypermedia/LinkProvider/PaymentApproveLinkProvider.php
<?php

declare(strict_types=1);

namespace Drupal\commerce_api\Plugin\jsonapi_hypermedia\LinkProvider;

use Drupal\commerce_order\Entity\OrderInterface;
use Drupal\commerce_payment\Entity\PaymentGatewayInterface;
use Drupal\commerce_payment\Plugin\Commerce\PaymentGateway\OffsitePaymentGatewayInterface;
use Drupal\commerce_payment\Plugin\Commerce\PaymentGateway\SupportsStoredPaymentMethodsInterface;
use Drupal\Core\Access\AccessResult;
use Drupal\Core\Cache\CacheableMetadata;
use Drupal\Core\Url;
use Drupal\jsonapi_hypermedia\AccessRestrictedLink;

/**
* Class PaymentGatewayOnReturnLinkProvider.
*
* @JsonapiHypermediaLinkProvider(
*   id = "commerce_api.payment.approve",
*   link_relation_type = "payment-approve",
*   deriver = "\Drupal\commerce_api\Plugin\Derivative\OrderResourceTypeDeriver",
* )
*
* @internal
*/
final class PaymentApproveLinkProvider extends PaymentLinkProviderBase {

  /**
   * {@inheritdoc}
   */
  public function doGetLink(OrderInterface $order, PaymentGatewayInterface $payment_gateway, CacheableMetadata $cacheable_metadata) {
    $plugin = $payment_gateway->getPlugin();
    // The Approve resource is for off-site and manual payments.
    if (!$plugin instanceof OffsitePaymentGatewayInterface) {
      return AccessRestrictedLink::createInaccessibleLink($cacheable_metadata);
    }

    // If the off-site payment gateway supports stored payment methods, do not
    // provide this link. We only want the authorize and capture links to be
    // returned.
    if ($plugin instanceof SupportsStoredPaymentMethodsInterface && !$order->get('payment_method')->isEmpty()) {
      return AccessRestrictedLink::createInaccessibleLink($cacheable_metadata);
    }

    return AccessRestrictedLink::createLink(
      AccessResult::allowed(),
      $cacheable_metadata,
      new Url('commerce_api.checkout.payment_approve', [
        'commerce_order' => $order->uuid(),
        'payment_gateway' => $payment_gateway->uuid(),
      ]),
      $this->getLinkRelationType()
    );
  }

}

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

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