require_dependency "ishapi/application_controller" module Ishapi class PaymentsController < ApplicationController before_action :check_profile, only: %i| create2 unlock | ## ## this is for invoices on wasya.co, isn't it? ## 20200712 ## def create authorize! :open_permission, ::Ishapi begin invoice = Ish::Invoice.where( :email => params[:email], :number => params[:number] ).first payment = Ish::Payment.new :invoice => invoice, :email => params[:email], :amount => params[:amount] amount_cents = ( params[:amount].to_f * 100 ).to_i ::Stripe.api_key = STRIPE_SK acct = Stripe::Account.create( :country => 'US', :type => 'custom' ) charge = ::Stripe::Charge.create( :amount => amount_cents, :currency => 'usd', :source => params[:token][:id], :destination => { :account => acct, } ) payment.charge = JSON.parse( charge.to_json ) if payment.save render :json => { :status => :ok } else render :status => 404, :json => {} end rescue Mongoid::Errors::DocumentNotFound => e puts! e, 'e' render :status => 404, :json => {} end end ## This is for guyd _vp_ 20200721 def create2 authorize! :create, ::Ish::Payment begin amount_cents = 503 # @TODO: change ::Stripe.api_key = STRIPE_SK intent = Stripe::PaymentIntent.create({ amount: amount_cents, currency: 'usd', metadata: { integration_check: "accept_a_payment" }, }) payment = Ish::Payment.create!( client_secret: intent.client_secret, email: @current_user.email, payment_intent_id: intent.id, profile_id: @current_user.profile.id ) render json: { client_secret: intent.client_secret } rescue Mongoid::Errors::DocumentNotFound => e puts! e, 'e' render :status => 404, :json => e end end ## webhook def stripe_confirm authorize! :open_permission, ::Ishapi payload = request.body.read event = nil begin event = Stripe::Event.construct_from(JSON.parse(payload, symbolize_names: true)) rescue StandardError => e puts! e, 'e' render status: 400, json: { status: :not_ok } return end payment_intent = event.data.object payment = Ish::Payment.where( payment_intent_id: payment_intent.id ).first if payment && payment_intent['status'] == 'succeeded' payment.update_attributes( status: :confirmed ) payment.profile.update_attributes!( n_unlocks: payment.profile.n_unlocks + 5 ) end render status: 200, json: { status: :ok } end def unlock authorize! :unlock, ::Ish::Payment item = Object::const_get(params['kind']).find params['id'] existing = Purchase.where( user_profile: @current_user.profile, item: item ).first if existing render status: 200, json: { status: :ok, message: 'already purchased' } return end @current_user.profile.update_attributes n_unlocks: @current_user.profile.n_unlocks - 1 # @TODO: the number is variable purchase = ::Gameui::PremiumPurchase.create!( item: item, user_profile: @current_user.profile, ) render status: 200, json: { status: :ok } end end end