Sha256: 42e76b28e9ec98fe3578454a2114b438944a27f378f94bc5d44de9125429ac81

Contents?: true

Size: 1.62 KB

Versions: 2

Compression:

Stored size: 1.62 KB

Contents

# frozen_string_literal: true

module SolidusAfterpay
  class CheckoutsController < SolidusAfterpay.api_base_controller_parent_class
    def create
      authorize! :update, order, order_token

      response = payment_method.gateway.create_checkout(
        order,
        redirect_confirm_url: redirect_confirm_url,
        redirect_cancel_url: redirect_cancel_url,
        mode: params[:mode],
        popup_origin_url: request.referer
      )

      if response.success?
        render json: {
          token: response.params['token'],
          expires: response.params['expires'],
          redirectCheckoutUrl: response.params['redirectCheckoutUrl']
        }, status: :created
      else
        render json: { error: response.message, errorCode: response.error_code }, status: :unprocessable_entity
      end
    end

    private

    def order
      @order ||= ::Spree::Order.find_by!(number: params[:order_number])
    end

    def payment_method
      @payment_method ||= if params[:payment_method_id]
                            SolidusAfterpay::PaymentMethod.active.find(params[:payment_method_id])
                          else
                            SolidusAfterpay::PaymentMethod.active.first
                          end
    end

    def redirect_confirm_url
      params[:redirect_confirm_url] || solidus_afterpay.callbacks_confirm_url(
        order_number: order.number, payment_method_id: payment_method.id
      )
    end

    def redirect_cancel_url
      params[:redirect_cancel_url] || solidus_afterpay.callbacks_cancel_url(
        order_number: order.number, payment_method_id: payment_method.id
      )
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
solidus_afterpay-0.3.0 app/controllers/solidus_afterpay/checkouts_controller.rb
solidus_afterpay-0.2.0 app/controllers/solidus_afterpay/checkouts_controller.rb