vsi_pulsa.py
9.45 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
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
# 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
"""
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
"""
REQ :
cid={CLIENT_ID}
dt={DATE}
hc={HASHCODE}
modul=ISI
command=ADV
tujuan=nomor
voucherid={VOUCHERID}
trxid={TRXID}
resp=XML
Contoh request :
cid=btsp6ffacfed-6293-11e6-8325-002590495dna
dt=20180723
hc=a85a020f3896298140c99a8509afcfad6272a717cc2aba8f842e68485e0a2642
modul=ISI
command=ADV
tujuan=08572120002
voucherid=TN25
trxid=xxx1
resp=XML
RESP :
STATUS#RC#RCMESSAGE ke: TUJUAN #RESPTEXT#DT#REFNUM#VOUCHERID#NOMINAL#SERIALNUMBER
Contoh Response Sukses:
<?xml version="1.0"?>
<root>
<status>SUCCESS</status>
<rc>0000</rc>
<rcm>0000</rcm>
<text>[0] Pembayaran Sukses</text>
<date>Isi pulsa TN10 berhasil untuk nomor 628527778889 sebesar 10.000, refnum
F148919BB5F4093A0F40000000000000 pada tgl 17/04/17 15:32</date>
<refnum>2017-04-17 15:40:28</refnum>
<voucherid>4A61D574138A2D6B4B6 </voucherid>
<destnum>TN10</destnum>
<nominal>10000</nominal>
<serial>4A61D574138A2D6B4B6 </serial>
</root>
Contoh response Error:
ERROR#0051# [51] ERROR Transaksi Gagal dari Mesin Vending
"""
# 4. Info : protokol untuk melakukan pengecekan informasi produk dan harga
"""
REQ :
cid={CLIENT_ID}
dt={DATE}
hc={HASHCODE}
resp={XML}
command=INFO
voucherid={VOUCHERID1,VOUCHERID2}
tujuan={NO TUJUAN}
Contoh request :
cid=87ba9xzc-c7ex-8793-c7e5-0225901955v7
dt=20160405
hc=057db24273f1bf2ffabad292504c2071cd01dd26c1715aec6f261a43bc1b38cb
resp=xml
command=info
voucherid=TN10
tujuan=08527778889
RESP :
STATUS#RC#RESPTEXT
Contoh Response Sukses:
<?xml version="1.0"?>
<root>
<status>SUCCESS</status>
<rc>0000</rc>
<rcm>0000</rcm>
<text>INFO HARGA:
TN10(TELKOMSEL AS/SIMPATI 10):Rp. 11.325
*Belum termasuk margin agen</text>
</root>
Contoh response Error:
ERROR#0053#[53] ERROR Produk tidak ditemukan
"""
# 5. Respon Sukses Diantrikan : Menunggu Respon Biller.
"""
XML :
<?xml version="1.0"?>
<root>
<status>SUCCESS</status>
<rc>0000</rc>
<rcm>[1000] PEMBAYARAN SUKSES DIANTRIKAN ke:085934111000</rcm>
<text>
Isi pulsa TN25 berhasil untuk nomor 6285934111000 sebesar 25.000, refnum
3D5C50E06B5ED9AAB7B0000000000000 pada tgl 18/09/18 15:07</text>
<date>2018-09-18 15:07:33</date>
<refnum>DACC5EAC69EC4049AD4129C20E294C06</refnum>
<voucherid>TN25</voucherid>
<destnum>6285934111000</destnum>
<nominal>25000</nominal>
<serial></serial>
</root>
"""
# 6. Callback :
"""
http://mitra.url/callback?user_id=DEF56C3E6E3B4B6EBF88015AC25D3BFE&trxid=2134&status=S&dt=201
8-09-24%2010%3A22%3A23&info=ID%3A%202134%20TN5%20ke%206285334111000%20SUKSES%20SN%3A%20123423123%2
0%402018-09-24%2010%3A22%3A23;
http://mitra.url/callback?
user_id=DEF56C3E6E3B4B6EBF88015AC25D3BFE
trxid=2134
status=S
dt=2018-09-24 10:22:23
info=ID: 2134 TN5 ke 6285334111000 SUKSES SN: 123423123 @2018-09-24 10:22:23;
user_id : client ID
trxid : transaction ID
status : S = sukses, R= Refund (gagal)
dt : tanggal format YYYY-mm-dd hh:ii:ss contoh diatas 2018-09-24 10:22:23
info: informasi, ID: 2134 TN5 ke 6285334111000 SUKSES SN: 123423123 @2018-09-24 10:22:23
"""
# Keterangan:
"""
1. cid = identitas mitra, akan diinfokan ke mitra pada saat test maupun produkion
2. dt = tanggal transaksi (YYYYMMDD)
3. hc = SHA256(cid+dt+secret key) , secret key dan cid akan diinfokan ke mitra pada saat test maupun produkion
4. STATUS berisi status response SUCCESS atau ERROR
5. RCMESSAGE adalah Pesan Transaksi
6. RESPTEXT dan data lainnya akan ada jika STATUS=SUCCESS
7. \n di RESPTEXT adalah garis baru
8. Semua info/nilai yang diapit oleh {…}wajib diganti dengan nilai yang seharusnya (tanpa mengandung {}).
9. trxid merupakan unique id dari mitra per transaksi dengan panjang maksimum 50 character
"""
# Pesan Transaksi :
"""
Pembayaran Sukses
[4] ERROR Biller Tidak terdaftar
[5] ERROR Lainnya
[6] ERROR Sentral diblok
[7] ERROR PPID diblok
[8] ERROR Waktu akses tidak valid
[9] ERROR Akun tidak aktif
[11] ERROR NEED TO SIGN ON
[12] ERROR Tidak bisa dibatalkan
[13] ERROR Nilai Transaksi tidak valid
[14] ERROR ID Tidak Terdaftar
[15] ERROR No Meter Tidak Terdaftar
[16] ERROR PRR SUBSCRIBER
[17] ERROR ID Punya Tunggakan
[18] ERROR Permintaan Sedang diproses
[26] Quota Transaksi Agen Tidak Mencukupi. Silahkan Kontak Agen.
[29] ERROR Kode Hash tidak valid
[30] ERROR Pesan tidak valid
[31] ERROR Kode Bank tidak terdaftar
[32] ERROR Sentral tidak terdaftar
[33] ERROR Produk tidak terdaftar
[34] ERROR PPID Tidak terdaftar
[35] ERROR Akun Tidak Terdaftar
[41] ERROR Nilai Transaksi dibawah Nilai Minimum
[42] ERROR Nilai Transaksi diatas Nilai Maximum
[43] ERROR Daya Baru Lebih Kecil dari Daya Sekarang
[44] ERROR Nilai Daya Tidak Valid
[45] ERROR Nilai Biaya Administrasi Tidak Valid
[46] ERROR Deposit Tidak Mencukupi
[47] ERROR Diluar Batas KWH
[48] ERROR Permintaan sudah kadaluarsa
[51] ERROR Transaksi Gagal dari Mesin Vending
[52] ERROR Transaksi dipending dari Mesin Vending
[53] ERROR Produk tidak ditemukan
[54] ERROR Jawaban dari Biller Tidak ditemukan
[55] ERROR Lainnya Mesin Vending
[56] ERROR Nomor Telpon Tidak diketahui
[63] ERROR Tidak ada Pembayaran
[60] ERROR Akun sudah didaftarkan
[67] ERROR CANNOT CONNECT
[68] ERROR Timeout
[69] ERROR Sertifikat tidak dikenal
[70] ERROR Timeout tidak refund
[72] ERROR Permintaan tidak mungkin dilayani
[73] ERROR Request dipending di Biller
[77] ERROR Id di suspend
[88] ERROR Tagihan sudah dibayar
[89] ERROR Tagihan tidak tersedia
[90] ERROR sedang proses CUT OFF
[91] ERROR Database
[92] ERROR Nomor Referensi Switching tidak ditemukan
[93] ERROR Nomor Referensi Switching tidak valid
[94] ERROR Pembatalan sudah dilakukan
[95] ERROR Kode Merchant tidak terdaftar
[96] ERROR Transaksi tidak ditemukan
[97] ERROR SW BANK Tidak identik
[98] ERROR Nomor Referensi Switching tidak valid
[146] ERROR di servis deposit"""
import requests
import xmltodict
from .vsi import Vendor as VendorClass
# todo: result harus distandarisasi
class Vendor(VendorClass):
def inquiry(self):
params = self.get_params(cmd='INQ', modul='ISI')
params["tujuan"] = self.cid
params["voucherid"] = self.produk_kd
result = requests.get(self.url, params=params)
if result.ok:
data = xmltodict.parse(result.text)["root"]
else:
data = dict(error=result.status_code)
self.save_log('inquiry')
return data
def payment(self):
params = self.get_params(cmd='PAY', modul='ISI')
self.request = params
result = requests.get(self.url, params=params)
if result.ok:
data = xmltodict.parse(result.text)["root"]
self.response = data
else:
data = dict(error=result.status_code)
self.save_log('payment')
return data
def advice(self):
params = self.get_params(cmd='ADV', modul='ISI')
self.request = params
result = requests.get(self.url, params=params)
if result.ok:
data = xmltodict.parse(result.text)["root"]
self.response = data
else:
data = dict(error=result.status_code)
self.save_log('advice')
return data
def info(self):
params = self.get_params(cmd='info', modul='ISI')
self.request = params
result = requests.get(self.url, params=params)
if result.ok:
data = xmltodict.parse(result.text)["root"]
self.response = data
else:
data = dict(error=result.status_code)
self.save_log('info')
return data