pay_request_resp.py
5.51 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
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 = {}
print('isi form_request_data dalam encode_to_json >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>')
print(form_request_data)
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):
print('masuk save_partner_pay_request >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>')
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['bringback_url'] = dat['bringback_url']
return added_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
print('masuk sini loh >>>>>>>>>>>>>>>>>>>>>>>>>>>')
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 Request: %s" % (customer.kode, data))
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'] = 1
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 {}