Ejemplo n.º 1
0
 def tearDown(self):  #失敗 無法刪除db裡的資料
     db = DB_controller(host=DB_HOST,
                        user=DB_USER,
                        password=DB_PWD,
                        db=DB_NAME)
     db.delete(table_name="user", column_name="name", value=self.name)
     db.close()
Ejemplo n.º 2
0
def delete_booking():
    '''want to delete a scheduled'''

    if request.method == "DELETE":
        user_email = session.get("email")
        if not user_email:
            return jsonify({"error": True, "message": "請先登入會員"}), 403

        try:
            db = DB_controller(host=DB_HOST,
                               user=DB_USER,
                               password=DB_PWD,
                               db=DB_NAME)
            user_data = db.show_data("user", "email", user_email)  # 查詢使用者
            booking_data = db.show_data("booking", "userId",
                                        user_data[0])  #此使用人的booking資料
            db.delete("booking", "bookingId", booking_data[0])  #刪除該資料
            res = make_response(jsonify({"ok": True}))
            return res
        except Exception as e:
            return jsonify({"error": True, "message": str(e)}), 500
Ejemplo n.º 3
0
def build_order():
    if request.method == "POST":
        post_data = request.get_json()
        if not session.get("email"):
            return jsonify({"error":True, "message": "未登入會員系統"}), 403
        user_name = post_data["contact"]["name"]
        email = post_data["contact"]["email"]
        phone = post_data["contact"]["phone"]
        attractionId = post_data["order"]["trip"]["attraction"]["id"]
        date = post_data["order"]["date"]
        time = post_data["order"]["time"]
        price = post_data["order"]["price"]
        rex_email = r"(^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$)" # email格式
        rex_phone = r"\d\d\d\d\d\d\d\d\d\d"
        match_email = re.match(rex_email, email)
        match_phone = re.match(rex_phone, phone)
        if user_name == "":
            return jsonify({"error": True, "message": "不可為空值"}), 400

        if email == "":
            return jsonify({"error": True, "message": "不可為空值"}), 400
        
        if not match_email:
            return jsonify({"error": True, "message": "email格式錯誤"}), 400

        if phone == "":
            return jsonify({"error": True, "message": "不可為空值"}), 400

        if not match_phone:
            return jsonify({"error": True, "message": "手機號碼格式錯誤"}), 400

        try:
            # 創建訂單編號
            now = dt.today()
            order_number = now.strftime("%Y%m%d%H%M%S")
            order_status = -1 # 記錄訂單付款狀態 初始值設-1 0付款成功, 1付款失敗
            try: 
                #訂單資訊存到db
                db = DB_controller(
                    host=DB_HOST,
                    user=DB_USER,
                    password=DB_PWD,
                    db=DB_NAME
                )

                
                user_data = db.show_data("user", "email", post_data["contact"]["email"])
                userId = user_data[0]
                prev_order_data = db.show_data("orders", "userId", userId)
                

                #還沒有付款成功 => 不用存bank_transaction
                if not prev_order_data: # 沒有過訂單
                    db.insert_data(table_name='orders', settingrow='order_number, attractionId, userId, phone, date, time, price, status', settingvalue=f'"{order_number}","{attractionId}", "{userId}", "{phone}","{date}", "{time}", "{price}", "{order_status}"')
                
                elif prev_order_data[9] == 0: #成功付款過,直接新增新的資料
                    db.insert_data(table_name='orders', settingrow='order_number, attractionId, userId, phone, date, time, price, status', settingvalue=f'"{order_number}","{attractionId}", "{userId}", "{phone}","{date}", "{time}", "{price}", "{order_status}"')
                
                elif prev_order_data[9] == 1: #付款失敗過(紀錄留存),可直接新增資料
                    db.insert_data(table_name='orders', settingrow='order_number, attractionId, userId, phone, date, time, price, status', settingvalue=f'"{order_number}","{attractionId}", "{userId}", "{phone}","{date}", "{time}", "{price}", "{order_status}"')
                
            except Exception as e:
                return jsonify({"error": True, "message": str(e)}), 500

            # 進行付款動作
            # tayppay.Client(is_sanbox, partner_key, merchant_id) 這裡都用官方提供測試用 => 沙盒 (要使用自己的key,id需要真的創建公司並且通過審核)
            client = tappay.Client(True, PARTNER_KEY, MERCHANT_ID)
            card_holder_data = tappay.Models.CardHolderData(post_data["contact"]["phone"], post_data["contact"]["name"], post_data["contact"]["email"])
            
            # client.pay_by_prime(prime, amount, details, card_holder_data)
            response_data_dict = client.pay_by_prime("test_3a2fb2b7e892b914a03c95dd4dd5dc7970c908df67a49527c0a648b2bc9", post_data["order"]["price"], post_data["order"]["trip"]["attraction"]["name"], card_holder_data)
            
            if response_data_dict["status"] == 0:
                order_status = 0
                try: 
                    #update bank_transaction & status
                    db.update(table_name='orders', set=f'bank_transaction="{response_data_dict["bank_transaction_id"]}", status={order_status}', search=f'order_number="{order_number}"')
                    order_data = db.show_data("orders", "order_number", order_number)
                    db.delete("booking", "userId", userId) # 付款成功 把booking的待預訂刪除
                    db.close()
                    data = {
                        "data": {
                            "number": order_data[1],
                            "payment": {
                                "status": order_data[9],
                                "message": "付款成功"
                            }
                        }
                    }
                    return jsonify(data)

                except Exception as e: #資料庫錯誤
                    return jsonify({"error": True, "message": str(e)}), 500

            else: # response_data_dict不是0,付款失敗
                order_status = 1
                db.update(table_name='orders', set=f'status={order_status}', search=f'order_number="{order_number}"')
                order_data = db.show_data("orders", "order_number", order_number)
                data = {
                    "error":True,
                    "number": order_number,
                    "payment": {
                        "status": order_data[9],
                        "message": "付款失敗"
                    }
                }
                return jsonify(data), 400

        except Exception as e:
            return jsonify({"error": True, "message": str(e)}), 400
Ejemplo n.º 4
0
def build_booking():
    '''build a trip if interested'''

    if request.method == "POST":
        post_data = request.get_json()
        attractionId = post_data["attractionId"]
        date = post_data["date"]
        time = post_data["time"]
        price = post_data["price"]
        user_email = session.get("email")
        rex_date = r"(^\d{4}\-(0[1-9]|1[012])\-(0[1-9]|[12][0-9]|3[01])$)"  #yyyy-mm-dd
        match_date = re.match(rex_date, date)
        date_today_check = datetime.now().strftime("%Y-%m-%d")

        if date == "":
            return jsonify({"error": True, "message": "請選擇日期"}), 400
        elif date < date_today_check:
            return jsonify({"error": True, "message": "不可預定今天以前的日期"}), 400

        if not match_date:
            return jsonify({"error": True, "message": "日期格式不正確"}), 400

        if time == "":
            return jsonify({"error": True, "message": "請選擇時間"}), 400

        if price == "":
            return jsonify({"error": True, "message": "請填入費用"}), 400

        if not user_email:
            return jsonify({"error": True, "message": "請先登入會員"}), 403
        else:
            try:
                db = DB_controller(host=DB_HOST,
                                   user=DB_USER,
                                   password=DB_PWD,
                                   db=DB_NAME)
                user_data = db.show_data("user", "email", user_email)
                userId = user_data[0]

                booking_data = db.show_data("booking", "userId", userId)
                # 先判斷booking table裡面是否已經有資料了,
                if booking_data:  # 如果有 => 刪除原本的 insert此筆
                    delete = db.delete("booking", "userId", userId)
                    insert = db.insert_data(
                        table_name="booking",
                        settingrow='attractionId, userId, date, time, price',
                        settingvalue=
                        f'"{attractionId}","{userId}","{date}", "{time}", "{price}"'
                    )
                    db.close()
                    res = make_response(jsonify({"ok": True}))
                    return res
                else:
                    # 沒找到的話直接insert
                    insert = db.insert_data(
                        table_name="booking",
                        settingrow='attractionId, userId, date, time, price',
                        settingvalue=
                        f'"{attractionId}","{userId}","{date}", "{time}", "{price}"'
                    )
                    db.close()
                    res = make_response(jsonify({"ok": True}))
                    return res
            except Exception as e:
                return jsonify({"error": True, "message": str(e)}), 500