Skip to content

Instantly share code, notes, and snippets.

@hongdonghyun
Last active April 11, 2020 10:16
Show Gist options
  • Select an option

  • Save hongdonghyun/a2cfd97e4d1426d21040adc9a68b1b4d to your computer and use it in GitHub Desktop.

Select an option

Save hongdonghyun/a2cfd97e4d1426d21040adc9a68b1b4d to your computer and use it in GitHub Desktop.
eximbay
class Eximbay():
def __init__(self, secret_key, mid, mod="TEST"):
self.secret_key = secret_key
self.mid = mid
if mod == "REAL": # real
self.url = "https://secureapi.eximbay.com/Gateway/BasicProcessor.krp"
else:
self.url = "https://secureapi.test.eximbay.com/Gateway/BasicProcessor.krp"
# 파라미터 정렬
@staticmethod
def _sorting_params(**kwargs):
"""
:param kwargs:
:return:
"""
return_data = sorted(kwargs.items(), key=operator.itemgetter(0)) # 키값으로 소팅
params = ""
for k, v in return_data:
params += str(k) + "=" + str(v) + "&"
params = params[:-1]
return params
def make_fgkey(self, **kwargs):
"""
fgkey는
A. 모든 요청/응답 파라미터를 알파벳순서로 sorting하여 데이터를 생성 B. secretkey와 A의 데이터를 “?”로 연결
C. B의 결과를 SHA256 함수를 통해 Hashing 하여 생성합니다.
"""
params = self._sorting_params(**kwargs)
secret_key = self.secret_key
secret_add_params = secret_key + "?" + params
# params 과 시크릿키를 더한 후 단방향해시 후 str변환
fgkey = hashlib.sha256(secret_add_params.encode("utf-8")).hexdigest()
return fgkey
# 결제 요청
def payment(self, **kwargs):
# cur : 통화 , amt : 금액, buyer : 구매자 이름, email : 이메일, lang : 언어팩, returnurl : 결제완료 or 취소시 리턴
# statusurl : 결제 요청시 request 보내는곳 ,paymethod : 태국 MOLPAY 173
required_param_list = ['cur', 'amt', 'buyer', 'email', 'lang', 'returnurl', 'statusurl', 'paymethod']
# 요청 필수 값
for key in required_param_list:
if key not in kwargs:
raise KeyError("Parameter is missing!: {}".format(key))
# 결제 공통부분
payment_params = {
'ver': 230, # 버전
'txntype': "PAYMENT", # 간편결제
'charset': "UTF-8", # 인코딩 타입
'mid': self.mid, # 가맹점 아이디
'displaytype': "P"
}
payment_params.update(kwargs)
payment_params['fgkey'] = self.make_fgkey(**payment_params)
template = Template("""
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="X-UA-Compatible" charset=UTF-8">
</head>
<body leftmargin="0" topmargin="0" align="center" onload="javascript:document.regForm.submit();">
{% if data %}
<form name="regForm" method="post" action="{{ reqUrl }}" accept-charset="utf-8">
{% for key, value in data.items() %}
<input type="hidden" name="{{ key }}" value="{{ value }}" >
{% endfor %}
</form>
{% else %}
<h1>No Data!!!</h1>
{% endif %}
</body>
<script>
document.regForm.submit()
</script>
</html>
""")
return template.render(reqUrl=self.url, data=payment_params)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment