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 334fd32a
authored
Aug 25, 2019
by
aa.gusti
Browse Files
Options
Browse Files
Tag
Download
Email Patches
Plain Diff
pln -odeo
1 parent
9dd15f42
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
159 additions
and
144 deletions
src/agratek/api/merchant/views/notify_vendor.py
src/agratek/api/merchant/views/tangselpay/pbb.py
src/agratek/api/merchant/views/vendor.py
src/agratek/api/merchant/views/notify_vendor.py
0 → 100644
View file @
334fd32
import
json
import
logging
from
datetime
import
datetime
import
requests
import
xmltodict
from
agratek.api.merchant.views.vendor
import
sha256
from
opensipkd.base.models
import
Partner
,
flush_row
from
opensipkd.pasar.models
import
PartnerProduk
,
H2hArInvoiceDet
from
pyramid.view
import
view_config
from
..tools
import
get_settings
,
get_jsonrpc
log
=
logging
.
Logger
(
__name__
)
def
update_harga
(
p
,
k
,
v
):
row
=
PartnerProduk
.
query
()
\
.
filter_by
(
kode
=
k
,
partner_id
=
p
.
id
)
.
first
()
if
not
row
:
row
=
PartnerProduk
()
row
.
kode
=
k
row
.
partner_id
=
p
.
id
row
.
created
=
datetime
.
now
()
else
:
row
.
updated
=
datetime
.
now
()
row
.
harga
=
v
flush_row
(
row
)
return
True
def
proses_odeo
(
data
):
settings
=
get_settings
()
mid
=
'odeo_mid'
in
settings
and
settings
[
"odeo_mid"
]
or
None
key
=
'odeo_key'
in
settings
and
settings
[
"odeo_key"
]
or
None
partner
=
Partner
.
query_kode
(
"ODEO"
)
.
first
()
status
=
str
(
data
[
"status"
])
if
status
==
"BROADCAST_NEW_PRICE"
:
signature
=
sha256
(
"{mid}{key}{status}"
.
format
(
mid
=
mid
,
key
=
key
,
status
=
status
))
if
signature
!=
data
[
"signature"
]:
log
.
info
(
"Signature Vendor Different"
)
log
.
info
(
"local
%
s, vendor
%
s"
%
(
signature
,
data
[
"signature"
]))
return
dict
(
error
=
"Signature different"
)
new_price
=
data
[
"new_prices"
]
for
k
in
new_price
:
v
=
new_price
[
k
]
update_harga
(
partner
,
k
,
v
)
return
dict
(
success
=
True
)
else
:
order_id
=
str
(
data
[
"order_id"
])
signature
=
sha256
(
"{order_id}{mid}{key}{status}"
.
format
(
order_id
=
order_id
,
mid
=
mid
,
key
=
key
,
status
=
status
))
if
signature
!=
data
[
"signature"
]:
log
.
info
(
"Signature Vendor Different"
)
log
.
info
(
"local
%
s, vendor
%
s"
%
(
signature
,
data
[
"signature"
]))
return
dict
(
error
=
"Signature Different"
)
order
=
H2hArInvoiceDet
.
query
()
\
.
filter
(
H2hArInvoiceDet
.
vendor_id
==
partner
.
id
,
H2hArInvoiceDet
.
vend_inv_no
==
str
(
order_id
))
.
first
()
if
order
:
if
status
==
"COMPLETED"
:
order
.
status
=
1
else
:
order
.
status
=
-
3
order
.
notify
=
dict
(
post
=
data
)
if
"sn"
in
data
and
data
[
"sn"
]:
order
.
serial_number
=
data
[
"sn"
]
else
:
message
=
'message'
in
data
and
data
[
"message"
]
or
""
if
message
:
loc
=
message
.
find
(
"SN: "
)
if
loc
>-
1
:
sn
=
message
[
loc
+
4
:
loc
+
28
]
order
.
serial_number
=
sn
flush_row
(
order
)
# todo: add to customer notify table
# todo: create cron for notify
# proses jika status 1 notify ada isinya tapi belum ada field result
# todo: create cron torecurring order to other vendor
# jika status = -2 proses vendor yang lain
callback_merchant
(
order
)
return
order
def
callback_merchant
(
order
):
# Callback to merchant
invoice
=
order
.
invoice
customer
=
invoice
.
customer
if
customer
and
customer
.
website
:
url
=
customer
.
website
users
=
customer
.
users
status
=
order
.
status
==
1
and
"SUCCESS"
\
or
order
.
status
>
-
2
and
"FAILED"
\
or
"PENDING"
key
=
invoice
.
cust_inv_no
+
users
.
user_name
+
users
.
api_key
+
status
signature
=
sha256
(
key
)
data
=
[]
produk
=
[]
dat
=
dict
(
invoice_no
=
invoice
.
cust_inv_no
,
signature
=
signature
)
discount
=
order
.
discount
and
order
.
discount
or
0
produk
.
append
(
dict
(
denom
=
order
.
produk
.
kode
,
id_pel
=
order
.
id_pel
,
subtotal
=
order
.
amt_sell
+
discount
,
discount
=
discount
,
total
=
order
.
amt_sell
,
status
=
status
,
serial_number
=
order
.
serial_number
))
dat
.
update
(
produk
=
produk
)
data
.
append
(
dat
)
js
=
get_jsonrpc
(
method
=
"notify"
,
params
=
dict
(
data
=
data
))
log
.
info
(
"Notify:
%
s
%
s"
%
(
url
,
js
))
try
:
with
requests
.
session
():
requests
.
post
(
url
,
data
=
data
,
timeout
=
10
)
except
:
pass
@view_config
(
route_name
=
'api-vendor-notify'
,
renderer
=
'json'
)
def
api_vendor_notify
(
request
):
vendor_nm
=
request
.
matchdict
[
'name'
]
if
vendor_nm
==
"odeo"
:
data
=
json
.
loads
(
request
.
text
)
order
=
proses_odeo
(
data
)
@view_config
(
route_name
=
'api-vendor-test'
,
renderer
=
"string"
)
def
vendor_test
(
request
):
params
=
request
.
params
vendor
=
request
.
matchdict
[
'vendor'
]
result
=
dict
(
a
=
1
)
request
.
response
.
content_type
=
"text / xml"
if
vendor
==
"vsi"
:
controls
=
request
.
GET
.
items
()
params
=
dict
(
controls
)
params
[
"status"
]
=
"SUCCESS"
result
=
dict
(
root
=
params
)
result
=
xmltodict
.
unparse
(
result
)
elif
vendor
==
"odeo"
:
params
=
json
.
loads
(
request
.
text
)
result
=
request
.
text
return
result
src/agratek/api/merchant/views/tangselpay/pbb.py
View file @
334fd32
...
@@ -160,6 +160,7 @@ class Vendor(VendorClass):
...
@@ -160,6 +160,7 @@ class Vendor(VendorClass):
else
:
else
:
self
.
status
=
-
1
self
.
status
=
-
1
parsd
=
None
parsd
=
None
return
self
.
set_failed
()
return
self
.
set_response
(
parsd
)
return
self
.
set_response
(
parsd
)
...
...
src/agratek/api/merchant/views/vendor.py
View file @
334fd32
...
@@ -54,9 +54,9 @@ class VendorClass(object):
...
@@ -54,9 +54,9 @@ class VendorClass(object):
def
set_response
(
self
,
data
=
None
,
message
=
None
,
code
=
999
,
typ
=
"inquiry"
):
def
set_response
(
self
,
data
=
None
,
message
=
None
,
code
=
999
,
typ
=
"inquiry"
):
if
not
data
and
message
:
if
not
data
and
message
:
message
=
message
and
message
or
"
Biller No Response
"
message
=
message
and
message
or
"
No Response From Biller
"
data
=
dict
(
code
=
code
,
data
=
dict
(
code
=
code
,
message
=
message
)
message
=
message
)
self
.
result
=
data
self
.
result
=
data
self
.
save_log
(
typ
)
self
.
save_log
(
typ
)
...
@@ -203,145 +203,3 @@ class Other(object):
...
@@ -203,145 +203,3 @@ class Other(object):
def
sha256
(
hash_string
):
def
sha256
(
hash_string
):
return
hashlib
.
sha256
(
hash_string
.
encode
())
.
hexdigest
()
return
hashlib
.
sha256
(
hash_string
.
encode
())
.
hexdigest
()
def
update_harga
(
p
,
k
,
v
):
row
=
PartnerProduk
.
query
()
\
.
filter_by
(
kode
=
k
,
partner_id
=
p
.
id
)
.
first
()
if
not
row
:
row
=
PartnerProduk
()
row
.
kode
=
k
row
.
partner_id
=
p
.
id
row
.
created
=
datetime
.
now
()
else
:
row
.
updated
=
datetime
.
now
()
row
.
harga
=
v
flush_row
(
row
)
return
True
def
proses_odeo
(
data
):
settings
=
get_settings
()
mid
=
'odeo_mid'
in
settings
and
settings
[
"odeo_mid"
]
or
None
key
=
'odeo_key'
in
settings
and
settings
[
"odeo_key"
]
or
None
partner
=
Partner
.
query_kode
(
"ODEO"
)
.
first
()
status
=
str
(
data
[
"status"
])
if
status
==
"BROADCAST_NEW_PRICE"
:
signature
=
sha256
(
"{mid}{key}{status}"
.
format
(
mid
=
mid
,
key
=
key
,
status
=
status
))
if
signature
!=
data
[
"signature"
]:
log
.
info
(
"Signature Vendor Different"
)
log
.
info
(
"local
%
s, vendor
%
s"
%
(
signature
,
data
[
"signature"
]))
return
dict
(
error
=
"Signature different"
)
new_price
=
data
[
"new_prices"
]
for
k
in
new_price
:
v
=
new_price
[
k
]
update_harga
(
partner
,
k
,
v
)
return
dict
(
success
=
True
)
else
:
order_id
=
str
(
data
[
"order_id"
])
signature
=
sha256
(
"{order_id}{mid}{key}{status}"
.
format
(
order_id
=
order_id
,
mid
=
mid
,
key
=
key
,
status
=
status
))
if
signature
!=
data
[
"signature"
]:
log
.
info
(
"Signature Vendor Different"
)
log
.
info
(
"local
%
s, vendor
%
s"
%
(
signature
,
data
[
"signature"
]))
return
dict
(
error
=
"Signature Different"
)
order
=
H2hArInvoiceDet
.
query
()
\
.
filter
(
H2hArInvoiceDet
.
vendor_id
==
partner
.
id
,
H2hArInvoiceDet
.
vend_inv_no
==
str
(
order_id
))
.
first
()
if
order
:
if
status
==
"COMPLETED"
:
order
.
status
=
1
else
:
order
.
status
=
-
3
order
.
notify
=
dict
(
post
=
data
)
if
"sn"
in
data
and
data
[
"sn"
]:
order
.
serial_number
=
data
[
"sn"
]
else
:
message
=
'message'
in
data
and
data
[
"message"
]
or
""
if
message
:
loc
=
message
.
find
(
"SN: "
)
if
loc
>-
1
:
sn
=
message
[
loc
+
4
:
loc
+
28
]
order
.
serial_number
=
sn
flush_row
(
order
)
# todo: add to customer notify table
# todo: create cron for notify
# proses jika status 1 notify ada isinya tapi belum ada field result
# todo: create cron torecurring order to other vendor
# jika status = -2 proses vendor yang lain
callback_merchant
(
order
)
return
order
def
callback_merchant
(
order
):
# Callback to merchant
invoice
=
order
.
invoice
customer
=
invoice
.
customer
if
customer
and
customer
.
website
:
url
=
customer
.
website
users
=
customer
.
users
status
=
order
.
status
==
1
and
"SUCCESS"
\
or
order
.
status
>
-
2
and
"FAILED"
\
or
"PENDING"
key
=
invoice
.
cust_inv_no
+
users
.
user_name
+
users
.
api_key
+
status
signature
=
sha256
(
key
)
data
=
[]
produk
=
[]
dat
=
dict
(
invoice_no
=
invoice
.
cust_inv_no
,
signature
=
signature
)
discount
=
order
.
discount
and
order
.
discount
or
0
produk
.
append
(
dict
(
denom
=
order
.
produk
.
kode
,
id_pel
=
order
.
id_pel
,
subtotal
=
order
.
amt_sell
+
discount
,
discount
=
discount
,
total
=
order
.
amt_sell
,
status
=
status
,
serial_number
=
order
.
serial_number
))
dat
.
update
(
produk
=
produk
)
data
.
append
(
dat
)
js
=
get_jsonrpc
(
method
=
"notify"
,
params
=
dict
(
data
=
data
))
log
.
info
(
"Notify:
%
s
%
s"
%
(
url
,
js
))
try
:
with
requests
.
session
():
requests
.
post
(
url
,
data
=
data
,
timeout
=
10
)
except
:
pass
@view_config
(
route_name
=
'api-vendor-notify'
,
renderer
=
'json'
)
def
api_vendor_notify
(
request
):
vendor_nm
=
request
.
matchdict
[
'name'
]
if
vendor_nm
==
"odeo"
:
data
=
json
.
loads
(
request
.
text
)
order
=
proses_odeo
(
data
)
@view_config
(
route_name
=
'api-vendor-test'
,
renderer
=
"string"
)
def
vendor_test
(
request
):
params
=
request
.
params
vendor
=
request
.
matchdict
[
'vendor'
]
result
=
dict
(
a
=
1
)
request
.
response
.
content_type
=
"text / xml"
if
vendor
==
"vsi"
:
controls
=
request
.
GET
.
items
()
params
=
dict
(
controls
)
params
[
"status"
]
=
"SUCCESS"
result
=
dict
(
root
=
params
)
result
=
xmltodict
.
unparse
(
result
)
elif
vendor
==
"odeo"
:
params
=
json
.
loads
(
request
.
text
)
result
=
request
.
text
return
result
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