5
6
7
8
9
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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
|
# File 'app/controllers/unlock_moip/contributions_controller.rb', line 5
def create
if params[:pickadate_birthdate_submit]
params[:contribution][:user_attributes][:birthdate] = params[:pickadate_birthdate_submit]
end
if create_contribution
data = {}
data["customer_code"] = @contribution.customer_code
data["subscription_code"] = @contribution.subscription_code
data["email"] = @contribution.user.email
data["full_name"] = @contribution.user.full_name
data["document"] = @contribution.user.document
data["phone_area_code"] = @contribution.user.phone_area_code
data["phone_number"] = @contribution.user.phone_number
data["birthdate"] = @contribution.user.birthdate
data["address_street"] = @contribution.user.address_street
data["address_number"] = @contribution.user.address_number
data["address_complement"] = @contribution.user.address_complement
data["address_district"] = @contribution.user.address_district
data["address_city"] = @contribution.user.address_city
data["address_state"] = @contribution.user.address_state
data["address_zipcode"] = @contribution.user.address_zipcode
@contribution.update gateway_data: data
begin
response = Moip::Assinaturas::Plan.details(@contribution.plan_code, @contribution.moip_auth)
rescue Moip::Assinaturas::WebServerResponseError => e
if @contribution.gateway.sandbox?
@contribution.errors.add(:base, "Parece que este Unlock não está autorizado a utilizar o ambiente de Sandbox do Moip Assinaturas.#{ ' Você já solicitou acesso ao Moip Assinaturas? Verifique também se configurou o Token e a Chave de API.' if @initiative.user == current_user }")
else
@contribution.errors.add(:base, "Parece que este Unlock não está autorizado a utilizar o ambiente de produção do Moip Assinaturas.#{ ' Você já homologou sua conta para produção no Moip Assinaturas? Verifique também se configurou o Token e a Chave de API.' if @initiative.user == current_user }")
end
return render '/initiatives/contributions/new'
rescue => e
@contribution.errors.add(:base, "Ocorreu um erro de conexão ao verificar o plano de assinaturas no Moip. Por favor, tente novamente.")
return render '/initiatives/contributions/new'
end
unless response[:success]
plan = {
code: @contribution.plan_code,
name: @contribution.plan_name,
amount: (@contribution.value * 100).to_i
}
begin
response = Moip::Assinaturas::Plan.create(plan, @contribution.moip_auth)
rescue
@contribution.errors.add(:base, "Ocorreu um erro de conexão ao criar o plano de assinaturas no Moip. Por favor, tente novamente.")
return render '/initiatives/contributions/new'
end
unless response[:success]
if response[:errors] && response[:errors].kind_of?(Array)
response[:errors].each do |error|
@contribution.errors.add(:base, "#{response[:message]} (Moip). #{error[:description]}")
end
else
@contribution.errors.add(:base, "Ocorreu um erro ao criar o plano de assinaturas no Moip. Por favor, tente novamente.")
end
return render '/initiatives/contributions/new'
end
end
customer = {
code: @contribution.customer_code,
email: @contribution.user.email,
fullname: @contribution.user.full_name,
cpf: @contribution.user.document,
phone_area_code: @contribution.user.phone_area_code,
phone_number: @contribution.user.phone_number,
birthdate_day: @contribution.user.birthdate.strftime('%d'),
birthdate_month: @contribution.user.birthdate.strftime('%m'),
birthdate_year: @contribution.user.birthdate.strftime('%Y'),
address: {
street: @contribution.user.address_street,
number: @contribution.user.address_number,
complement: @contribution.user.address_complement,
district: @contribution.user.address_district,
city: @contribution.user.address_city,
state: @contribution.user.address_state,
country: "BRA",
zipcode: @contribution.user.address_zipcode
}
}
begin
response = Moip::Assinaturas::Customer.details(@contribution.customer_code, @contribution.moip_auth)
rescue
@contribution.errors.add(:base, "Ocorreu um erro de conexão ao verificar o cadastro de cliente no Moip. Por favor, tente novamente.")
return render '/initiatives/contributions/new'
end
if response[:success]
begin
response = Moip::Assinaturas::Customer.update(@contribution.customer_code, customer, @contribution.moip_auth)
unless response[:success]
if response[:errors] && response[:errors].kind_of?(Array)
response[:errors].each do |error|
@contribution.errors.add(:base, "#{response[:message]} (Moip). #{error[:description]}")
end
else
@contribution.errors.add(:base, "Ocorreu um erro ao atualizar o cadastro de cliente no Moip. Por favor, tente novamente.")
end
return render '/initiatives/contributions/new'
end
rescue
@contribution.errors.add(:base, "Ocorreu um erro de conexão ao atualizar o cadastro de cliente no Moip. Por favor, tente novamente.")
return render '/initiatives/contributions/new'
end
else
begin
response = Moip::Assinaturas::Customer.create(customer, new_vault = false, @contribution.moip_auth)
rescue
@contribution.errors.add(:base, "Ocorreu um erro de conexão ao realizar o cadastro de cliente no Moip. Por favor, tente novamente.")
return render '/initiatives/contributions/new'
end
unless response[:success]
if response[:errors] && response[:errors].kind_of?(Array)
response[:errors].each do |error|
@contribution.errors.add(:base, "#{response[:message]} (Moip). #{error[:description]}")
end
else
@contribution.errors.add(:base, "Ocorreu um erro ao realizar o cadastro de cliente no Moip. Por favor, tente novamente.")
end
return render '/initiatives/contributions/new'
end
end
flash[:success] = "Apoio iniciado com sucesso! Agora é só realizar o pagamento :D"
return redirect_to edit_moip_contribution_path(@contribution)
end
end
|