def __save_trade(self, trade_no, total_fee, owner, status): if status > TransactionStatus.STATUS_ERROR or \ status < TransactionStatus.STATUS_NONE: raise "Illegal trade status" Transactions.create(trade_id = trade_no, owner = owner, total_price=total_fee, trade_status = status)
def get(self) -> Response: transaction = Transactions.objects() if len(transaction) > 0: res = jsonify({ "data": transaction, "message": "success", "status": 200 }) res.status_code = 200 return res else: res = jsonify({"data": "null", "message": "error", "status": 204}) res.status_code = 204 return res
def get(self) -> Response: id = request.args.get('id') transac = Transactions.objects(transactionID=id) if len(transac) > 0: res = jsonify({ "data": transac, "message": "success", "status": 200 }) res.status_code = 200 return res else: res = jsonify({"data": "null", "message": "error", "status": 204}) res.status_code = 204 return res
def get(self) -> Response: transaction = Transactions.objects().all().values_list( 'transactionID', 'guestID', 'roomID', 'check_in', 'status', 'check_out', 'total_bill') if len(transaction) > 0: res = jsonify({ "data": transaction, "message": "success", "status": 200 }) res.status_code = 200 return res else: res = jsonify({"data": "null", "message": "error", "status": 204}) res.status_code = 204 return res
def pay_from_mui(self): inputs = self.getInput() trade_info = {} try: # this will raise an exception if user not found! try: user = Users.get(Users.token == inputs.get('token','illegal_token')) except Exception as e: return self.forbidden() trade_info = self._get_trade_info(inputs, True) trade_no = uuid.uuid4().hex self.__save_trade(trade_no, trade_info["total_fee"], user.id, TransactionStatus.STATUS_NONE) #MOCK user.id == 1 #self.__save_trade(trade_no, 1, TransactionStatus.STATUS_NONE) condition={'tradeID': trade_no} trade = Transactions.get(Transactions.trade_id == trade_no) self._save_trade_relationship(trade.id, trade_info) #print("trade info is %s\n", trade_info) para = [ ("service" , "mobile.securitypay.pay"), ("partner" , self.alipay_config['partner']), ("_input_charset", self.alipay_config['input_charset']), ("out_trade_no", trade_no), ("subject", trade_info["subject"]), ("payment_type", "1"), ("seller_id", self.seller_email), ("total_fee", trade_info["total_fee"]), ("body", trade_info.get("body", "None")), #不能为空,即使是空字符串也不行! TODO ("notify_url", trade_info["notify_url"]), #"show_url": "" ] prestr = "&".join(["%s=\"%s\"" % (key,str(val)) for key,val in para]) sign = urllib.urlencode({"sign":self.__rsa_sign(prestr, self.alipay_config['private_key_path'])}) split_sign = sign.split("=") sign = "=".join(["sign","\"%s\"" % split_sign[1]]) ret="%s&%s&sign_type=\"RSA\"" % (prestr, str(sign)) return ret except Exception as e: return self.error()
def mobilenotify(self): inputs = self.getInput() verify_result = self.__verify_mobile_notify_result(inputs) if(verify_result): out_trade_no = inputs.get("out_trade_no", "") trade_no = inputs.get("trade_no", "") trade_status = inputs.get("trade_status", "") if trade_status == 'TRADE_FINISHED' or trade_status == 'TRADE_SUCCESS' or trade_status == 'WAIT_BUYER_PAY': trade_record = Transactions.get(Transactions.trade_id == out_trade_no) if trade_record: trade_record.alipay_trade_id = trade_no trade_record.last_modified_time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") trade_record.description = str(inputs) if trade_status == 'WAIT_BUYER_PAY': trade_record.trade_status = TransactionStatus.STATUS_WAITPAY else: trade_record.trade_status = TransactionStatus.STATUS_COMPLETE trade_record.save() else: print('[IN MOBILE Notify]交易号%s不存在'%out_trade_no) else: print('[IN MOBILE Notify]交易信息非法:%s' % trade_status) else: print('[IN MOBILLE Notify]Verify失败:%s' % inputs)
def get(self) -> Response: transactionID = request.args.get('transactionID') transaction = Transactions.objects(transactionID=transactionID) print(len(transaction)) if len(transaction) > 0: pipline = [{ "$match": { "_id": transactionID } }, { "$lookup": { 'from': 'guests', 'localField': 'guestID', 'foreignField': '_id', 'as': 'guest' } }, { "$lookup": { 'from': 'rooms', 'localField': 'roomID', 'foreignField': '_id', 'as': 'room' } }] cursor = Transactions.objects.aggregate(pipline) cursor_list = list(cursor) guest = list(cursor_list[0]['guest']) room = list(cursor_list[0]['room']) data = { 'transactionID': cursor_list[0]['_id'], 'check_in': cursor_list[0]['check_in'], 'check_out': cursor_list[0]['check_out'], 'total_bill': cursor_list[0]['total_bill'], 'roomNum': room[0]['_id'], 'roomType': room[0]['roomType'], 'roomPrice': room[0]['price'], 'guestID': guest[0]['_id'], 'guestName': guest[0]['name'], 'guestTel': guest[0]['tel'], } print(data) res = jsonify({ "data": [data], "message": "success", "status": 200 }) res.status_code = 200 return res else: res = jsonify({ "data": "null", "message": "no have guestID", "status": 204 }) res.status_code = 204 return res
def post(self) -> Response: body = request.get_json() transaction = body['transactionID'] pipline = [{ "$match": { "_id": transaction } }, { "$lookup": { 'from': 'guests', 'localField': 'guestID', 'foreignField': '_id', 'as': 'guest' } }, { "$lookup": { 'from': 'rooms', 'localField': 'roomID', 'foreignField': '_id', 'as': 'room' } }] x = Transactions.objects.aggregate(pipline) y = list(x) local = list(y) if local[0]['status'] == 'False': guest = local[0]['guest'] room = local[0]['room'] key = uuid.uuid4().int checkIN = str(local[0]['check_in']).format("%Y-%m-%d") checkOUT = body['check_out'] days = days_between(checkIN, checkOUT) price = days * int(room[0]['price']) data = { 'transactionID': transaction, 'room': room[0], 'roomID': room[0]["_id"], 'roomType': room[0]["_id"], 'roomID': room[0]["_id"], 'roomID': room[0]["_id"], 'price': price, 'guest': { 'name': guest[0]['name'], 'tel': guest[0]['tel'] }, 'check_in': checkIN, 'check_out': checkOUT } Transactions.objects(transactionID=transaction).update( set__status="True", set__check_out=checkOUT, set__total_bill=str(price), ) data_payment = { 'paymentID': str(key)[0:5], 'transactionID': transaction, 'guestID': guest[0]['_id'], 'room_price': room[0]['price'], 'total_bill': price, 'status': 'False' } try: payment = Payments(**data_payment) payment.save() Rooms.objects(roomID=room[0]['_id']).update( set__room_status='True') res = jsonify({ "data": [None], "message": "success", "status": 200 }) res.status_code = 200 return res except NotUniqueError: res = jsonify({ "data": "null", "message": "error", "status": 400 }) res.status_code = 400 return res else: res = jsonify({"data": "null", "message": "error", "status": 400}) res.status_code = 400 return res
def post(self) -> Response: body = request.get_json() schema = Kanpai.Object({ 'userID': Kanpai.String().required(), 'guestID': Kanpai.String().required(), 'roomID': Kanpai.String().required(), 'transaction_date': Kanpai.String(), 'check_in': Kanpai.String().required() }) print(body) room_id = Rooms.objects( roomID=body['roomID']).values_list('room_status') filter_status = list(room_id) status = filter_status[0] if status == "True": if len(room_id) > 0: key = uuid.uuid4().int data = { 'transactionID': str(key)[0:6], 'userID': body['userID'], 'guestID': body['guestID'], 'roomID': body['roomID'], 'transaction_date': datetime.utcnow(), 'check_in': body['check_in'], 'check_out': "None", 'total_bill': "None", 'status': 'False' } transaction = Transactions(**data) transaction.save() Rooms.objects(roomID=body['roomID']).update( set__room_status="False") res = jsonify({ "data": [None], "message": "success", "status": 201 }) res.status_code = 201 return res else: res = jsonify({ "data": [None], "message": "No have room number", "status": 400 }) res.status_code = 400 return res else: res = jsonify({ "data": [None], "message": "Room is not alivable", "status": 400 }) res.status_code = 400 return res