# -*- coding: utf-8 -*- # !/usr/bin/env python import json import requests class BankAPI(object): def _get(self, **kwargs): return self._request( method = 'get', **kwargs ) def _decode_result(self, res): try: result = json.loads(res.content.decode('utf-8', 'ignore'), strict = False) except (TypeError, ValueError): return res return result def _handle_result(self, res): if not isinstance(res, dict): result = self._decode_result(res) else: result = res return result def _request(self, method, url, **kwargs): headers = {'Content-Type': 'application/json;charset=utf-8'} if isinstance(kwargs.get('data', ''), dict): body = json.dumps(kwargs['data'], ensure_ascii = False) body = body.encode('utf-8') kwargs['data'] = body kwargs['timeout'] = kwargs.get('timeout', 5) with requests.sessions.Session() as session: res = session.request( url = url, method = method, headers = headers, **kwargs ) res.raise_for_status() return self._handle_result(res) def get_bank_card_info(self, card_no): url = 'https://ccdcapi.alipay.com/validateAndCacheCardInfo.json?_input_charset=utf-8&cardNo={}&cardBinCheck=true'.format( card_no) result = self._request('get', url, timeout = 5) # logger.debug(str(result)) if result['stat'] != 'ok' or result['key'] != card_no: return None if result['validated']: return { 'bankAbbrevCode': result['bank'], 'cardType': result['cardType'] } else: return None