• プラグイン一覧
    - WCEX Item Combo Set
    - WCEX Amazon Pay
    - WCEX Wishlist お気に入りリスト
  • リリース情報
  • お役立ちコラム
  • お問い合わせ
  • サポート
    • よくある質問
      • WCEX Amazon Pay
      • WCEX Wishlist お気に入りリスト
      • wcex-item-combo-set
    • リファレンス
      • WCEX Amazon Pay
      • WCEX Wishlist お気に入りリスト
      • wcex-item-combo-set
新規会員登録
ログイン
新規会員登録
ログイン
カート
  • プラグイン一覧
    • - WCEX Item Combo Set
    • - WCEX Amazon Pay
    • - WCEX Wishlist お気に入りリスト
  • リリース情報
  • お役立ちコラム
  • サポート
    • - よくある質問
      • - WCEX Amazon Pay
      • - WCEX Wishlist お気に入りリスト
      • - wcex-item-combo-set
    • - リファレンス
      • - WCEX Amazon Pay
      • - WCEX Wishlist お気に入りリスト
      • - wcex-item-combo-set
  • お問い合わせ
Aivec APPs > WCEX Amazon Pay > クラス > Update
レファレンス
バージョン
2.6.4
絞り込み:

目次

  • ソース
  • 関数

フック

  • アクション
  • フィルター

ファンクション

    クラス

    Update

    Amazon Pay V2 SDK Update Checkout Session.

    ソース #ソース

    ファイル: src/API/CheckoutSession/Update.php

    class Update extends ErrorStore
    {
        // Errors
        const RESOURCE_NOT_FOUND = 'ResourceNotFound';
        const INVALID_CHECKOUT_SESSION_STATUS = 'InvalidCheckoutSessionStatus';
    
        // Constraints
        const CONSTRAINT_CHECKOUT_RESULT_RETURN_URL_NOT_SET = 'CheckoutResultReturnUrlNotSet';
        const CONSTRAINT_CHARGE_AMOUNT_NOT_SET = 'ChargeAmountNotSet';
        const CONSTRAINT_PAYMENT_INTENT_NOT_SET = 'PaymentIntentNotSet';
        const CONSTRAINT_BUYER_NOT_ASSOCIATED = 'BuyerNotAssociated';
    
        /**
         * AmazonPay module object
         *
         * @var AmazonPay
         */
        private $module;
    
        /**
         * Amazon checkout `paymentIntent`
         *
         * `Authorize`, `AuthorizeWithCapture` or `Confirm`
         *
         * @var string
         */
        private $paymentIntent;
    
        /**
         * True for asynchronous processing. False otherwise
         *
         * @var bool
         */
        private $canHandlePendingAuthorization;
    
        /**
         * Redirect URL for checkout result page
         *
         * @var string
         */
        private $checkoutResultUrl;
    
        /**
         * The type of Amazon Pay settlement.
         *
         * Should be `payonly` or `payandship`
         *
         * This variable is used for conditionally firing hooks
         * relative to the settlement type.
         *
         * @var string
         */
        private $settlementType;
    
        /**
         * PaymentIntent option
         *
         * @var string
         */
        public static $authorizeWithCapture = 'AuthorizeWithCapture';
    
        /**
         * PaymentIntent option
         *
         * @var string
         */
        public static $authorize = 'Authorize';
    
        /**
         * PaymentIntent option
         *
         * @var string
         */
        public static $confirm = 'Confirm';
    
        /**
         * Sets `$module` member var with dependency injection.
         *
         * @author Evan D Shaw <evandanielshaw@gmail.com>
         * @param AmazonPay $module
         * @param string    $checkoutResultUrl
         * @param bool      $canHandlePendingAuthorization Default: `false`
         * @param string    $paymentIntent `Authorize`, `AuthorizeWithCapture`, or `Confirm`. `Authorize` by default
         * @return void
         * @throws InvalidArgumentException Thrown if paymentIntent is `AuthorizeWithCapture` when
         *                                  canHandlePendingAuthorization is `true`.
         */
        public function __construct(
            AmazonPay $module,
            $checkoutResultUrl,
            $canHandlePendingAuthorization = false,
            $paymentIntent = 'Authorize'
        ) {
            if ($canHandlePendingAuthorization === true && $paymentIntent === 'AuthorizeWithCapture') {
                throw new InvalidArgumentException(
                    "paymentIntent cannot be 'AuthorizeWithCapture' when canHandlePendingAuthorization is true"
                );
            }
            $this->module = $module;
            $this->checkoutResultUrl = $checkoutResultUrl;
            $this->canHandlePendingAuthorization = $canHandlePendingAuthorization;
            $this->paymentIntent = $paymentIntent;
            parent::__construct();
            $this->populate();
        }
    
        /**
         * Updates a checkout session
         *
         * @see https://amazonpaycheckoutintegrationguide.s3.amazonaws.com/amazon-pay-api-v2/checkout-session.html#update-checkout-session
         * @author Evan D Shaw <evandanielshaw@gmail.com>
         * @param array $args {
         *     URL params
         *
         *     @type int $id Checkout Session ID
         * }
         * @return array
         * @throws InvalidArgumentException Thrown by `getAmazonClient`.
         */
        public function patch(array $args) {
            $formExtras = !empty($_POST['formExtras']) ? $_POST['formExtras'] : [];
            /**
             * Fires **before** calling Amazon Pay's `Update Checkout Session` API
             *
             * @param array  $formExtras
             * @param array  $args See {@see \Aivec\Welcart\SettlementModules\AmazonPay\API\CheckoutSession\Update::patch()}
             * @param string $settlementType `payonly` or `payandship`
             * @param string $paymentIntent `Authorize`, `AuthorizeWithCapture` or `Confirm`
             */
            do_action(
                'wcexaap_on_before_update_checkout_session',
                $formExtras,
                $args,
                $this->settlementType,
                $this->paymentIntent
            );
            if (!empty($this->settlementType)) {
                /**
                 * Fires **before** calling Amazon Pay's `Update Checkout Session` API
                 *
                 * @param array  $formExtras
                 * @param array  $args See {@see \Aivec\Welcart\SettlementModules\AmazonPay\API\CheckoutSession\Update::patch()}
                 * @param string $settlementType `payonly` or `payandship`
                 * @param string $paymentIntent `Authorize`, `AuthorizeWithCapture` or `Confirm`
                 */
                do_action(
                    "wcexaap_on_before_update_checkout_session_{$this->settlementType}",
                    $formExtras,
                    $args,
                    $this->settlementType,
                    $this->paymentIntent
                );
            }
    
            $id = $args['id'];
            $order = (new API\WelcartEntries())->getOrder();
            $payload = [
                'webCheckoutDetails' => [
                    'checkoutResultReturnUrl' => $this->checkoutResultUrl,
                ],
                'paymentDetails' => [
                    'paymentIntent' => $this->paymentIntent,
                    'canHandlePendingAuthorization' => $this->canHandlePendingAuthorization,
                    'chargeAmount' => [
                        'amount' => $order['total_full_price'],
                        'currencyCode' => usces_crcode('return'),
                    ],
                ],
                'platformId' => Constants::PLATFORM_ID,
            ];
    
            $headers = (new SandboxSimulation($this->module))->updateCheckoutSessionSetSimCodeIfSandbox();
            try {
                $client = $this->module->getAmazonClient();
                $result = $client->updateCheckoutSession($id, $payload, $headers);
                if ($this->module->errors->hasError($result)) {
                    return $this->module->errors->getAmzErrorResponse($result, $this);
                }
                if ($this->hasConstraints($result)) {
                    return $this->getConstraintsResponse($result);
                }
            } catch (\Exception $e) {
                return $this->module->errors->getErrorResponse(
                    GenericErrorStore::AMAZON_PAY_SDK_CLIENT_EXCEPTION,
                    [$e->getMessage()]
                );
            }
    
            /**
             * Fires **after** calling Amazon Pay's `Update Checkout Session` API
             *
             * This hook will not be called if an error occured
             *
             * @param array  $result
             * @param array  $formExtras
             * @param array  $args See {@see \Aivec\Welcart\SettlementModules\AmazonPay\API\CheckoutSession\Update::patch()}
             * @param string $settlementType `payonly` or `payandship`
             * @param string $paymentIntent `Authorize`, `AuthorizeWithCapture` or `Confirm`
             */
            do_action(
                'wcexaap_on_after_update_checkout_session',
                $result,
                $formExtras,
                $args,
                $this->settlementType,
                $this->paymentIntent
            );
            if (!empty($this->settlementType)) {
                /**
                 * Fires **after** calling Amazon Pay's `Update Checkout Session` API
                 *
                 * This hook will not be called if an error occured
                 *
                 * @param array  $result
                 * @param array  $formExtras
                 * @param array  $args See {@see \Aivec\Welcart\SettlementModules\AmazonPay\API\CheckoutSession\Update::patch()}
                 * @param string $settlementType `payonly` or `payandship`
                 * @param string $paymentIntent `Authorize`, `AuthorizeWithCapture` or `Confirm`
                 */
                do_action(
                    "wcexaap_on_after_update_checkout_session_{$this->settlementType}",
                    $result,
                    $formExtras,
                    $args,
                    $this->settlementType,
                    $this->paymentIntent
                );
            }
    
            return $result;
        }
    
        /**
         * Parses update result and returns true if any constraints exist
         *
         * @author Evan D Shaw <evandanielshaw@gmail.com>
         * @param array $result
         * @return bool
         */
        public function hasConstraints(array $result) {
            $body = json_decode($result['response'], true);
            if (isset($body['constraints']) && count($body['constraints']) > 0) {
                return true;
            }
    
            return false;
        }
    
        /**
         * Returns `AmazonGenericError` object created from response constraints
         *
         * @author Evan D Shaw <evandanielshaw@gmail.com>
         * @param array $result
         * @return AmazonGenericError
         */
        public function getConstraintsResponse(array $result) {
            $body = json_decode($result['response'], true);
            $constraint = $body['constraints'][0];
            $genericerr = $this->getErrorResponse($constraint['constraintId'], [$constraint['description']]);
            return new AmazonGenericError(
                $genericerr->errorcode,
                $genericerr->errorname,
                $genericerr->httpcode,
                $genericerr->debugmsg,
                $genericerr->message,
                $genericerr->adminmsg,
                $genericerr->logger,
                $result
            );
        }
    
        /**
         * Setter for `settlementType` member variable.
         *
         * @author Evan D Shaw <evandanielshaw@gmail.com>
         * @param string $type Should be either `payonly` or `payandship`
         * @return void
         */
        public function setSettlementType($type) {
            $this->settlementType = $type;
        }
    
        /**
         * Populates error store
         *
         * @see https://amazonpaycheckoutintegrationguide.s3.amazonaws.com/amazon-pay-api-v2/checkout-session.html#error-codes-2
         * @author Evan D Shaw <evandanielshaw@gmail.com>
         * @return void
         * @throws InvalidArgumentException Thrown if duplicate errorcodes exist.
         */
        public function populate() {
            $defaultErrors = $this->getErrorCodeMap();
            $defaultErrorMessage = $defaultErrors[parent::INTERNAL_SERVER_ERROR]->message;
            $actingLogger = new ActingLogger($this->module);
    
            $this->addError(new GenericError(
                self::RESOURCE_NOT_FOUND,
                $this->getConstantNameByValue(self::RESOURCE_NOT_FOUND),
                404,
                function ($message) {
                    return $message;
                },
                __('Youre checkout session has expired or is not available', 'wcexaap')
            ));
    
            $this->addError((new GenericError(
                self::INVALID_CHECKOUT_SESSION_STATUS,
                $this->getConstantNameByValue(self::INVALID_CHECKOUT_SESSION_STATUS),
                422,
                function ($message) {
                    return $message;
                },
                __('Illegal operation. Please try again.', 'wcexaap')
            ))->setLogger($actingLogger));
    
            $this->addError((new GenericError(
                self::CONSTRAINT_CHECKOUT_RESULT_RETURN_URL_NOT_SET,
                $this->getConstantNameByValue(self::CONSTRAINT_CHECKOUT_RESULT_RETURN_URL_NOT_SET),
                400,
                function ($message) {
                    return $message;
                },
                $defaultErrorMessage
            ))->setLogger($actingLogger));
    
            $this->addError((new GenericError(
                self::CONSTRAINT_CHARGE_AMOUNT_NOT_SET,
                $this->getConstantNameByValue(self::CONSTRAINT_CHARGE_AMOUNT_NOT_SET),
                400,
                function ($message) {
                    return $message;
                },
                $defaultErrorMessage
            ))->setLogger($actingLogger));
    
            $this->addError((new GenericError(
                self::CONSTRAINT_PAYMENT_INTENT_NOT_SET,
                $this->getConstantNameByValue(self::CONSTRAINT_PAYMENT_INTENT_NOT_SET),
                400,
                function ($message) {
                    return $message;
                },
                $defaultErrorMessage
            ))->setLogger($actingLogger));
    
            $this->addError((new GenericError(
                self::CONSTRAINT_BUYER_NOT_ASSOCIATED,
                $this->getConstantNameByValue(self::CONSTRAINT_BUYER_NOT_ASSOCIATED),
                400,
                function ($message) {
                    return $message;
                },
                __('Please select your preferred payment method and shipping address to complete the purchase.', 'wcexaap')
            ))->setLogger($actingLogger));
        }
    }
    

    ソースを伸ばす ソースを縮める


    関数 #関数

    Top ↑

    • __construct — Sets `$module` member var with dependency injection.
    • getConstraintsResponse — Returns `AmazonGenericError` object created from response constraints
    • hasConstraints — Parses update result and returns true if any constraints exist
    • patch — Updates a checkout session
    • populate — Populates error store
    • setSettlementType — Setter for `settlementType` member variable.

    • 新規会員登録
    • ログイン
      • プラグイン一覧
      • 会社概要
      • リリース情報
      • よくある質問
      • お役立ちコラム
      • お問い合わせ
      • 個人情報保護方針
      • 特定商取引法に基づく表記
      • 情報セキュリティ基本方針
      • 利用規約

    アイベック合同会社は「Welcart」「Amazon Pay」の公式パートナーです。

    ※Amazon、Amazon.co.jp、Amazon Payおよびそれらのロゴは、Amazon.com,inc.またはその関連会社の商標です。

    © 2025 Aivec llc All Rights Reserved.