10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
|
# File 'app/controllers/app_manager/charges_controller.rb', line 10
def process_plan
if params[:shop].present? && params[:plan_id].present?
@shop = shop_data
if !@shop.nil?
plan_obj = AppManager::Client.new
plan_data = plan_obj.get_plan(params[:plan_id],params[:shop])
if plan_data.present? && plan_data.is_a?(Hash)
if plan_data['price'] == 0
active_charge_data = plan_obj.get_charge(params[:shop])
begin
if active_charge_data && active_charge_data.any? && !active_charge_data['active_charge'].nil? && !active_charge_data['active_charge']['charge_id'].nil?
gq_obj = AppManager::GraphqlHelper.new(@shop.shopify_domain,@shop.shopify_token)
rec_cancel_data = gq_obj.recurring_charge_cancel_api_call(active_charge_data['active_charge']['charge_id'],@shop)
if !rec_cancel_data["errors"].present? && (rec_cancel_data["data"].present? && rec_cancel_data["data"]["appSubscriptionCancel"].present? && !rec_cancel_data["data"]["appSubscriptionCancel"]["userErrors"].any? && (rec_cancel_data["data"]["appSubscriptionCancel"]["appSubscription"]["status"] == 'CANCELLED'))
cancelled_charge_id = rec_cancel_data["data"]["appSubscriptionCancel"]["appSubscription"]["id"].split('/')[-1]
plan_obj.cancel_charge(params[:shop],cancelled_charge_id)
end
end
rescue Exception => e
Rails.logger.info "APP MANAGER >>>> #{e.inspect}"
end
if @shop.update(@plan_field => params[:plan_id])
begin
AppManager::EventHandler.new('charge_created',{
"plan" => plan_data,
"charge" => nil,
"previous_charge" => nil,
"shopify_domain" => params[:shop]
})
rescue Exception => e
Rails.logger.info "APP MANAGER >>>> #{e.inspect}"
end
AppManager.clear_cache
render json: {'redirect_url' => "#{app_url}?shop=#{params[:shop]}"} and return true
else
raise Error, "Invalid charge"
end
end
request_data = {'shop' => @shop.shopify_domain, 'timestamp' => Time.now.to_i, 'plan' => params[:plan_id]}
return_url = "#{app_url}#{plan_callback_path}?#{Rack::Utils.build_query(request_data)}"
gq_obj = AppManager::GraphqlHelper.new(@shop.shopify_domain,@shop.shopify_token)
data = gq_obj.recurring_charge_api_call(plan_data,return_url,@shop)
if !data["errors"].present? && (data["data"].present? && data["data"]["appSubscriptionCreate"].present? && ( !data["data"]["appSubscriptionCreate"]["userErrors"].any? && data["data"]["appSubscriptionCreate"]["confirmationUrl"]))
redirect_charge = data["data"]["appSubscriptionCreate"]["confirmationUrl"]
render json: {'redirect_url' => redirect_charge}
else
raise Error, "#{data["errors"].as_json}"
end
else
raise Error, "#{data["errors"]}"
end
else
raise ModelNotFound, "Shop not found"
end
else
raise Error, "Missing Shop domain or plan id in params"
end
end
|