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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
|
# File 'app/controllers/app_manager/charges_controller.rb', line 39
def callback
if params[:charge_id].present? && params[:shop].present? && params[:plan].present?
@shop = shop_data
shopify_token = @field_names['shopify_token']
shopify_domain = @field_names['name']
if !@shop.nil?
= {"X-Shopify-Access-Token" => @shop[shopify_token]}
charges = HTTParty.get('https://'+@shop[shopify_domain]+'/admin/api/'+@api_version+'/recurring_application_charges/'+params[:charge_id]+'.json', :headers => )
if charges.parsed_response && charges.parsed_response.is_a?(Hash) && charges.parsed_response.has_key?('recurring_application_charge')
plan_obj = AppManager::Client.new
plan_data = plan_obj.get_plan(params[:plan],params[:shop])
charge = charges.parsed_response['recurring_application_charge']
charge['charge_id'] = charge['id'];
charge['type'] = 'recurring';
charge['plan_id'] = params[:plan];
charge['shop_domain'] = params[:shop];
charge['interval'] = plan_data['interval']['value'];
if !@plan_field.nil?
begin
plan_obj.cancel_charge(@shop[shopify_domain],@shop[@plan_field])
rescue Exception => e
end
end
charge_ob = AppManager::Client.new(nil,json_req=true)
response = charge_ob.store_charge(charge.to_json)
if response['message'] == "success"
AppManager.clear_cache
model.update(@plan_field => params[:plan])
charge_data = plan_obj.get_charge(@shop[shopify_domain])
AppManager::EventHandler.new('charge_created',{
"plan" => plan_data,
"charge" => charge,
"previous_charge" => charge_data ? (charge_data['cancelled_charge'] || nil) : nil
})
end
redirect_to "#{app_url}?shop=#{params[:shop]}", :status => 301 and return
else
raise Error, "Invalid shopify charge #{charges.insect}"
end
else
raise ModelNotFound, "Shop not found"
end
else
raise Error, "Invalid params, must have charge_id,shop && plan"
end
end
|