123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192 |
- # -*- coding: utf-8 -*-
- # !/usr/bin/env python
- import base64
- import json
- import sys
- from hashlib import md5
- import pymssql
- import requests
- from apps import serviceCache
- reload(sys)
- # noinspection PyUnresolvedReferences
- sys.setdefaultencoding("utf-8")
- class YuChuanApi(object):
- def __init__(self, url=None, systemName=None, termId=None, bagCode=None, roomNumb=None, HOST=None, PART=None,
- USER=None, PASSWORD=None, DATABASE=None, TABLE=None):
- self.url = url
- self.systemName = systemName
- self.termId = termId
- self.bagCode = bagCode
- self.roomNumb = roomNumb
- self.HOST = HOST
- self.PART = PART
- self.USER = USER
- self.PASSWORD = PASSWORD
- self.DATABASE = DATABASE
- self.TABLE = TABLE
- def get_token(self):
- #1 存缓存
- token = serviceCache.get('YuChuanApiToken')
- if token:
- return token
- #2 缓存中没有访问api继续调用
- url = "{}/webapi/query/system/api/v1/login/{}".format(self.url,self.systemName)
- headers = {
- 'content-type': "application/json"
- }
- response = requests.request("GET", url, headers=headers, timeout = 15)
- if response.status_code == 200:
- # 存缓存
- token = response.json().get('data').get('token')
- serviceCache.set('YuChuanApiToken',token,60*30)
- return token
- def update_token(self):
- token = serviceCache.get('YuChuanApiToken')
- if token:
- serviceCache.delete('YuChuanApiToken')
- return self.get_token()
- def get_user_info(self,factoryFixId):
- token = self.get_token()
- url = "{}/webapi/query/account/api/v1/balancebycard/{}".format(self.url,factoryFixId)
- headers = {
- 'content-type': "application/json",
- 'key': token,
- 'username': self.systemName,
- }
- response = requests.request("GET", url, headers=headers, timeout = 15)
- if response.status_code == 200:
- return response.json().get('data')
- else:
- return None
- def get_mac(self,factoryFixId, userNumb, consumeValue, termId, roomNumb, bagCode, orderSerial,token):
- macStr = ""
- macStr += "consumevalue=" + str(consumeValue)
- macStr += "&userNumb=" + str(userNumb)
- macStr += "&factoryfixid=" + str(factoryFixId)
- macStr += "&termid=" + str(termId)
- macStr += "&orderserial=" + str(orderSerial)
- macStr += "&roomnumb=" + str(roomNumb)
- macStr += "&bagcode=" + str(bagCode)
- macStr += "&token=" + str(token)
- try:
- md5_data = md5(macStr.encode('utf-8')).hexdigest().decode('hex')
- base64mac = base64.b64encode(md5_data)
- except Exception as e:
- raise e
- return base64mac
- def pay_order(self,orderSerial,userNumb,factoryFixId,consumeValue):
- """
- :param consumeValue: 消费金额,精确到小数点后面2位 :type str
- :param userNumb: 人员编号 :type str
- :param factoryFixId: 物理卡号
- :param orderSerial: 长度为20的订单序号,消费系统全局维一
- :return:
- """
- token = self.get_token()
- # print 'token>>' ,token
- username = self.systemName
- url = "{}/consume/v1/KlsdConsumes/order".format(self.url)
- payload={
- "orderSerial": orderSerial,
- "userNumb": userNumb,
- "factoryFixId": factoryFixId,
- "bagCode": self.bagCode,
- "termId": self.termId,
- "consumeValue": consumeValue,
- "roomNumb": self.roomNumb,
- "token": token
- }
- # print payload
- querystring = {'mac': self.get_mac(**payload)}
- # print 'mac>>',querystring
- payload.pop("token")
- headers = {
- 'Content-Type': "application/json",
- 'key': token,
- 'username': username,
- }
- response = requests.request("POST", url, data=json.dumps(payload), headers=headers, params=querystring, timeout = 15)
- # return response.json()
- if response.status_code == 200:
- return response.json()
- # 余额不足
- if response.status_code == 403:
- return response.json()
- # 已经扣费
- if response.status_code == 401:
- return response.json()
- # 人员编号错误
- if response.status_code == 400:
- return response.json()
- def sql_get_user_info(self,userNumb):
- try:
- connect = pymssql.connect(host='{}:{}'.format(self.HOST,self.PART), user=self.USER, password=self.PASSWORD,
- database=self.DATABASE) # 服务器名,账户,密码,数据库名
- cursor = connect.cursor()
- cursor.execute("SELECT factoryFixId,mobilePhone,userName,userNumb FROM USER_CARDINFO WHERE userNumb=%s",(userNumb,))
- row = cursor.fetchone()
- connect.commit()
- cursor.close()
- connect.close()
- except Exception as e:
- raise e
- fields = ['factoryFixId', 'mobilePhone', 'userName', 'userNumb']
- dic = {}
- for i, filed in enumerate(fields):
- dic[fields[i]] = row[i]
- return dic
- # if __name__ == '__main__':
- # url = 'http://120.237.110.50:7622'
- # systemName = 'schooladmin'
- # yc = YuChuanApi()
- # dic = {
- # "orderSerial": "12314747292574254198",
- # "userNumb": "123456",
- # "factoryFixId": "2869422464",
- # "bagCode": "1",
- # "termId": "199",
- # "consumeValue": "0.01",
- # "roomNumb": "12345",
- # }
- # print json.dumps(yc.pay_order(**dic),encoding='utf-8', ensure_ascii=False)
- # {"message": "扣费成功!", "code": 200, "data": {"consumeValue": 11.26, "subsidyValue": 0}, "success": true}
|