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 31aa39ea
authored
Aug 04, 2019
by
Solo Group
Browse Files
Options
Browse Files
Tag
Download
Email Patches
Plain Diff
VSI
1 parent
de8ace71
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
950 additions
and
304 deletions
src/agratek/api/merchant/views/merchant.py
src/agratek/api/merchant/views/odeo/__init__.py
src/agratek/api/merchant/views/vendor_trx.py
src/agratek/api/merchant/views/vsi/__init__.py
src/agratek/api/merchant/views/vsi/bpjskes.py
src/agratek/api/merchant/views/vsi/pdam.py
src/agratek/api/merchant/views/vsi/pln_post.py
src/agratek/api/merchant/views/vsi/pln_pre.py
src/agratek/api/merchant/views/vsi_pulsa.py → src/agratek/api/merchant/views/vsi/pulsa.py
src/agratek/api/merchant/views/vsi/vsi_pln_post.py
src/agratek/api/merchant/views/vsi/vsi_pln_pre.py
src/agratek/api/merchant/views/merchant.py
View file @
31aa39e
...
@@ -20,8 +20,18 @@ def build_request(typ, vendor_produk, partner_log=None):
...
@@ -20,8 +20,18 @@ def build_request(typ, vendor_produk, partner_log=None):
# customer_id = 'customer_id' in values and values['customer_id'] or None
# customer_id = 'customer_id' in values and values['customer_id'] or None
# cust_trx_id = 'cust_trx_id' in values and values['cust_trx_id'] or None
# cust_trx_id = 'cust_trx_id' in values and values['cust_trx_id'] or None
log
.
info
(
"Modules:
%
s"
%
vendor_produk
.
modules
)
pckgs
=
'agratek.api.merchant.views'
modules
=
import_module
(
'.'
+
vendor_produk
.
modules
,
'agratek.api.merchant.views'
)
moduls
=
vendor_produk
.
modules
.
split
(
'.'
)
if
len
(
moduls
)
>
1
:
pckg
=
"."
.
join
(
moduls
[:
-
1
])
pckgs
=
"."
.
join
([
pckgs
,
pckg
])
moduls
=
moduls
[
-
1
:]
modul
=
moduls
[
0
]
log
.
info
(
"Module:
%
s Pckgs:
%
s"
%
(
modul
,
pckgs
))
modul
=
'.'
+
modul
modules
=
import_module
(
modul
,
pckgs
)
cls_module
=
modules
.
Vendor
(
vendor_produk
,
partner_log
)
cls_module
=
modules
.
Vendor
(
vendor_produk
,
partner_log
)
cls
=
hasattr
(
cls_module
,
typ
)
and
getattr
(
cls_module
,
typ
)
or
None
cls
=
hasattr
(
cls_module
,
typ
)
and
getattr
(
cls_module
,
typ
)
or
None
if
cls
:
if
cls
:
...
...
src/agratek/api/merchant/views/odeo/__init__.py
View file @
31aa39e
import
base64
import
base64
import
json
import
json
from
time
import
sleep
import
requests
import
requests
from
opensipkd.base
import
get_settings
from
opensipkd.base
import
get_settings
from
opensipkd.pasar.models
import
PartnerProduk
from
opensipkd.pasar.models
import
PartnerProduk
,
H2hArInvoiceDet
from
..vendor
import
VendorClass
from
..vendor
import
VendorClass
...
@@ -14,6 +15,7 @@ import urllib3
...
@@ -14,6 +15,7 @@ import urllib3
urllib3
.
disable_warnings
()
urllib3
.
disable_warnings
()
class
Vendor
(
VendorClass
):
class
Vendor
(
VendorClass
):
def
__init__
(
self
,
vendor_produk
,
invoice_det
):
def
__init__
(
self
,
vendor_produk
,
invoice_det
):
VendorClass
.
__init__
(
self
,
vendor_produk
,
invoice_det
=
invoice_det
)
VendorClass
.
__init__
(
self
,
vendor_produk
,
invoice_det
=
invoice_det
)
...
@@ -25,6 +27,20 @@ class Vendor(VendorClass):
...
@@ -25,6 +27,20 @@ class Vendor(VendorClass):
key
=
":"
.
join
([
self
.
mid
,
self
.
key
])
.
encode
()
key
=
":"
.
join
([
self
.
mid
,
self
.
key
])
.
encode
()
self
.
auth
=
base64
.
b64encode
(
key
)
.
decode
()
self
.
auth
=
base64
.
b64encode
(
key
)
.
decode
()
def
set_response
(
self
,
result
=
None
,
data
=
None
,
message
=
None
,
code
=
None
):
if
result
:
self
.
response
=
result
elif
not
data
and
message
:
code
=
code
and
code
or
500
message
=
message
and
message
or
"Biller No Response"
data
=
dict
(
code
=
code
,
message
=
message
)
self
.
result
=
data
self
.
save_log
(
'inquiry'
)
log
.
info
(
"Response To Cust:
%
s"
%
data
)
return
data
def
request_post
(
self
,
params
,
url
=
None
):
def
request_post
(
self
,
params
,
url
=
None
):
headers
=
{
'Authorization'
:
'Bearer {key}'
.
format
(
key
=
self
.
auth
)}
headers
=
{
'Authorization'
:
'Bearer {key}'
.
format
(
key
=
self
.
auth
)}
data
=
json
.
dumps
(
params
)
data
=
json
.
dumps
(
params
)
...
@@ -53,27 +69,27 @@ class Vendor(VendorClass):
...
@@ -53,27 +69,27 @@ class Vendor(VendorClass):
def
inquiry
(
self
):
def
inquiry
(
self
):
if
not
self
.
v_produk_kd
or
not
self
.
id_pel
:
if
not
self
.
v_produk_kd
or
not
self
.
id_pel
:
return
dict
(
code
=
9999
,
return
self
.
set_response
(
message
=
'Parameter tidak lengkap'
)
message
=
'Parameter tidak lengkap'
)
if
self
.
v_produk_kd
[:
3
]
==
'PLN'
and
self
.
v_produk_kd
!=
'PLNPASCA'
:
if
self
.
v_produk_kd
[:
3
]
==
'PLN'
and
self
.
v_produk_kd
!=
'PLNPASCA'
:
params
=
dict
(
params
=
dict
(
number
=
self
.
id_pel
number
=
self
.
id_pel
)
)
url
=
'/prepaid/pln/inquiry'
self
.
request
=
params
log
.
info
(
"Inquiry Request:
%
s"
%
params
)
self
.
save_log
(
"inquiry"
)
resp
=
self
.
request_get
(
params
,
'/prepaid/pln/inquiry'
)
else
:
else
:
params
=
dict
(
params
=
dict
(
denom
=
self
.
v_produk_kd
,
denom
=
self
.
v_produk_kd
,
number
=
self
.
id_pel
number
=
self
.
id_pel
)
)
self
.
request
=
params
url
=
'/postpaid/inquiry'
self
.
save_log
(
"inquiry"
)
log
.
info
(
"Inquiry Request:
%
s"
%
params
)
self
.
request
=
params
resp
=
self
.
request_get
(
params
,
'/postpaid/inquiry'
)
log
.
info
(
"Inquiry Request:
%
s"
%
params
)
self
.
save_log
(
"inquiry"
)
resp
=
self
.
request_get
(
params
,
url
)
if
not
resp
:
return
self
.
set_response
(
message
=
"Biller No Response"
)
try
:
try
:
result
=
json
.
loads
(
resp
.
text
)
result
=
json
.
loads
(
resp
.
text
)
...
@@ -81,7 +97,6 @@ class Vendor(VendorClass):
...
@@ -81,7 +97,6 @@ class Vendor(VendorClass):
result
=
resp
.
text
result
=
resp
.
text
log
.
info
(
"Inquiry Response:
%
s"
%
result
)
log
.
info
(
"Inquiry Response:
%
s"
%
result
)
if
resp
.
ok
:
if
resp
.
ok
:
self
.
status
=
1
# sukses
self
.
status
=
1
# sukses
data
=
"data"
in
result
and
result
[
"data"
]
or
None
data
=
"data"
in
result
and
result
[
"data"
]
or
None
...
@@ -102,15 +117,12 @@ class Vendor(VendorClass):
...
@@ -102,15 +117,12 @@ class Vendor(VendorClass):
self
.
status
=
-
1
self
.
status
=
-
1
parsd
=
dict
(
code
=
500
,
parsd
=
dict
(
code
=
500
,
message
=
"Other Error"
)
message
=
"Other Error"
)
if
not
parsd
:
parsd
=
dict
(
code
=
500
,
message
=
"Other Error"
)
self
.
response
=
result
#
self.response = result
log
.
info
(
"Response To Cust:
%
s"
%
parsd
)
#
log.info("Response To Cust: %s" % parsd)
self
.
result
=
parsd
#
self.result = parsd
self
.
save_log
(
'inquiry'
)
#
self.save_log('inquiry')
return
parsd
return
self
.
set_response
(
result
,
parsd
)
#
parsd
def
gagal_transaksi
(
self
,
code
):
def
gagal_transaksi
(
self
,
code
):
...
@@ -201,17 +213,18 @@ class Vendor(VendorClass):
...
@@ -201,17 +213,18 @@ class Vendor(VendorClass):
self
.
amt_buy
=
"price"
in
data
and
data
[
"price"
]
or
0
self
.
amt_buy
=
"price"
in
data
and
data
[
"price"
]
or
0
inq
.
update
(
parsd
)
inq
.
update
(
parsd
)
parsd
=
inq
parsd
=
inq
# parsd["total"] = self.amt_sell
# parsd["discount"] = self.discount
# parsd["subtotal"] = self.amt_sell+self.discount
# {'ref_no': '25785881', 'jml_data': 1, 'code': 0, 'id_pel': '08112118585', 'nama': 'SUBCRIBER NAME',
# 'total': 301500, 'discount': 0, 'status': 'SUCCES',
# 'rincian': {'admin': 1500, 'denda': 0, 'jml_bulan': 1, 'pokok': 300000, 'period': '2016-08 '},
# 'subtotal': 301500}
self
.
result
=
parsd
self
.
result
=
parsd
log
.
info
(
"Payment Result:
%
s"
%
self
.
result
)
log
.
info
(
"Payment Result:
%
s"
%
self
.
result
)
self
.
save_log
(
'payment'
)
self
.
save_log
(
'payment'
)
# if self.status == -1:
# sleep(2)
# row = H2hArInvoiceDet.query_id(self.invoice_det.id).first()
# if row.notify:
# post = "post" in row.notify and row.notify["post"] or ""
# if post:
#
return
parsd
return
parsd
else
:
# BAD REQUEST
else
:
# BAD REQUEST
...
...
src/agratek/api/merchant/views/vendor_trx.py
View file @
31aa39e
...
@@ -283,6 +283,10 @@ class ViewHome(BaseView):
...
@@ -283,6 +283,10 @@ class ViewHome(BaseView):
if
result
:
if
result
:
values
.
update
(
result
)
values
.
update
(
result
)
if
result
[
"f_result"
][
"code"
]
==
0
:
session
.
flash
(
"Sukses"
)
else
:
session
.
flash
(
result
[
"f_result"
][
"message"
],
"error"
)
form
.
render
(
values
)
form
.
render
(
values
)
return
dict
(
form
=
form
,
params
=
form_params_view
)
return
dict
(
form
=
form
,
params
=
form_params_view
)
...
...
src/agratek/api/merchant/views/vsi/__init__.py
View file @
31aa39e
...
@@ -11,6 +11,59 @@ from pyramid_rpc.jsonrpc import JsonRpcError
...
@@ -11,6 +11,59 @@ from pyramid_rpc.jsonrpc import JsonRpcError
from
..vendor
import
VendorClass
from
..vendor
import
VendorClass
vsi_status
=
{
"11"
:{
"message"
:
"ERROR NEED TO SIGN ON"
,
"status"
:
-
1
},
"12"
:{
"message"
:
"ERROR Tidak bisa dibatalkan"
,
"status"
:
-
1
},
"13"
:{
"message"
:
"ERROR Nilai Transaksi tidak valid"
,
"status"
:
-
3
},
"14"
:{
"message"
:
"ERROR ID Tidak Terdaftar"
,
"status"
:
-
3
},
"15"
:{
"message"
:
"ERROR No Meter Tidak Terdaftar"
,
"status"
:
-
3
},
"16"
:{
"message"
:
"ERROR PRR SUBSCRIBER"
,
"status"
:
-
3
},
"17"
:{
"message"
:
"ERROR ID Punya Tunggakan"
,
"status"
:
-
3
},
"18"
:{
"message"
:
"ERROR Permintaan Sedang diproses"
,
"status"
:
-
1
},
"26"
:{
"message"
:
"Quota Transaksi Agen Tidak Mencukupi. Silahkan Kontak Agen."
,
"status"
:
-
2
},
"29"
:{
"message"
:
"ERROR Kode Hash tidak valid"
,
"status"
:
-
2
},
"30"
:{
"message"
:
"ERROR Pesan tidak valid"
,
"status"
:
-
2
},
"31"
:{
"message"
:
"ERROR Kode Bank tidak terdaftar"
,
"status"
:
-
2
},
"32"
:{
"message"
:
"ERROR Sentral tidak terdaftar"
,
"status"
:
-
2
},
"33"
:{
"message"
:
"ERROR Produk tidak terdaftar"
,
"status"
:
-
2
},
"34"
:{
"message"
:
"ERROR PPID Tidak terdaftar"
,
"status"
:
-
2
},
"35"
:{
"message"
:
"ERROR Akun Tidak Terdaftar"
,
"status"
:
-
2
},
"41"
:{
"message"
:
"ERROR Nilai Transaksi dibawah Nilai Minimum"
,
"status"
:
-
2
},
"42"
:{
"message"
:
"ERROR Nilai Transaksi diatas Nilai Maximum"
,
"status"
:
-
2
},
"43"
:{
"message"
:
"ERROR Daya Baru Lebih Kecil dari Daya Sekarang"
,
"status"
:
-
3
},
"44"
:{
"message"
:
"ERROR Nilai Daya Tidak Valid"
,
"status"
:
-
3
},
"45"
:{
"message"
:
"ERROR Nilai Biaya Administrasi Tidak Valid"
,
"status"
:
-
3
},
"46"
:{
"message"
:
"ERROR Deposit Tidak Mencukupi"
,
"status"
:
-
2
},
"47"
:{
"message"
:
"ERROR Diluar Batas KWH"
,
"status"
:
-
3
},
"48"
:{
"message"
:
"ERROR Permintaan sudah kadaluarsa"
,
"status"
:
-
3
},
"51"
:{
"message"
:
"ERROR Transaksi Gagal dari Mesin Vending"
,
"status"
:
-
3
},
"52"
:{
"message"
:
"ERROR Transaksi dipending dari Mesin Vending"
,
"status"
:
-
1
},
"53"
:{
"message"
:
"ERROR Produk tidak ditemukan"
,
"status"
:
-
1
},
"54"
:{
"message"
:
"ERROR Jawaban dari Biller Tidak ditemukan"
,
"status"
:
-
3
},
"55"
:{
"message"
:
"ERROR Lainnya Mesin Vending"
,
"status"
:
-
2
},
"56"
:{
"message"
:
"ERROR Nomor Telpon Tidak diketahui"
,
"status"
:
-
3
},
"63"
:{
"message"
:
"ERROR Tidak ada Pembayaran"
,
"status"
:
-
1
},
"60"
:{
"message"
:
"ERROR Akun sudah didaftarkan"
,
"status"
:
-
3
},
"67"
:{
"message"
:
"ERROR CANNOT CONNECT"
,
"status"
:
-
3
},
"68"
:{
"message"
:
"ERROR Timeout"
,
"status"
:
-
2
},
"69"
:{
"message"
:
"ERROR Sertifikat tidak dikenal"
,
"status"
:
-
2
},
"70"
:{
"message"
:
"ERROR Timeout tidak refund"
,
"status"
:
-
1
},
"72"
:{
"message"
:
"ERROR Permintaan tidak mungkin dilayani"
,
"status"
:
-
2
},
"73"
:{
"message"
:
"ERROR Request dipending di Biller"
,
"status"
:
-
1
},
"77"
:{
"message"
:
"ERROR Id di suspend"
,
"status"
:
-
2
},
"88"
:{
"message"
:
"ERROR Tagihan sudah dibayar"
,
"status"
:
-
3
},
"89"
:{
"message"
:
"ERROR Tagihan tidak tersedia"
,
"status"
:
-
3
},
"90"
:{
"message"
:
"ERROR sedang proses CUT OFF"
,
"status"
:
-
1
},
"91"
:{
"message"
:
"ERROR Database"
,
"status"
:
-
1
},
"92"
:{
"message"
:
"ERROR Nomor Referensi Switching tidak ditemukan"
,
"status"
:
-
2
},
"93"
:{
"message"
:
"ERROR Nomor Referensi Switching tidak valid"
,
"status"
:
-
2
},
"94"
:{
"message"
:
"ERROR Pembatalan sudah dilakukan"
,
"status"
:
-
3
},
"95"
:{
"message"
:
"ERROR Kode Merchant tidak terdaftar"
,
"status"
:
-
2
},
"96"
:{
"message"
:
"ERROR Transaksi tidak ditemukan"
,
"status"
:
-
3
},
"97"
:{
"message"
:
"ERROR SW BANK Tidak identik"
,
"status"
:
-
2
},
"98"
:{
"message"
:
"ERROR Nomor Referensi Switching tidak valid"
,
"status"
:
-
2
},
"146"
:{
"message"
:
"ERROR di servis deposit"
,
"status"
:
-
1
},
}
class
Vendor
(
VendorClass
):
class
Vendor
(
VendorClass
):
def
__init__
(
self
,
vendor_produk
,
invoice_det
,
**
kwargs
):
def
__init__
(
self
,
vendor_produk
,
invoice_det
,
**
kwargs
):
...
...
src/agratek/api/merchant/views/vsi/bpjskes.py
0 → 100644
View file @
31aa39e
from
opensipkd.pasar.models
import
PartnerProduk
import
requests
import
xmltodict
from
.
import
Vendor
as
VendorClass
,
vsi_status
from
opensipkd.base.tools
import
log
class
Vendor
(
VendorClass
):
def
get_bulan
(
self
):
return
int
(
self
.
invoice_det
.
produk
.
kode
[
6
:])
def
pars_data
(
self
,
data
):
bulan
=
self
.
get_bulan
()
product_id
=
self
.
invoice_det
.
produk
.
id
partner_id
=
self
.
invoice_det
.
h2h_ar_invoice
.
customer_id
discount
=
PartnerProduk
.
get_discount
(
partner_id
,
product_id
)
admin
=
self
.
vendor_produk
.
produk
.
harga
pokok
=
"jmltagihan"
in
data
and
data
[
"jmltagihan"
]
or
0
subtotal
=
pokok
+
admin
total
=
subtotal
-
discount
self
.
amt_buy
=
"totaltag"
in
data
and
int
(
data
[
"totaltag"
])
or
0
self
.
ant_sell
=
total
code
=
"rc"
in
data
and
int
(
data
[
"rc"
])
or
500
if
code
==
0
:
self
.
status
=
1
message
=
"SUCCESS"
else
:
self
.
status
=
vsi_status
[
str
(
code
)][
"status"
]
if
self
.
status
==
-
3
:
message
=
"GAGAL"
else
:
message
=
"PENDING"
txts
=
"text"
in
data
and
data
[
"text"
]
.
split
(
"<br/>"
)
i
=
0
nama
=
""
anggota
=
0
if
len
(
txts
)
==
9
:
nama
=
txts
[
2
]
str_ang
=
txts
[
3
]
.
split
(
":"
)
anggota
=
len
(
str_ang
)
>
1
and
int
(
str_ang
[
1
])
or
0
"""
"data": [{
"nopel": "2091161532456",
"nama": "SUBCRIBER NAME",
"refno": "25641544",
"rincian":{
"pokok": 154200,
"denda": 0,
"admin": 2500,
"jml_bulan": 1,
"cabang": "-",
"bill_rest": 0,
"nm_cabang": "XXX",
"anggota": 3
},
"subtotal": 156700,
"discount": 300,
"total": 156400
}]
<?xml version="1.0"?>
<root>
<status>SUCCESS</status>
<rc>0000</rc>
<rcm>[0] Cek Tagihan Sukses ke:888880000100 refnum:1362F31B7D42455DAE3942E1F0292C02</rcm>
<text>INFORMASI TAGIHAN BPJS KESEHATAN<br/>
ID PEL:888880000100, JML BLN:1, NO HP:<br/>
EKI HENDRAWANBRATA<br/>
JUMLAH PESERTA : 3<br/>
TAG Rp:255.000<br/>
ADM Rp:2.500<br/>
TOTALRp:257.500<br/>
TOTAL SALDO : 0<br/>
TOTAL PREMI : 255.000<br/>
</text>
<refnum>1362F31B7D42455DAE3942E1F0292C02</refnum>
<input1>888880000100</input1>
<jmltagihan>255000</jmltagihan>
<admin>2500</admin>
<totaltag>257500</totaltag>
<info1>0</info1>
<info2>255000</info2>
<infotext/>
</root>
"""
return
{
"code"
:
code
,
"status"
:
message
,
"message"
:
"rcm"
in
data
and
"Transaksi
%
s"
%
message
or
"No Response From Biller"
,
"refno"
:
"refnum"
in
data
and
data
[
"refnum"
]
or
""
,
"nopel"
:
"idpel"
in
data
and
data
[
"idpel"
]
or
self
.
id_pel
,
"nama"
:
nama
,
"rincian"
:{
"pokok"
:
pokok
,
"denda"
:
0
,
"admin"
:
admin
,
"jml_bulan"
:
bulan
,
"cabang"
:
"-"
,
"bill_rest"
:
0
,
"nm_cabang"
:
"XXX"
,
"anggota"
:
anggota
},
"subtotal"
:
subtotal
,
"discount"
:
discount
,
"total"
:
total
,
}
def
save_response
(
self
,
data
,
typ
=
"inquiry"
):
self
.
response
=
data
log
.
info
(
"Response:
%
s"
,
data
)
self
.
save_log
(
typ
)
return
data
def
inquiry
(
self
):
params
=
self
.
get_params
(
cmd
=
'INQ'
,
modul
=
'gp'
)
params
[
"input1"
]
=
self
.
id_pel
params
[
"input2"
]
=
self
.
get_bulan
()
params
[
"biller"
]
=
'0060012'
self
.
request
=
params
self
.
save_log
(
'inquiry'
)
log
.
info
(
"Request:
%
s"
,
params
)
try
:
resp
=
requests
.
get
(
self
.
url
,
params
=
params
)
except
requests
.
exceptions
.
RequestException
as
e
:
data
=
dict
(
message
=
e
.
strerror
,
code
=
e
.
errno
)
return
self
.
save_response
(
data
)
if
resp
and
resp
.
ok
:
data
=
dict
(
xmltodict
.
parse
(
resp
.
text
)[
"root"
])
log
.
info
(
"Response:
%
s"
,
data
)
data
=
self
.
pars_data
(
data
)
elif
resp
:
data
=
dict
(
message
=
resp
.
text
,
code
=
resp
.
status_code
)
else
:
data
=
dict
(
message
=
"No Response From Biller "
,
code
=
500
)
return
self
.
save_response
(
data
)
return
self
.
save_response
(
data
)
def
payment
(
self
):
params
=
self
.
get_params
(
cmd
=
'PAY'
,
modul
=
'gp'
)
params
[
"input1"
]
=
self
.
id_pel
params
[
"input2"
]
=
self
.
get_bulan
()
params
[
"biller"
]
=
'0060012'
self
.
request
=
params
self
.
save_log
(
'payment'
)
try
:
resp
=
requests
.
get
(
self
.
url
,
params
=
params
)
if
resp
.
ok
:
data
=
dict
(
xmltodict
.
parse
(
resp
.
text
)[
"root"
])
else
:
data
=
dict
(
code
=
resp
.
status_code
,
message
=
resp
.
text
)
except
:
data
=
dict
(
code
=
500
,
message
=
"No Response From Biller"
)
self
.
response
=
data
data
=
self
.
pars_data
(
data
)
self
.
save_log
(
'payment'
)
return
data
def
advice
(
self
):
params
=
self
.
get_params
(
cmd
=
'ADV'
,
modul
=
'gp'
)
params
[
"input1"
]
=
self
.
id_pel
params
[
"input2"
]
=
self
.
get_bulan
()
params
[
"biller"
]
=
'0060012'
self
.
request
=
params
self
.
save_log
(
'advice'
)
try
:
resp
=
requests
.
get
(
self
.
url
,
params
=
params
)
if
resp
.
ok
:
data
=
dict
(
xmltodict
.
parse
(
resp
.
text
)[
"root"
])
self
.
response
=
data
else
:
data
=
dict
(
code
=
resp
.
status_code
,
message
=
resp
.
text
)
self
.
response
=
data
except
:
data
=
dict
(
code
=
500
,
message
=
"No Response From Biller"
)
self
.
response
=
data
data
=
self
.
pars_data
(
data
)
self
.
result
=
data
self
.
save_log
(
'advice'
)
return
data
src/agratek/api/merchant/views/vsi/pdam.py
0 → 100644
View file @
31aa39e
from
opensipkd.pasar.models
import
PartnerProduk
import
requests
import
xmltodict
from
.
import
Vendor
as
VendorClass
,
vsi_status
from
opensipkd.base.tools
import
log
class
Vendor
(
VendorClass
):
def
pars_data
(
self
,
data
):
product_id
=
self
.
invoice_det
.
produk
.
id
partner_id
=
self
.
invoice_det
.
h2h_ar_invoice
.
customer_id
bulan
=
"totalperiod"
in
data
and
data
[
"totalperiod"
]
.
split
(
" "
)
bulan
=
bulan
and
bulan
[
0
]
or
1
discount
=
PartnerProduk
.
get_discount
(
partner_id
,
product_id
)
*
bulan
admin
=
self
.
vendor_produk
.
produk
.
harga
*
bulan
harga
=
"transamount"
in
data
and
data
[
"transamount"
]
or
0
admin_chg
=
"admincharge"
in
data
and
data
[
"admincharge"
]
or
0
pokok
=
harga
-
admin_chg
subtotal
=
pokok
+
admin
total
=
subtotal
-
discount
if
"status"
in
data
and
data
[
"status"
]
and
data
[
"status"
]
==
"SUCCESS"
:
self
.
status
=
1
elif
"status"
in
data
and
data
[
"status"
]
and
data
[
"status"
]
==
"ERROR"
:
self
.
status
=
-
1
code
=
"rc"
in
data
and
int
(
data
[
"rc"
])
or
500
if
code
==
0
:
self
.
status
=
1
message
=
"SUCCESS"
else
:
self
.
status
=
vsi_status
[
str
(
code
)][
"status"
]
if
self
.
status
==
-
3
:
message
=
"GAGAL"
else
:
message
=
"PENDING"
meter
=
"startend"
in
data
and
data
[
"startend"
]
or
""
"""
<?xml version="1.0"?>
<root>
<status>SUCCESS</status>
<rc>0000</rc>
<rcm>[0] Cek Tagihan Sukses ke:51110000100 refnum:BE1D2979288141D595C19C2A2A8ADAA4</rcm>
<text>51110000100
Dmmy'Smltor.Name-511
1 BLN
AGU17
RP TAG PDAM RP 270.100
ADM RP 1.600
TOTAL RP 271.700
</text>
<refnum>BE1D2979288141D595C19C2A2A8ADAA4</refnum>
<idpel>51110000100</idpel>
<name>Dmmy'Smltor.Name51110000100</name>
<totalperiod>1 BLN</totalperiod>
<billperiod>AGU17</billperiod>
<admincharge>1600</admincharge>
<transamount>271700</transamount>
</root>
"""
"""
{
"data": [{
"nopel": "636289",
"nama": "SUBCRIBER NAME",
"refno": "25641544",
"rincian":{
"pokok": 68000,
"denda": 0,
"admin": 2500,
"period": "2016-07",
"jml_bulan": 1,
"meter": "140-162"
},
"subtotal": 70500,
"discount": 600,
"total": 69900
}]
"""
return
{
"code"
:
code
,
"status"
:
message
,
"message"
:
"rcm"
in
data
and
"Transaksi
%
s"
%
message
or
"No Response From Biller"
,
"refno"
:
"refnum"
in
data
and
data
[
"refnum"
]
or
""
,
"nopel"
:
"idpel"
in
data
and
data
[
"idpel"
]
or
self
.
id_pel
,
"nama"
:
"name"
in
data
and
data
[
"name"
]
or
"NO-NAME"
,
"rincian"
:{
"pokok"
:
pokok
,
"denda"
:
0
,
"admin"
:
admin
,
"periode"
:
"billperiod"
in
data
and
data
[
"billperiod"
]
or
""
,
"jml_bulan"
:
bulan
,
# "tarif": "tarifdaya" in data and data["tarifdaya"] or "",
# "no_meter": "msn" in data and data["msn"] or "",
# "power": power,
"meter"
:
meter
,
},
"subtotal"
:
subtotal
,
"discount"
:
discount
,
"total"
:
total
,
}
def
save_response
(
self
,
data
,
typ
=
"inquiry"
):
self
.
response
=
data
log
.
info
(
"Response:
%
s"
,
data
)
self
.
save_log
(
typ
)
return
data
def
inquiry
(
self
):
params
=
self
.
get_params
(
cmd
=
'INQ'
,
modul
=
'PDAM'
)
params
[
"idpel"
]
=
self
.
id_pel
params
[
"biller"
]
=
self
.
vendor_produk
.
kode
self
.
request
=
params
self
.
save_log
(
'inquiry'
)
params
[
'trxid'
]
=
self
.
invoice_det
.
id
log
.
info
(
"Request:
%
s"
,
params
)
try
:
resp
=
requests
.
get
(
self
.
url
,
params
=
params
)
except
requests
.
exceptions
.
RequestException
as
e
:
data
=
dict
(
message
=
e
.
strerror
,
code
=
e
.
errno
)
return
self
.
save_response
(
data
)
if
resp
and
resp
.
ok
:
data
=
dict
(
xmltodict
.
parse
(
resp
.
text
)[
"root"
])
log
.
info
(
"Response:
%
s"
,
data
)
data
=
self
.
pars_data
(
data
)
elif
resp
:
data
=
dict
(
message
=
resp
.
text
,
code
=
resp
.
status_code
)
else
:
data
=
dict
(
message
=
"No Response From Biller "
,
code
=
500
)
return
self
.
save_response
(
data
)
return
self
.
save_response
(
data
)
def
payment
(
self
):
params
=
self
.
get_params
(
cmd
=
'PAY'
,
modul
=
'PDAM'
)
params
[
"idpel"
]
=
self
.
id_pel
self
.
request
=
params
self
.
save_log
(
'payment'
)
try
:
resp
=
requests
.
get
(
self
.
url
,
params
=
params
)
if
resp
.
ok
:
data
=
dict
(
xmltodict
.
parse
(
resp
.
text
)[
"root"
])
else
:
data
=
dict
(
code
=
resp
.
status_code
,
message
=
resp
.
text
)
except
:
data
=
dict
(
code
=
500
,
message
=
"No Response From Biller"
)
self
.
response
=
data
data
=
self
.
pars_data
(
data
)
self
.
save_log
(
'payment'
)
return
data
def
advice
(
self
):
params
=
self
.
get_params
(
cmd
=
'ADV'
,
modul
=
'pln'
)
params
[
"idpel"
]
=
self
.
id_pel
self
.
request
=
params
self
.
save_log
(
'advice'
)
try
:
resp
=
requests
.
get
(
self
.
url
,
params
=
params
)
if
resp
.
ok
:
data
=
dict
(
xmltodict
.
parse
(
resp
.
text
)[
"root"
])
self
.
response
=
data
else
:
data
=
dict
(
code
=
resp
.
status_code
,
message
=
resp
.
text
)
self
.
response
=
data
except
:
data
=
dict
(
code
=
500
,
message
=
"No Response From Biller"
)
self
.
response
=
data
data
=
self
.
pars_data
(
data
)
self
.
result
=
data
self
.
save_log
(
'advice'
)
return
data
src/agratek/api/merchant/views/vsi/pln_post.py
0 → 100644
View file @
31aa39e
from
opensipkd.pasar.models
import
PartnerProduk
import
requests
import
xmltodict
from
.
import
Vendor
as
VendorClass
,
vsi_status
from
opensipkd.base.tools
import
log
class
Vendor
(
VendorClass
):
def
pars_data
(
self
,
data
):
"""
<?xml version="1.0"?>
<root>
<status>SUCCESS</status>
<rc>0000</rc>
<rcm>[0] CEK TAGIHAN SUKSES ke:532110000060 refnum:33ECE3543E62474AA0C6C3147D94A31D</rcm>
<text>532110000060
DU'MMY-VSI-532110000
1 BLN
JUN16
RP TAG PLN RP 887.817
ADM RP 1.600
TOTAL RP 890.929
</text>
<refnum>33ECE3543E62474AA0C6C3147D94A31D</refnum>
<idpel>532110000060</idpel>
<nama>DU'MMY-VSI-532110000060</nama>
<bulan>1 BLN</bulan>
<blntagihan>JUN16</blntagihan>
<admin>1600</admin>
<tagihan>889329</tagihan>
<total>890929</total>
</root>
"""
"""
<?xml version="1.0"?>
<root>
<status>SUCCESS</status>
<rc>0000</rc>
<rcm>[0] PEMBAYARAN SUKSES ke:532110000060 refnum:0506213515100D3399B27293E3DBC535</rcm>
<text>22/06/16 14:29
0506213515100D3399B27293E3DBC535
532110000060
3
DU'MMY-VSI-532110000
R1/450
BLN JUN16
RP 887.729
ADM RP 1.600
TOTAL RP 890.929
SUKSES</text>
<date>2016-06-22 14:29:25</date>
<refnum>0506213515100D3399B27293E3DBC535</refnum>
<idpel>532110000060</idpel>
<nama>DU'MMY-VSI-532110000060</nama>
<segmenpower>R1/450</segmenpower>
<startend>888800-889900</startend>
<blntagihan>JUN16</blntagihan>
<ppn>0</ppn>
<denda>0</denda>
<totaltagihanpln>887729</totaltagihanpln>
<admin>1600</admin>
<total>890929</total>
<info1>Informasi Hubungi Call Center: 123 Atau Hub. PLN Terdekat:</info1>
<info2>Terima Kasih</info2>
</root>
"""
power
=
"segmenpower"
in
data
and
data
[
"segmenpower"
]
.
split
(
"/"
)
or
[
""
]
power
=
len
(
power
)
>
1
and
power
[
-
1
:][
0
]
or
power
[
0
]
product_id
=
self
.
invoice_det
.
produk
.
id
partner_id
=
self
.
invoice_det
.
h2h_ar_invoice
.
customer_id
discount
=
PartnerProduk
.
get_discount
(
partner_id
,
product_id
)
admin
=
self
.
vendor_produk
.
produk
.
harga
harga
=
"nominal"
in
data
and
data
[
"nominal"
]
or
0
subtotal
=
harga
+
admin
token
=
"token"
in
data
and
data
[
"token"
]
or
""
if
"status"
in
data
and
data
[
"status"
]
and
data
[
"status"
]
==
"SUCCESS"
:
self
.
status
=
1
elif
"status"
in
data
and
data
[
"status"
]
and
data
[
"status"
]
==
"ERROR"
:
self
.
status
=
-
1
code
=
"rc"
in
data
and
int
(
data
[
"rc"
])
or
500
if
code
==
0
:
self
.
status
=
1
message
=
"SUCCESS"
else
:
self
.
status
=
vsi_status
[
str
(
code
)][
"status"
]
if
self
.
status
==
-
3
:
message
=
"GAGAL"
else
:
message
=
"PENDING"
meter
=
"startend"
in
data
and
data
[
"startend"
]
or
""
"""
{
"data": [{
"nopel": "530678910024",
"nama": "SUBCRIBER NAME",
"refno": "25641544",
"rincian":{
"pokok": 300000,
"denda": 0,
"admin": 2500,
"period": "2016-08",
"jml_bulan": 1,
"tarif": "R1
\
/1300VA",
"no_meter": "530678910012",
"meter": "567-756"
},
"subtotal": 302500,
"discount": 800,
"total": 301700
}]
"""
bulan
=
"bulan"
in
data
and
data
[
"bulan"
]
.
split
(
" "
)
bulan
=
bulan
and
bulan
[
0
]
or
0
return
{
"code"
:
code
,
"status"
:
message
,
"message"
:
"rcm"
in
data
and
"Transaksi
%
s"
%
message
or
"No Response From Biller"
,
"refno"
:
"refnum"
in
data
and
data
[
"refnum"
]
or
""
,
"nopel"
:
"idpel"
in
data
and
data
[
"idpel"
]
or
self
.
id_pel
,
"nama"
:
"nama"
in
data
and
data
[
"nama"
]
or
"NO-NAME"
,
"rincian"
:{
"pokok"
:
"tagihan"
in
data
and
int
(
data
[
"tagihan"
])
or
0
,
"denda"
:
"denda"
in
data
and
int
(
data
[
"denda"
])
or
0
,
"admin"
:
admin
,
"periode"
:
"blntagihan"
in
data
and
data
[
"blntagihan"
]
or
""
,
"jml_bulan"
:
bulan
,
"tarif"
:
"tarifdaya"
in
data
and
data
[
"tarifdaya"
]
or
""
,
"no_meter"
:
"msn"
in
data
and
data
[
"msn"
]
or
""
,
"power"
:
power
,
"meter"
:
meter
,
},
"subtotal"
:
subtotal
,
"discount"
:
discount
,
"total"
:
subtotal
-
discount
,
}
def
save_response
(
self
,
data
,
typ
=
"inquiry"
):
self
.
response
=
data
log
.
info
(
"VSI PLN PRE Response:
%
s"
,
data
)
self
.
save_log
(
typ
)
return
data
def
inquiry
(
self
):
params
=
self
.
get_params
(
cmd
=
'INQ'
,
modul
=
'pln'
)
params
[
"idpel"
]
=
self
.
id_pel
self
.
request
=
params
self
.
save_log
(
'inquiry'
)
params
[
'trxid'
]
=
self
.
invoice_det
.
id
log
.
info
(
"VSI PLN PRE Request:
%
s"
,
params
)
try
:
resp
=
requests
.
get
(
self
.
url
,
params
=
params
)
except
requests
.
exceptions
.
RequestException
as
e
:
data
=
dict
(
message
=
e
.
strerror
,
code
=
e
.
errno
)
return
self
.
save_response
(
data
)
if
resp
and
resp
.
ok
:
data
=
dict
(
xmltodict
.
parse
(
resp
.
text
)[
"root"
])
data
=
self
.
pars_data
(
data
)
elif
resp
:
data
=
dict
(
message
=
resp
.
text
,
code
=
resp
.
status_code
)
else
:
data
=
dict
(
message
=
"No Response From Biller "
,
code
=
500
)
return
self
.
save_response
(
data
)
# if "status" in data and data["status"] and data["status"] == "SUCCESS":
# # data = self.pars_data(data)
# data.update(dict(message="SUCCESS",
# code=0))
#
# elif "status" in data and data["status"] and data["status"] == "ERROR":
# #todo: apakah data akan dimapping errornya?
# data.update(dict(message=data["rcm"],
# code=data["rc"]))
# else:
# data.update(dict(message="Other Error",
# code=500))
return
self
.
save_response
(
data
)
def
payment
(
self
):
params
=
self
.
get_params
(
cmd
=
'PAY'
,
modul
=
'pln'
)
params
[
"idpel"
]
=
self
.
id_pel
# params["nominal"] = self.v_produk_kd
self
.
request
=
params
# todo: apakah harus di cek dulu data inquirynya
self
.
save_log
(
'payment'
)
params
[
'trxid'
]
=
self
.
invoice_det
.
id
try
:
resp
=
requests
.
get
(
self
.
url
,
params
=
params
)
if
resp
.
ok
:
data
=
dict
(
xmltodict
.
parse
(
resp
.
text
)[
"root"
])
else
:
data
=
dict
(
code
=
resp
.
status_code
,
message
=
resp
.
text
)
except
:
data
=
dict
(
code
=
500
,
message
=
"No Response From Biller"
)
self
.
response
=
data
data
=
self
.
pars_data
(
data
)
self
.
save_log
(
'payment'
)
return
data
def
advice
(
self
):
params
=
self
.
get_params
(
cmd
=
'ADV'
,
modul
=
'pln'
)
params
[
"idpel"
]
=
self
.
id_pel
#params["nominal"] = self.v_produk_kd
self
.
request
=
params
# todo: apakah harus di cek dulu data inquirynya
self
.
save_log
(
'advice'
)
try
:
resp
=
requests
.
get
(
self
.
url
,
params
=
params
)
if
resp
.
ok
:
data
=
dict
(
xmltodict
.
parse
(
resp
.
text
)[
"root"
])
self
.
response
=
data
else
:
data
=
dict
(
code
=
resp
.
status_code
,
message
=
resp
.
text
)
self
.
response
=
data
except
:
data
=
dict
(
code
=
500
,
message
=
"No Response From Biller"
)
self
.
response
=
data
data
=
self
.
pars_data
(
data
)
self
.
result
=
data
self
.
save_log
(
'advice'
)
return
data
src/agratek/api/merchant/views/vsi/pln_pre.py
0 → 100644
View file @
31aa39e
from
opensipkd.pasar.models
import
PartnerProduk
import
requests
import
xmltodict
from
.
import
Vendor
as
VendorClass
,
vsi_status
from
opensipkd.base.tools
import
log
class
Vendor
(
VendorClass
):
def
pars_data
(
self
,
data
):
"""
<status>SUCCESS</status>
<rc>0000</rc>
<rcm>[0] CEK TAGIHAN SUKSES ke:88888888888 refnum:D0EE65CAB0C04601878612867541EEA5</rcm>
<text>88888888888
TestDu''mmyP
R2/7000 VA
Token Unsold: 0
Adm 1.600,00
*Denom Belum Termasuk
Admin</text>
<refnum>D0EE65CAB0C04601878612867541EEA5</refnum>
<msn>88888888888</msn>
<idpel>885555555555</idpel>
<nama>TestDu''mmyPanjang8855555</nama>
<tarifdaya>R2/7000</tarifdaya>
<adm>1600</adm>
<jmltokenunsold>0</jmltokenunsold>
"""
"""
<status>SUCCESS</status>
<rc>0000</rc>
<rcm>[0] PEMBAYARAN SUKSES ke:88888888888 refnum:05062135116139A54A95CCC549DDA94C</rcm>
<text>08/06/16 11:50
05062135116139A54A95CCC549DDA94C
TestDu''mmyP
88888888888
881111111111
R2/6600 VA
RP 201.600
KWH352,0
STROOM/TOKEN 2593 0960 8106 1072 1376
ADM 1.600,00</text>
<tanggal>2016-06-08 11:50:22</tanggal>
<nama>TestDu''mmyPanjang8811111</nama>
<msn>88888888888</msn>
<idpel>881111111111</idpel>
<tarifdaya>R2/6600</tarifdaya>
<nominal>201600</nominal>
<jmlkwh>352</jmlkwh>
<token>2593-0960-8106-1072-51376</token>
<ppn>0</ppn>
<ppj>0</ppj>
<adm>1600</adm>
<angsuran>24000</angsuran>
<materai>0</materai>
"""
power
=
"tarifdaya"
in
data
and
data
[
"tarifdaya"
]
.
split
(
"/"
)
or
[
""
]
power
=
len
(
power
)
>
1
and
power
[
-
1
:][
0
]
or
power
[
0
]
product_id
=
self
.
invoice_det
.
produk
.
id
partner_id
=
self
.
invoice_det
.
h2h_ar_invoice
.
customer_id
discount
=
PartnerProduk
.
get_discount
(
partner_id
,
product_id
)
admin
=
self
.
vendor_produk
.
produk
.
harga
harga
=
"nominal"
in
data
and
data
[
"nominal"
]
or
0
subtotal
=
harga
+
admin
token
=
"token"
in
data
and
data
[
"token"
]
or
""
if
"status"
in
data
and
data
[
"status"
]
and
data
[
"status"
]
==
"SUCCESS"
:
self
.
status
=
1
elif
"status"
in
data
and
data
[
"status"
]
and
data
[
"status"
]
==
"ERROR"
:
self
.
status
=
-
1
code
=
"rc"
in
data
and
int
(
data
[
"rc"
])
or
500
if
code
==
0
:
self
.
status
=
1
message
=
"SUCCESS"
else
:
self
.
status
=
vsi_status
[
str
(
code
)][
"status"
]
if
self
.
status
==
-
3
:
message
=
"GAGAL"
else
:
message
=
"PENDING"
return
{
"code"
:
code
,
"status"
:
message
,
"message"
:
"rcm"
in
data
and
"Transaksi
%
s"
%
message
or
"No Response From Biller"
,
"refno"
:
"refnum"
in
data
and
data
[
"refnum"
]
or
""
,
"nopel"
:
"idpel"
in
data
and
data
[
"idpel"
]
or
self
.
id_pel
,
"nama"
:
"nama"
in
data
and
data
[
"nama"
]
or
"NO-NAME"
,
"rincian"
:{
"pokok"
:
"tagihan"
in
data
and
int
(
data
[
"tagihan"
])
or
0
,
"denda"
:
"denda"
in
data
and
int
(
data
[
"denda"
])
or
0
,
"admin"
:
admin
,
"tarif"
:
"tarifdaya"
in
data
and
data
[
"tarifdaya"
]
or
""
,
# "ppn": "ppn" in data and data["ppn"] or 0,
# "ref_no": "refnum" in data and data["refnum"] or "",
"no_meter"
:
"msn"
in
data
and
data
[
"msn"
]
or
""
,
"power"
:
power
,
"token"
:
token
,
},
"subtotal"
:
subtotal
,
"discount"
:
discount
,
"total"
:
subtotal
-
discount
,
}
def
save_response
(
self
,
data
,
typ
=
"inquiry"
):
self
.
response
=
data
log
.
info
(
"VSI PLN PRE Response:
%
s"
,
data
)
self
.
save_log
(
typ
)
return
data
def
inquiry
(
self
):
params
=
self
.
get_params
(
cmd
=
'INQ'
,
modul
=
'PRE'
)
params
[
"msn"
]
=
self
.
id_pel
params
[
"nominal"
]
=
self
.
v_produk_kd
self
.
request
=
params
self
.
save_log
(
'inquiry'
)
params
[
'trxid'
]
=
self
.
invoice_det
.
id
log
.
info
(
"VSI PLN PRE Request:
%
s"
,
params
)
try
:
resp
=
requests
.
get
(
self
.
url
,
params
=
params
)
except
requests
.
exceptions
.
RequestException
as
e
:
data
=
dict
(
message
=
e
.
strerror
,
code
=
e
.
errno
)
return
self
.
save_response
(
data
)
if
resp
and
resp
.
ok
:
data
=
dict
(
xmltodict
.
parse
(
resp
.
text
)[
"root"
])
data
=
self
.
pars_data
(
data
)
elif
resp
:
data
=
dict
(
message
=
resp
.
text
,
code
=
resp
.
status_code
)
else
:
data
=
dict
(
message
=
"No Response From Biller "
,
code
=
500
)
return
self
.
save_response
(
data
)
# if "status" in data and data["status"] and data["status"] == "SUCCESS":
# # data = self.pars_data(data)
# data.update(dict(message="SUCCESS",
# code=0))
#
# elif "status" in data and data["status"] and data["status"] == "ERROR":
# #todo: apakah data akan dimapping errornya?
# data.update(dict(message=data["rcm"],
# code=data["rc"]))
# else:
# data.update(dict(message="Other Error",
# code=500))
return
self
.
save_response
(
data
)
def
payment
(
self
):
params
=
self
.
get_params
(
cmd
=
'PAY'
,
modul
=
'PRE'
)
params
[
"msn"
]
=
self
.
id_pel
params
[
"nominal"
]
=
self
.
v_produk_kd
self
.
request
=
params
# todo: apakah harus di cek dulu data inquirynya
self
.
save_log
(
'payment'
)
params
[
'trxid'
]
=
self
.
invoice_det
.
id
try
:
resp
=
requests
.
get
(
self
.
url
,
params
=
params
)
if
resp
.
ok
:
data
=
dict
(
xmltodict
.
parse
(
resp
.
text
)[
"root"
])
else
:
data
=
dict
(
code
=
resp
.
status_code
,
message
=
resp
.
text
)
except
:
data
=
dict
(
code
=
500
,
message
=
"No Response From Biller"
)
self
.
response
=
data
data
=
self
.
pars_data
(
data
)
self
.
save_log
(
'payment'
)
return
data
def
advice
(
self
):
params
=
self
.
get_params
(
cmd
=
'ADV'
,
modul
=
'PRE'
)
params
[
"msn"
]
=
self
.
id_pel
params
[
"nominal"
]
=
self
.
v_produk_kd
self
.
request
=
params
# todo: apakah harus di cek dulu data inquirynya
self
.
save_log
(
'advice'
)
params
[
'trxid'
]
=
self
.
invoice_det
.
id
try
:
resp
=
requests
.
get
(
self
.
url
,
params
=
params
)
if
resp
.
ok
:
data
=
dict
(
xmltodict
.
parse
(
resp
.
text
)[
"root"
])
self
.
response
=
data
else
:
data
=
dict
(
code
=
resp
.
status_code
,
message
=
resp
.
text
)
self
.
response
=
data
except
:
data
=
dict
(
code
=
500
,
message
=
"No Response From Biller"
)
self
.
response
=
data
data
=
self
.
pars_data
(
data
)
self
.
result
=
data
self
.
save_log
(
'advice'
)
return
data
src/agratek/api/merchant/views/vsi
_
pulsa.py
→
src/agratek/api/merchant/views/vsi
/
pulsa.py
View file @
31aa39e
# 1. Inquiry: protokol untuk melakukan pengecekan data pembelian
"""
VOUCHER
REQ :
cid={CLIENT_ID}
dt={DATE}
hc={HASHCODE}
modul=ISI
command=INQ
tujuan=nomor
voucherid={VOUCHERID}
trxid={TRXID}
resp=XML
Contoh response Sukses:
<?xml version="1.0"?>
<root>
<status>SUCCESS</status>
<rc>0000</rc>
<rcm>0000</rcm>
<text>[0] Cek Tagihan Sukses ke:628523123789</text>
<refnum>Cek pulsa TN5 berhasil dengan nominal 5.000,
refnum 4DB3DC0A2539419F8C50000000000000</refnum>
<voucherid>4DB3DC0A2539419F8C50000000000000</voucherid>
<destnum>TN5</destnum>
<nominal>628523123789</nominal>
</root>
Contoh response Error:
ERROR#0053#[53] ERROR Produk tidak ditemukan
"""
# 2. Auto Payment: protokol untuk melakukan pembayaran/pembelian tanpa harus
# melakukan inquiry terlebih dahulu
from
opensipkd.pasar.models
import
PartnerProduk
from
opensipkd.pasar.models
import
PartnerProduk
"""
REQ :
cid={CLIENT_ID}
dt={DATE}
hc={HASHCODE}
modul=ISI
command=PAY
tujuan=nomor
voucherid={VOUCHERID}
trxid={TRXID}
resp=XML
Contoh request :
cid=btsp6ffacfed-6293-11e6-8325-002590495dna
&dt=20180723
&hc=a85a020f3896298140c99a8509afcfad6272a717cc2aba8f842e68485e0a2642
&modul=ISI
&command=PAY
&tujuan=08572120002
&voucherid=TN25
&trxid=xxx1
&resp=XML
RESP :
Contoh response Sukses:
<?xml version="1.0"?>
<root>
<status>SUCCESS</status>
<rc>0000</rc>
<rcm>0000</rcm>
<text>[0] Pembayaran Sukses ke:08527778889</text>
<date>Isi pulsa TN10 berhasil untuk nomor 628527778889 sebesar 10.000, refnum
F148919BB5F4093A0F40000000000000 pada tgl 17/04/17 15:40</date>
<refnum>2017-04-17 15:40:28</refnum>
<voucherid>47C6DEFB60A34939B18DDBE2FE86D5D3</voucherid>
<destnum>TN10</destnum>
<nominal>628527778889</nominal>
<serial>10000</serial>
</root>
Contoh response Error:
ERROR#0056#[56] Nomor Telpon tidak diketahui
"""
# 3. Advice: protokol untuk melakukan pengecekan transaksi dengan input payment refnum
import
requests
import
requests
import
xmltodict
import
xmltodict
from
.
.tools
import
JsonRpcError
from
agratek.api.merchant
.tools
import
JsonRpcError
from
.vsi
import
Vendor
as
VendorClass
from
agratek.api.merchant.views
.vsi
import
Vendor
as
VendorClass
import
logging
import
logging
log
=
logging
.
getLogger
(
__name__
)
log
=
logging
.
getLogger
(
__name__
)
...
@@ -115,10 +38,10 @@ class Vendor(VendorClass):
...
@@ -115,10 +38,10 @@ class Vendor(VendorClass):
self
.
status
=
-
1
self
.
status
=
-
1
result
=
dict
(
result
=
dict
(
status
=
"status"
in
data
and
data
[
"status"
]
or
"
FAILED
"
,
status
=
"status"
in
data
and
data
[
"status"
]
or
"
PENDING
"
,
code
=
code
,
code
=
code
,
message
=
"rcm"
in
data
\
message
=
"rcm"
in
data
\
and
(
data
[
"rcm"
]
==
"00000"
and
"S
ukses
"
or
data
[
"rcm"
])
\
and
(
data
[
"rcm"
]
==
"00000"
and
"S
UCCESS
"
or
data
[
"rcm"
])
\
or
"PENDING"
,
or
"PENDING"
,
serial_number
=
"serialnumber"
in
data
and
data
[
"serialnumber"
]
or
""
,
serial_number
=
"serialnumber"
in
data
and
data
[
"serialnumber"
]
or
""
,
subtotal
=
int
(
harga
),
subtotal
=
int
(
harga
),
...
@@ -133,7 +56,7 @@ class Vendor(VendorClass):
...
@@ -133,7 +56,7 @@ class Vendor(VendorClass):
params
[
"voucherid"
]
=
self
.
vendor_produk
.
kode
params
[
"voucherid"
]
=
self
.
vendor_produk
.
kode
self
.
request
=
params
self
.
request
=
params
self
.
save_log
(
'inquiry'
)
self
.
save_log
(
'inquiry'
)
log
.
info
(
"
VSI PULSA
Request:
%
s
%
s"
%
(
self
.
url
,
self
.
request
))
log
.
info
(
"Request:
%
s
%
s"
%
(
self
.
url
,
self
.
request
))
try
:
try
:
result
=
requests
.
get
(
self
.
url
,
params
=
params
)
result
=
requests
.
get
(
self
.
url
,
params
=
params
)
if
result
.
ok
:
if
result
.
ok
:
...
...
src/agratek/api/merchant/views/vsi/vsi_pln_post.py
deleted
100644 → 0
View file @
de8ace7
import
base64
import
hashlib
import
json
from
datetime
import
datetime
import
requests
import
xmltodict
from
opensipkd.base
import
get_settings
from
opensipkd.pasar.models
import
Partner
,
PartnerProduk
,
Produk
from
pyramid_rpc.jsonrpc
import
JsonRpcError
from
.
import
Vendor
as
VendorClass
class
Vendor
(
VendorClass
):
def
pars_data
(
self
,
data
):
return
{
"bill_no"
:
"subid"
in
data
and
data
[
"subid"
]
or
self
.
bill_no
,
"nama"
:
"nama"
in
data
and
data
[
"nama"
]
or
"NO-NAME"
,
"pokok"
:
"tagihan"
in
data
and
data
[
"tagihan"
]
or
0
,
"denda"
:
"denda"
in
data
and
data
[
"denda"
]
or
0
,
"admin"
:
"admin"
in
data
and
data
[
"admin"
]
or
0
,
"total"
:
"total"
in
data
and
data
[
"total"
]
or
0
,
"ppn"
:
"ppn"
in
data
and
data
[
"ppn"
]
or
0
,
"trx_id"
:
"trxid"
in
data
and
data
[
"trxid"
]
or
self
.
partner_log_id
,
"ref_no"
:
"refnum"
in
data
and
data
[
"refnum"
]
or
""
,
"jml_bulan"
:
"bulan"
in
data
and
data
[
"bulan"
]
or
""
,
"tgh_bulan"
:
"blth"
in
data
and
data
[
"blth"
]
or
""
,
"tarif"
:
"tarif"
in
data
and
data
[
"tarif"
]
or
""
,
"tgl_bayar"
:
"date"
in
data
and
data
[
"date"
]
or
""
,
"info"
:
"info1"
in
data
and
data
[
"info1"
]
or
""
,
"stand_meter"
:
"standmeter"
in
data
and
data
[
"standmeter"
]
or
""
,
}
def
inquiry
(
self
):
"""
:return:
:parameter url tobe submitted
cid = {CLIENTID}
dt = {DATE}
hc = {HASHCODE}
modul = pln
command = INQ
idpel = {IDPELANGGAN}
resp = XML
trxid = {IDTRANSAKSI}
:sukses response
<?xml version="1.0"?>
<root>
<status>SUCCESS</status>
<rc>0000</rc>
<rcm>
[0] CEK TAGIHAN SUKSES ke:532110000060 refnum:33ECE3543E62474AA0C6C3147D94A31D
</rcm>
<text>532110000060
DU'MMY-VSI-532110000
1 BLN
JUN16
RP TAG PLN RP 887.817
ADM RP 1.600
TOTAL RP 890.929
</text>
<refnum>33ECE3543E62474AA0C6C3147D94A31D</refnum>
<idpel>532110000060</idpel>
<nama>DU'MMY-VSI-532110000060</nama>
<bulan>1 BLN</bulan>
<blntagihan>JUN16</blntagihan>
<admin>1600</admin>
<tagihan>889329</tagihan>
<total>890929</total>
</root>
:error response
<?xml version = "1.0"?>
<root>
<status>ERROR</status>
<rc>0014</rc>
<rcm>
[14] IDPEL YANG ANDA MASUKKAN SALAH, MOHON TELITI KEMBALI.
</rcm>
< / root >
: notes
1. cid = identitas mitra, akan diinfokan ke mitra pada saat test
maupun production.
2. dt = tanggal jam transaksi (YYYYMMDD).
3. hc = SHA256(cid+dt+secret key) , secret key dan cid akan
diinfokan ke mitra pada saat test maupun production.
4. Semua info/nilai yang diapit oleh {…} wajib diganti dengan
nilai yang seharusnya (tanpa mengandung {}).
5. trxid merupakan unique id dari mitra per transaksi dengan
panjang maksimum 50 character.
6. resp merupakan format respon yang diinginkan (XML), secara
default jika dikosongkan maka responnya merupakan format plaintext.
"""
params
=
self
.
get_params
(
cmd
=
'INQ'
,
modul
=
'pln'
)
params
[
"idpel"
]
=
self
.
bill_no
# params["voucherid"] = self.v_produk_kd
self
.
request
=
params
self
.
save_log
(
'inquiry'
)
params
[
'trxid'
]
=
self
.
partner_log_id
result
=
requests
.
get
(
self
.
url
,
params
=
params
)
if
result
.
ok
:
data
=
xmltodict
.
parse
(
result
.
text
)[
"root"
]
else
:
data
=
dict
(
error
=
result
.
text
,
code
=
result
.
status_code
)
self
.
response
=
data
self
.
save_log
(
'inquiry'
)
if
"status"
in
data
and
data
[
"status"
]
and
data
[
"status"
]
==
"SUCCESS"
:
data
=
self
.
pars_data
(
data
)
elif
"status"
in
data
and
data
[
"status"
]
and
data
[
"status"
]
==
"ERROR"
:
#todo: apakah data akan dimapping errornya?
data
=
dict
(
error
=
data
[
"rcm"
],
code
=
data
[
"rc"
])
return
data
def
payment
(
self
):
"""
:parameter
cid = {CLIENTID}
dt = {DATE}
hc = {HASHCODE}
modul = pln
command = PAY
idpel = {IDPELANGGAN}
resp = XML
trxid = {IDTRANSAKSI}
:response sukses
<?xml version="1.0"?>
<root>
<status>SUCCESS</status>
<rc>0000</rc>
<rcm>[0] PEMBAYARAN SUKSES ke:532110000060 refnum:0506213515100D3399B27293E3DBC535</rcm>
<text>22/06/16 14:29
0506213515100D3399B27293E3DBC535
532110000060
DU'MMY-VSI-532110000
R1/450
BLN JUN16
RP 887.729
ADM RP 1.600
TOTAL RP 890.929
SUKSES
</text>
<date>2016-06-22 14:29:25</date>
<refnum>0506213515100D3399B27293E3DBC535</refnum>
<idpel>532110000060</idpel>
<nama>DU'MMY-VSI-532110000060</nama>
<segmenpower>R1/450</segmenpower>
<startend>888800-889900</startend>
<blntagihan>JUN16</blntagihan>
<ppn>0</ppn>
<denda>0</denda>
<totaltagihanpln>887729</totaltagihanpln>
<admin>1600</admin>
<total>890929</total>
<info1>Informasi Hubungi Call Center: 123 Atau Hub. PLN Terdekat:</info1>
<info2>Terima Kasih</info2>
</root>
:response error
<?xml version="1.0"?>
<root>
<status>ERROR</status>
<rc>0088</rc>
<rcm>[88] TAGIHAN SUDAH TERBAYAR</rcm>
</root>
"""
params
=
self
.
get_params
(
cmd
=
'PAY'
,
modul
=
'pln'
)
params
[
"idpel"
]
=
self
.
bill_no
# params["voucherid"] = self.v_produk_kd
self
.
request
=
params
# todo: apakah harus di cek dulu data inquirynya
self
.
save_log
(
'payment'
)
params
[
'trxid'
]
=
self
.
partner_log_id
result
=
requests
.
get
(
self
.
url
,
params
=
params
)
if
result
.
ok
:
data
=
xmltodict
.
parse
(
result
.
text
)[
"root"
]
else
:
data
=
dict
(
error
=
result
.
status_code
)
self
.
response
=
data
self
.
save_log
(
'payment'
)
if
"status"
in
data
and
data
[
"status"
]
and
data
[
"status"
]
==
"SUCCESS"
:
data
=
self
.
pars_data
(
data
)
elif
"status"
in
data
and
data
[
"status"
]
and
data
[
"status"
]
==
"ERROR"
:
#todo: apakah data akan dimapping errornya?
data
=
dict
(
error
=
data
[
"rcm"
],
code
=
data
[
"rc"
])
return
data
src/agratek/api/merchant/views/vsi/vsi_pln_pre.py
deleted
100644 → 0
View file @
de8ace7
This diff is collapsed.
Click to expand it.
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