pay_request_resp.py
7.14 KB
1
2
3
4
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
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
import random
import string
import colander
import logging
from opensipkd.base import get_settings
from opensipkd.pasar.models.produk import PartnerPay
from opensipkd.base.models import User, DBSession, Partner, flush_row
from pyramid_rpc.jsonrpc import jsonrpc_method
from opensipkd.base.views import BaseView
from opensipkd.base.tools.api import (auth_from_rpc,
JsonRpcProdukNotFoundError, JsonRpcCustomerNotFoundError,
JsonRpcParameterNotFound)
from pyramid.view import view_config
from .api_payment import set_register_values
from opensipkd.base.views import BaseView
log = logging.getLogger(__name__)
def encode_form_to_json(form_request_data, parsed_produks):
decoded_dict = {}
customer_req = {}
deliver_to = {}
server = {}
for key in form_request_data:
if key[-5:] == '_cust':
customer_req[key.replace('_cust', '')] = form_request_data[key]
elif key[-8:] == '_deliver':
deliver_to[key.replace('_deliver', '')] = form_request_data[key]
elif key[-8:] == '_server':
server[key.replace('_server', '')] = form_request_data[key]
else:
decoded_dict[key] = form_request_data[key]
produks = parsed_produks
decoded_dict['customer'] = customer_req
decoded_dict['deliver_to'] = deliver_to
decoded_dict['server'] = server
decoded_dict['produk'] = produks
return decoded_dict
def randomString(stringLength):
letters = string.ascii_letters
return ''.join(random.choice(letters) for i in range(stringLength))
def save_partner_pay_request(values, row=None):
if not row:
print('data baru loh >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>')
row = PartnerPay()
else:
print('kok bisa sudah ada datanya >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>')
row.from_dict(values)
random_token = randomString(20)
row.token_pay_req = random_token
flush_row(row)
return row
def added_register_values(current_register_values, dat):
added_dict = current_register_values
added_dict['biller_name'] = dat['biller']['name']
added_dict['biller_phone'] = dat['biller']['phone']
added_dict['biller_email'] = dat['biller']['email']
added_dict['biller_address'] = dat['biller']['address']
added_dict['biller_city'] = dat['biller']['city']
added_dict['biller_state'] = dat['biller']['state']
added_dict['biller_post_code'] = dat['biller']['post_code']
added_dict['biller_country'] = dat['biller']['country']
added_dict['response_url'] = dat['response_url']
return added_dict
def get_input_error(data):
print('isi data >>>>>')
print(data)
err_dict = {}
err_dict['code'] = 0
data_read = data[0]
print('data_read >>>>>>>>>>>>')
print(data_read)
biller_data = data_read['biller']
cust_data = data_read['customer']
print('biller_data >>>>>>>>>>>>>>>>>>>>.')
print(biller_data)
cust_city = cust_data['city']
cust_state = cust_data['state']
bill_name = biller_data['name']
bill_phone = biller_data['phone']
bill_email = biller_data['email']
bill_city = biller_data['city']
bill_state = biller_data['state']
amt_total = data_read['amount']
if cust_city == None or cust_city == '':
err_dict['msg'] = 'customer_city tidak boleh kosong'
err_dict['code'] = 9025
if cust_state == None or cust_state == '':
err_dict['msg'] = 'customer_state tidak boleh kosong'
err_dict['code'] = 9026
if bill_name == None or bill_name == '':
err_dict['msg'] = 'biller_name tidak boleh kosong'
err_dict['code'] = 9016
if bill_phone == None or bill_name == '':
err_dict['msg'] = 'biller_phone tidak boleh kosong'
err_dict['code'] = 9017
if bill_email == None or bill_email == '':
err_dict['msg'] = 'biller_email tidak boleh kosong'
err_dict['code'] = 9018
if bill_city == None or bill_city == '':
err_dict['msg'] = 'bill_city tidak boleh kosong'
err_dict['code'] = 9025
if bill_state == None or bill_state == '':
err_dict['msg'] = 'bill_state tidak boleh kosong'
err_dict['code'] = 9026
return err_dict
@jsonrpc_method(method='pay_request', endpoint='api-merchant')
def pay_request(request, data, **kwargs):
user = auth_from_rpc(request)
# user = DBSession.query(User).filter(User.id == 1).first()
i = 0
if not data:
raise JsonRpcParameterNotFound
is_list = type(data) == list
data = is_list and data or [data]
customer = Partner.query_user(user).first()
if not customer:
raise JsonRpcCustomerNotFoundError
#todo, json request testing
r_data = {}
log.info("%s Payment Attempt Requestt: %s" % (customer.kode, data))
basic_error = get_input_error(data)
if basic_error['code'] != 0 :
r_data['status'] = "FAILED"
r_data['message'] = basic_error['msg']
r_data['code'] = basic_error['code']
else:
for dat in data:
if "invoice_no" not in dat or \
'amount' not in dat or not dat['amount']:
r_data["status"] = "FAILED"
r_data["message"] = "Parameter tidak lengkap"
r_data['code'] = -1
else:
inv_no = dat["invoice_no"]
row = PartnerPay.query().filter_by(cust_inv_no=inv_no).first()
if row and row.status > 0:
r_data["status"] = "FAILED"
r_data["message"] = "Nomor Invoice Tersebut sudah ada"
r_data['code'] = -1
else:
dat['produk'] = dat['cart']
values = set_register_values(dat, customer)
values = added_register_values(values, dat)
ar_invoice = save_partner_pay_request(values, row)
r_data["status"] = "SUCCESS"
r_data["message"] = "Data tersimpan silahkan lanjutkan pembayaran"
r_data['code'] = 0
r_data['pay_token'] = ar_invoice.token_pay_req
r_data['pay_url'] = request._host + '/pay/' + ar_invoice.token_pay_req
log.info("%s Payment Request Response: %s " % (customer.kode, r_data))
return r_data
class view_pay(BaseView):
@view_config(route_name = 'pay-request-resp', permission = 'pay-request-resp', renderer = 'templates/pay_request_resp.pt')#permission = 'pay-form',
def the_form(self):
request = self.req
session = self.ses
url_dict = request.matchdict
post_data = request.POST
items = dict(post_data)
if post_data:
produks = []
for key in items:
print(key)
if key[:10] == 'goods_name':
uniq = key.split('-')
uniq = uniq[1]
produk = (items[key], items['goods_detail-' + uniq], "{:n}".format(int(items['goods_amt-' + uniq])), items['img_url-' + uniq])
produks.append(produk)
json_dict_request = encode_to_json(items, produks)
return {}