Skip to content
Toggle navigation
Projects
Groups
Snippets
Help
Kunto
/
backoffice
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Settings
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit 7693e9b1
authored
Feb 13, 2020
by
yasir
Browse Files
Options
Browse Files
Tag
Download
Email Patches
Plain Diff
tambah vendor omnipay, testing notify
1 parent
739ad77b
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
214 additions
and
0 deletions
src/agratek/api/merchant/views/api_payment.py
src/agratek/api/merchant/views/omnipay/__init__.py
src/agratek/api/merchant/views/omnipay/notify.py
src/agratek/api/merchant/views/api_payment.py
View file @
7693e9b
...
...
@@ -69,6 +69,7 @@ def build_payment(vendor_produk, partner_pay=None, **kwargs):
def
set_register_values
(
dat
,
customer
):
billing
=
dat
[
"customer"
]
deliver_to
=
dat
[
"deliver_to"
]
biller
=
dat
[
"biller"
]
server
=
dat
[
"server"
]
produk
=
'produk'
in
dat
and
dat
[
"produk"
]
or
''
values
=
dict
(
...
...
@@ -103,6 +104,15 @@ def set_register_values(dat, customer):
delivery_state
=
deliver_to
[
'state'
],
# delivery_email=deliver_to['email'],
biller_name
=
biller
[
'name'
],
biller_phone
=
biller
[
'phone'
],
biller_email
=
biller
[
'email'
],
biller_address
=
biller
[
'address'
],
biller_city
=
biller
[
'city'
],
biller_state
=
biller
[
'state'
],
biller_post_code
=
biller
[
'post_code'
],
biller_country
=
biller
[
'country'
],
fee
=
dat
[
'fee'
],
vat
=
dat
[
'vat'
],
req_dt
=
dat
[
'req_dt'
],
...
...
src/agratek/api/merchant/views/omnipay/__init__.py
0 → 100644
View file @
7693e9b
import
json
import
base64
import
logging
from
datetime
import
datetime
from
opensipkd.base
import
get_settings
,
is_devel
,
get_host
from
opensipkd.base.models
import
flush_row
from
pyramid.httpexceptions
import
HTTPFound
from
.
import
Nicepay
from
..vendor
import
VendorClass
,
sha256
log
=
logging
.
getLogger
(
__name__
)
class
Vendor
(
VendorClass
):
# VendorClass
def
__init__
(
self
,
vendor_produk
,
invoice_det
,
**
kwargs
):
VendorClass
.
__init__
(
self
,
vendor_produk
,
invoice_det
=
invoice_det
,
**
kwargs
)
settings
=
get_settings
()
self
.
v_produk_kd
=
vendor_produk
.
kode
self
.
bank_cd
,
self
.
pay_method
=
self
.
v_produk_kd
.
split
(
'-'
)
self
.
url
=
'omnipay_va_url'
in
settings
and
settings
[
'onipay_va_url'
]
or
None
self
.
merchantid
=
'omnipay_merchant_id'
in
settings
and
settings
[
'omnipay_merchant_id'
]
or
''
self
.
password
=
'omnipay_password'
in
settings
and
settings
[
'omnipay_password'
]
or
''
self
.
callback_url
=
"{}/api/vendor/omnipay/callback"
.
format
(
get_host
())
self
.
notify_url
=
"{}/api/vendor/omnipay/notify"
.
format
(
get_host
())
#total yang harus dibayarkan = fee vendor + tagihan VA
self
.
amt
=
vendor_produk
.
harga
+
invoice_det
.
amt_sell
self
.
orderid
=
invoice_det
.
cust_inv_no
self
.
verify_key
=
self
.
merchantid
=
'omnipay_verify_key'
in
settings
and
settings
[
'omnipay_verify_key'
]
or
''
self
.
vcode
=
md5
(
str
(
self
.
amt
)
+
self
.
merchantid
+
self
.
orderid
+
self
.
verify_key
);
# customer / agratek_merchant
customer
=
self
.
invoice_det
.
customer
if
customer
:
self
.
cust_kd
=
customer
.
kode
self
.
cust_inv_no
=
self
.
invoice_det
.
cust_inv_no
def
_get_minute_duration
(
time_stamp
):
datetime_object
=
datetime
.
strptime
(
time_stamp
,
'
%
Y
%
m
%
d
%
H
%
M
%
S'
)
current_datetime
=
datetime
.
now
()
.
strftime
(
'
%
Y
%
m
%
d
%
H
%
M
%
S'
)
current_datetime
=
datetime
.
strptime
(
current_datetime
,
'
%
Y
%
m
%
d
%
H
%
M
%
S'
)
delta_minute
=
datetime_object
-
current_datetime
minute_day
=
delta_minute
.
days
*
1440
minute_hour
=
delta_minute
.
seconds
//
60
return
minute_day
+
minute_hour
def
_send_data_json
(
data
,
apiUrl
):
requestData
=
data
host
=
urlparse
(
apiUrl
)
hostUrl
=
host
.
netloc
hostPath
=
host
.
path
headers
=
{
"Content-type"
:
"application/json"
}
resp
=
requests
.
post
(
apiUrl
,
headers
=
headers
,
data
=
data
)
return
resp
.
text
def
_transform_omnipay_response
(
omnipay_response
):
plain_omni
=
omnipay_response
try
:
omni_resp
=
json
.
loads
(
plain_omni
)
except
Exception
as
e
:
omni_resp
=
{}
response_dict
=
{}
time_stamp
=
datetime
.
now
()
.
strftime
(
'
%
Y
%
m
%
d
%
H
%
M
%
S'
)
key
=
sha256
(
"{}{}"
.
format
(
self
.
cust_inv_no
,
time_stamp
))
tx_id
=
"{}{}"
.
format
(
self
.
invoice_det
.
customer
.
users
.
user_name
,
key
)
response_dict
[
"tx_id"
]
=
tx_id
response_dict
[
'invoice_no'
]
=
self
.
invoice_det
.
cust_inv_no
response_dict
[
'description'
]
=
self
.
invoice_det
.
description
if
'va'
in
omni_resp
:
response_dict
[
'code'
]
=
0
response_dict
[
'message'
]
=
'SUCCESS'
datetime_trans
=
datetime
.
strptime
(
omni_resp
[
'date'
],
'
%
Y-
%
m-
%
d
%
H:
%
M:
%
S'
)
response_dict
[
'trans_date'
]
=
datetime_trans
.
strftime
(
'
%
Y
%
m
%
d'
)
response_dict
[
'trans_time'
]
=
datetime_trans
.
strftime
(
'
%
H
%
M
%
S'
)
va_dict
=
{}
va_dict
[
'vacct_no'
]
=
omni_resp
[
'va'
]
datetime_due
=
datetime
.
strptime
(
omni_resp
[
'due_date'
],
'
%
Y-
%
m-
%
d
%
H:
%
M:
%
S'
)
va_dict
[
'valid_date'
]
=
datetime_due
.
strftime
(
'
%
Y
%
m
%
d'
)
va_dict
[
'valid_time'
]
=
datetime_due
.
strftime
(
'
%
H
%
M
%
S'
)
response_dict
[
'va'
]
=
va_dict
else
:
response_dict
[
'code'
]
=
999
response_dict
[
'message'
]
=
plain_omni
return
response_dict
def
register
(
self
):
json_request
=
{}
json_request
[
'returnurl'
]
=
self
.
notify_url
json_request
[
'merchantid'
]
=
self
.
merchantid
json_request
[
'orderid'
]
=
self
.
orderid
json_request
[
'amount'
]
=
self
.
amt
json_request
[
'bill_name'
]
=
self
.
invoice_det
.
inv_cust_nm
json_request
[
'bill_email'
]
=
self
.
invoice_det
.
inv_cust_email
json_request
[
'bill_mobile'
]
=
self
.
invoice_det
.
inv_cust_phone
json_request
[
'bill_desc'
]
=
'Pembayaran via Virtual Account dari Tuan/Nyonya : '
+
json_request
[
'bill_name'
]
json_request
[
'expiry_minute'
]
=
self
.
_get_minute_duration
(
self
.
invoice_det
.
inv_time_stamp
)
json_request
[
'vcode'
]
=
self
.
vcode
json_request
[
'password'
]
=
self
.
password
self
.
request
=
json_request
log
.
info
(
"Omnipay REQUEST: {}"
.
format
(
json
.
dumps
(
self
.
request
)))
# send request to omnipay
result_data
=
self
.
_send_data_json
(
self
.
url
,
json
.
dumps
(
json_request
))
response
=
json
.
loads
(
result_data
)
self
.
response
=
response
log
.
info
(
"Omnipay RESPONSE: {}"
.
format
(
json
.
dumps
(
self
.
response
)))
self
.
result
=
self
.
_transform_omnipay_response
(
self
.
response
)
log
.
info
(
"Omnipay RESULT: {}"
.
format
(
json
.
dumps
(
self
.
result
)))
self
.
save_log
(
typ
=
"inquiry"
)
return
dict
(
data
=
self
.
result
)
def
notify
(
self
,
data
):
log
.
info
(
"Omnipay NOTIFY: {}"
.
format
(
data
))
print
(
'omnipay notify >>>>>>>>>>>>>>>>>'
)
print
(
data
)
# amount = self.invoice_det.amt_sell
# vend_inv_no = self.invoice_det.vend_inv_no
# signature = sha256("{mid}{vend_inv_no}{amount}{key}" \
# .format(mid=self.mid, key=self.key, amount=str(amount),
# vend_inv_no=vend_inv_no))
# # print('>>>>', signature)
# if merchant_token != signature:
# return
# status = int(data['status'])
# if status == 0:
# # pembayaran sukses
# self.status = 1
# elif status == 1:
# # pembayaran gagal / reversal
# self.status = 2
# self.response = data
# self.result = get_result(self.response, self.pay_method)
# self.save_log("notify")
return
self
.
result
src/agratek/api/merchant/views/omnipay/notify.py
0 → 100644
View file @
7693e9b
import
logging
from
agratek.api.merchant.views.notify_vendor
import
payment_notify
from
opensipkd.pasar.models.produk
import
PartnerPay
,
PartnerProduk
log
=
logging
.
getLogger
(
__name__
)
from
.
import
Vendor
def
proses
(
data
):
# vend_inv_no = data["tXid"]
# cus_inv_no = data["referenceNo"]
# invoice_det = PartnerPay.query_vend_inv_no(vend_inv_no)\
# .filter_by(cust_inv_no=cus_inv_no)\
# .first()
# # by tatang
# if not invoice_det:
# return
# vendor_produk = PartnerProduk.query()\
# .filter_by(partner_id=invoice_det.vendor_id,
# produk_id=invoice_det.produk_id)\
# .first()
# # by tatang
# if not vendor_produk:
# return
print
(
'isi proses notify >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>'
)
print
(
data
)
log
.
info
(
"Omnipay NOTIFY: {}"
.
format
(
data
))
print
(
'>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>'
)
# print(invoice_det)
print
(
'>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>'
)
# vendor = Vendor(vendor_produk, invoice_det)
# vendor.notify(data)
# return payment_notify(invoice_det)
return
\ No newline at end of file
Write
Preview
Markdown
is supported
Attach a file
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to post a comment