Commit a034054b by Owo Sugiana

create_data() untuk digunakan paket lain

1 parent dee2b132
import sys
import json
import logging.config
from datetime import datetime
from argparse import ArgumentParser
from base64 import b64encode
......@@ -62,6 +63,29 @@ def signature(argv=sys.argv[1:]):
print(sign_b64)
def setup_logging():
logging.config.dictConfig({
'version': 1,
'formatters': {
'generic': {
'format': '%(asctime)s %(levelname)s %(name)s %(message)s',
},
},
'handlers': {
'console': {
'class': 'logging.StreamHandler',
'stream': 'ext://sys.stdout',
'formatter': 'generic'},
},
'loggers': {
'': {
'handlers': ['console'],
'level': 'DEBUG',
},
},
})
def create_va(argv=sys.argv[1:]):
url = 'https://sandbox-api.bmstaging.id/snap/v1.0/transfer-va/create-va'
help_url = f'default {url}'
......@@ -94,6 +118,7 @@ def create_va(argv=sys.argv[1:]):
else:
trx_id = datetime.now().strftime('%H%M%S')
setup_logging()
try:
r = create(
option.url, private_key, option.partner_id, option.customer_no,
......
......@@ -9,14 +9,24 @@ def time_to_str(t: 'datetime with time zone'):
return s[:-2] + ':' + s[-2:]
def generator(
private_key: bytes, data: dict, timestamp: 'datetime with time zone',
http_method='POST',
end_point_url='/v1.0/transfer-va/create-va') -> bytes:
def create_data(
data: dict, timestamp: 'datetime with time zone',
http_method='POST', end_point_url='/v1.0/transfer-va/create-va'):
body = json.dumps(data, separators=(',', ':'))
body_byte = body.encode('utf-8')
body_hash = hashlib.sha256(body_byte).hexdigest().lower()
if isinstance(timestamp, str):
timestamp_str = timestamp
else:
timestamp_str = time_to_str(timestamp)
sign_list = [http_method, end_point_url, body_hash, timestamp_str]
sign_str = ':'.join(sign_list)
return sign_without_salt(private_key, sign_str.encode('utf-8'))
sign_data = [http_method, end_point_url, body_hash, timestamp_str]
sign_data = ':'.join(sign_data)
return sign_data.encode('utf-8')
def generator(
private_key: bytes, data: dict, timestamp: 'datetime with time zone',
http_method='POST',
end_point_url='/v1.0/transfer-va/create-va') -> bytes:
sign_data = create_data(data, timestamp, http_method, end_point_url)
return sign_without_salt(private_key, sign_data)
......@@ -31,7 +31,8 @@ def create(
expiredDate=expired_str,
additionalInfo=dict(channel=channel))
signature = generator(private_key, data, timestamp)
signature_b64 = b64encode(signature).decode('utf-8')
signature_b64 = b64encode(signature)
signature_b64 = signature_b64.decode('utf-8')
headers = {
'X-TIMESTAMP': timestamp_str,
'X-SIGNATURE': signature_b64,
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!