Commit 7693e9b1 by yasir

tambah vendor omnipay, testing notify

1 parent 739ad77b
...@@ -69,6 +69,7 @@ def build_payment(vendor_produk, partner_pay=None, **kwargs): ...@@ -69,6 +69,7 @@ def build_payment(vendor_produk, partner_pay=None, **kwargs):
def set_register_values(dat, customer): def set_register_values(dat, customer):
billing = dat["customer"] billing = dat["customer"]
deliver_to = dat["deliver_to"] deliver_to = dat["deliver_to"]
biller = dat["biller"]
server = dat["server"] server = dat["server"]
produk = 'produk' in dat and dat["produk"] or '' produk = 'produk' in dat and dat["produk"] or ''
values = dict( values = dict(
...@@ -103,6 +104,15 @@ def set_register_values(dat, customer): ...@@ -103,6 +104,15 @@ def set_register_values(dat, customer):
delivery_state=deliver_to['state'], delivery_state=deliver_to['state'],
# delivery_email=deliver_to['email'], # 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'], fee=dat['fee'],
vat=dat['vat'], vat=dat['vat'],
req_dt=dat['req_dt'], req_dt=dat['req_dt'],
......
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
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 \ No newline at end of file
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!