Commit a034054b by Owo Sugiana

create_data() untuk digunakan paket lain

1 parent dee2b132
import sys import sys
import json import json
import logging.config
from datetime import datetime from datetime import datetime
from argparse import ArgumentParser from argparse import ArgumentParser
from base64 import b64encode from base64 import b64encode
...@@ -62,6 +63,29 @@ def signature(argv=sys.argv[1:]): ...@@ -62,6 +63,29 @@ def signature(argv=sys.argv[1:]):
print(sign_b64) 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:]): def create_va(argv=sys.argv[1:]):
url = 'https://sandbox-api.bmstaging.id/snap/v1.0/transfer-va/create-va' url = 'https://sandbox-api.bmstaging.id/snap/v1.0/transfer-va/create-va'
help_url = f'default {url}' help_url = f'default {url}'
...@@ -94,6 +118,7 @@ def create_va(argv=sys.argv[1:]): ...@@ -94,6 +118,7 @@ def create_va(argv=sys.argv[1:]):
else: else:
trx_id = datetime.now().strftime('%H%M%S') trx_id = datetime.now().strftime('%H%M%S')
setup_logging()
try: try:
r = create( r = create(
option.url, private_key, option.partner_id, option.customer_no, option.url, private_key, option.partner_id, option.customer_no,
......
...@@ -9,14 +9,24 @@ def time_to_str(t: 'datetime with time zone'): ...@@ -9,14 +9,24 @@ def time_to_str(t: 'datetime with time zone'):
return s[:-2] + ':' + s[-2:] return s[:-2] + ':' + s[-2:]
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_data = [http_method, end_point_url, body_hash, timestamp_str]
sign_data = ':'.join(sign_data)
return sign_data.encode('utf-8')
def generator( def generator(
private_key: bytes, data: dict, timestamp: 'datetime with time zone', private_key: bytes, data: dict, timestamp: 'datetime with time zone',
http_method='POST', http_method='POST',
end_point_url='/v1.0/transfer-va/create-va') -> bytes: end_point_url='/v1.0/transfer-va/create-va') -> bytes:
body = json.dumps(data, separators=(',', ':')) sign_data = create_data(data, timestamp, http_method, end_point_url)
body_byte = body.encode('utf-8') return sign_without_salt(private_key, sign_data)
body_hash = hashlib.sha256(body_byte).hexdigest().lower()
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'))
...@@ -31,7 +31,8 @@ def create( ...@@ -31,7 +31,8 @@ def create(
expiredDate=expired_str, expiredDate=expired_str,
additionalInfo=dict(channel=channel)) additionalInfo=dict(channel=channel))
signature = generator(private_key, data, timestamp) 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 = { headers = {
'X-TIMESTAMP': timestamp_str, 'X-TIMESTAMP': timestamp_str,
'X-SIGNATURE': signature_b64, '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!