Commit e02d3541 by Solo Group

va

1 parent 1685e45b
......@@ -2,6 +2,8 @@ kode,path,nama,status,type
api-merchant-home,/api/merchant/home,Api Merchant Home,1,0
api-merchant,/api/merchant,Api Merchant,1,1
api-merchant-register,/api/merchant/register,Api Merchant Payment,1,0
api-merchant-register-callback,/api/merchant/register/callback,Api Merchant Payment Callback,1,0
api-merchant-payment,/api/merchant/payment,Api Merchant Payment,1,0
api-vendor-notify,/api/vendor/{name}/notify,Api Vendor Notify,1,0
api-vendor-callback,/api/vendor/{name}/callback,Api Vendor Callback,1,0
......
from opensipkd.base.tools.api import *
from opensipkd.base.tools.buttons import *
from opensipkd.base.tools import *
from pyramid.compat import string_types
from pyramid.encode import url_quote, urlencode
from pyramid.url import QUERY_SAFE
def get_qs(_query):
if isinstance(_query, string_types):
qs = '?' + url_quote(_query, QUERY_SAFE)
else:
qs = '?' + urlencode(_query, doseq=True)
return qs
\ No newline at end of file
......@@ -13,7 +13,7 @@ from pyramid.view import view_config
from ..tools import get_settings, get_jsonrpc
log = logging.Logger(__name__)
log = logging.getLogger(__name__)
def update_harga(p, k, v):
......@@ -73,6 +73,7 @@ def purchase_notify(order):
except:
pass
def payment_notify(order):
customer = order.customer
if customer and customer.website:
......@@ -93,7 +94,7 @@ def payment_notify(order):
requests.post(url, data=js, timeout=20)
except:
pass
return
def proses_np(data):
# todo:
......@@ -104,7 +105,6 @@ def proses_np(data):
def api_vendor_notify(request):
vendor_nm = request.matchdict['name']
data = json.loads(request.text)
modul = '.notify'
pckgs = 'agratek.api.merchant.views.{}'.format(vendor_nm)
moduls = import_module(modul, pckgs)
......@@ -114,18 +114,6 @@ def api_vendor_notify(request):
order = cls(data)
@view_config(route_name='api-vendor-callback')
def api_vendor_callback(request):
vendor_nm = request.matchdict['name']
modul = '.callback'
pckgs = 'agratek.api.merchant.views.{}'.format(vendor_nm)
moduls = import_module(modul, pckgs)
typ = 'callback'
cls = hasattr(moduls, typ) and getattr(moduls, typ) or None
if cls:
cb = cls(request)
return HTTPFound(cb)
@view_config(route_name='api-vendor-test', renderer="string")
def vendor_test(request):
params = request.params
......
from _sha256 import sha256
import logging
from agratek.api.merchant.views.notify_vendor import purchase_notify, update_harga
from opensipkd.base import get_settings
from opensipkd.base.models import Partner, flush_row
from opensipkd.pasar.models import H2hArInvoiceDet
from opensipkd.pasar.models.produk import PartnerPay
from opensipkd.pasar.models.produk import PartnerPay, PartnerProduk
log = logging.getLogger(__name__)
from . import Vendor
def callback(request):
data = dict(request.POST.items())
tx_id = data["tXid"]
if tx_id:
row = PartnerPay.query_txid(tx_id).first()
return row.callback_url
def proses(data):
code = "resultCd" in data and data["resultCd"] and int(data["resultCd"]) or 0
message = "resultMsg" in data and data["resultMsg"] or ""
if code!=0:
return dict(form="Error in NV CALLBACK {}, {}".format(code, message), code=code, message=message)
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()
if not invoice_det:
return
vendor_produk = PartnerProduk.query()\
.filter_by(partner_id=invoice_det.vendor_id,
produk_id=invoice_det.produk_id).first()
vendor = Vendor(vendor_produk, invoice_det)
result = vendor.callback(data)
print("callback.py", result)
return result
from _sha256 import sha256
import logging
from agratek.api.merchant.views.notify_vendor import purchase_notify, update_harga, payment_notify
from opensipkd.base import get_settings
from opensipkd.base.models import Partner, flush_row
from opensipkd.pasar.models import H2hArInvoiceDet
from opensipkd.pasar.models.produk import PartnerPay
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):
settings = get_settings()
mid = 'np_mid' in settings and settings["np_mid"] or None
key = 'np_key' in settings and settings["np_key"] or None
partner = Partner.query_kode("NP").first()
status = str(data["status"])
amount = data["amt"]
tx_id = data["tXid"]
merchant_token = data["merchantToken"]
ref_no = data["referenceNo"]
signature = sha256("{mid}{tx_id}{amount}{key}"\
.format(mid=mid, key=key, amount=str(amount),
tx_id=tx_id))
if merchant_token!=signature:
return
pay = PartnerPay.query_txid(tx_id).filter(cust_inv_no=ref_no).first()
if not pay:
return
result=dict()
pay.notify= dict(response=data,
result=result)
pay.status = 1
flush_row(pay)
payment_notify(pay)
return pay
"""
Common Parameter for Notification
Parameter Type Size Description
tXid N 30 Transaction ID
merchantToken AN 255 Merchant Token
referenceNo N 40 Merchant Order No
payMethod N 2 Payment method. Refer Code at Here
amt N 12 Payment amount
transDt N 8 Transaction date
transTm N 6 Transaction time
currency N 3 Currency
goodsNm N 100 Goods name
billingNm N 30 Billing name
matchCl N 1 Payment amount match flag. Refer Code at Here
status AN 1 Deposit Status
0: Deposit
1: Reversal
Additional Parameter for Credit Card Notification
Parameter Type Size Description
authNo N 10 Approval number
IssueBankCd A 4 Issue bank code. Refer Code at Here
IssueBankNm A Issue bank name.
acquBankCd A Acquire bank code. Refer Code at Here
acquBankNm A Acquire bank name.
cardNo AN 20 Card no with masking
cardExpYymm N Card expiry (YYMM)
instmntMon N 2 Installment month
instmntType N 2 Installment Type. Refer Code at Here
preauthToken AN 255 Preauth Token
recurringToken AN 255 Recurring token
ccTransType AN 2 Credit card transaction type
1: Normal
2: Recurring
3: Pre-auth
4: Captured
vat N 12 Vat number
fee N 12 service fee
notaxAmt N 12 tax free amount
Additional Parameter for Virtual Account Notification
Parameter Type Size Description
bankCd N 4 Bank Code. Refer Code at Here
vacctNo N 16 Bank Virtual Account number
vacctValidDt N 8 VA expiry date
vacctValidTm N 6 VA expiry time
depositDt N Deposit date
depositTm N Deposit time
Additional Parameter for Others Payment Method Notification
vend_inv_no = data["tXid"]
cus_inv_no = data["referenceNo"]
invoice_det = PartnerPay.query_vend_inv_no(vend_inv_no)\
.filter(cust_inv_no=cus_inv_no)
vendor_produk = PartnerProduk.query()\
.filter_by(partner_id=invoice_det.vendor_id,
produk_id=invoice_det.produk_id)
vendor = Vendor(vendor_produk, invoice_det)
vendor.notify(data)
return payment_notify(invoice_det)
Parameter Type Size Description
mitraCd A 4 Mitra Code. Refer Code at Here
payNo N 12 Pay number to mitra
payValidDt N 8 CVS expiry date
payValidTm N 6 CVS expiry time
receiptCode ANS 20 Authorization number
mRefNo AN 18 Bank reference No
depositDt N Deposit date
depositTm N Deposit time
"""
......@@ -70,7 +70,7 @@ def form_validator(form, value):
def get_form(request, class_form, buttons=None, row=None):
schema = class_form(validator=form_validator)
schema = schema.bind(produk=Produk.get_e_list(),
schema = schema.bind(produk=Produk.get_list(),
vendor=Partner.get_vendor_list(),
departemen=Departemen.get_list())
schema.request = request
......
<html metal:use-macro="load: base-no-menu.pt">
<html metal:use-macro="load: opensipkd.base:views/templates/base3-clean.pt">
<div metal:fill-slot="scripts">
${structure:form}
</div>
</html>
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!