コード例 #1
0
ファイル: referer.py プロジェクト: XinMa1/work
    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)
コード例 #2
0
ファイル: transaction.py プロジェクト: sSlotty/ResortAPI
 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
コード例 #3
0
ファイル: transaction.py プロジェクト: sSlotty/ResortAPI
 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
コード例 #4
0
ファイル: transaction.py プロジェクト: sSlotty/ResortAPI
 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
コード例 #5
0
ファイル: referer.py プロジェクト: XinMa1/work
    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()
コード例 #6
0
ファイル: referer.py プロジェクト: XinMa1/work
 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)
コード例 #7
0
ファイル: transaction.py プロジェクト: sSlotty/ResortAPI
    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
コード例 #8
0
ファイル: transaction.py プロジェクト: sSlotty/ResortAPI
    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
コード例 #9
0
ファイル: transaction.py プロジェクト: sSlotty/ResortAPI
    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