Last active
April 11, 2020 10:16
-
-
Save hongdonghyun/a2cfd97e4d1426d21040adc9a68b1b4d to your computer and use it in GitHub Desktop.
eximbay
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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