Prechádzať zdrojové kódy

basic function achive

conradlan 3 rokov pred
rodič
commit
d7fb72e5cb
7 zmenil súbory, kde vykonal 59 pridanie a 9 odobranie
  1. 26 5
      main.py
  2. 1 1
      sql/crud.py
  3. 1 1
      sql/database.py
  4. 1 1
      sql/models.py
  5. 1 1
      sql/schemas.py
  6. 23 0
      templates/index.html
  7. 6 0
      templates/request.html

+ 26 - 5
main.py

@@ -1,19 +1,22 @@
 import uuid
 import os
 import logging
+import dotenv
 from typing import Optional
-from fastapi import FastAPI
+from fastapi import FastAPI, Form
 from fastapi.params import Depends
 from fastapi.templating import Jinja2Templates
 from dotenv import load_dotenv
 from os.path import join, dirname
 from linepay import LinePayApi
+from pydantic.networks import EmailStr
 from starlette.responses import HTMLResponse
 from sqlalchemy.orm import Session
 from fastapi.encoders import jsonable_encoder
 
 from sql.database import get_db_session
 from sql.crud import create_order, get_order, get_orders
+from sql.models import order_info_linepay
 from sql.schemas import order_info_linepay as orderSechmas
 
 
@@ -45,15 +48,23 @@ app = FastAPI()
 
 @app.get('/')
 def hello():
-    return {"Hello" : "World"}
+    index = {}
+    index["product"] = "早鳥方案"
+    index["amount"] = 1200
+    index["url"] = "/request"
+    # return {"product" : ,"amount" : 1200}
+    return templates.TemplateResponse("index.html", {"request":index})
 
 ## Request
 @app.post('/request', response_class=HTMLResponse)
-async def pay_request():
+async def pay_request(email: EmailStr= Form(...), phone: str= Form(...),full_name: str= Form(...)):
     order_id = str(uuid.uuid4())
     amount = 1200
     currency = "TWD"
-    CACHE["order_id"] = order_id
+    CACHE["email"] = email
+    CACHE["phone"] = phone
+    CACHE["full_name"] = full_name
+    CACHE["orderid"] = order_id
     CACHE["amount"] = amount
     CACHE["currency"] = currency
     request_options ={
@@ -87,13 +98,16 @@ async def pay_request():
     response["transaction_id"] = transaction_id
     response["paymentStatusCheckReturnCode"] = check_result.get("returnCode", None)
     response["paymentStatusCheckReturnMessage"] = check_result.get("returnMessage", None)
+    response["email"] = email
+    response["phone"] = phone
+    response["full_name"] = full_name
     return templates.TemplateResponse("request.html", {"request":response})
     # return response
 
 
 ## Confirm
 @app.get('/confirm/')
-async def pay_confirm(transactionId: int, orderId: Optional[str] = None):
+async def pay_confirm(transactionId: int, orderId: Optional[str] = None, db_sesion: Session = Depends(get_db_session)):
     CACHE["transaction_id"] = transactionId
     response = line.confirm(transactionId,float(CACHE.get("amount",0)),CACHE.get("currency","TWD"))
     check_result = line.check_payment_status(transactionId)
@@ -102,6 +116,13 @@ async def pay_confirm(transactionId: int, orderId: Optional[str] = None):
     response["paymentStatusCheckReturnCode"] = check_result.get("returnCode", None)
     response["paymentStatusCheckReturnMessage"] = check_result.get("returnMessage",None)
     response["payment_details"] = payment_details
+    if(response["paymentStatusCheckReturnCode"] == '0123'):
+        orderin = {}
+        orderin["orderid"] = CACHE["orderid"]
+        orderin["email"] = CACHE["email"]
+        orderin["phone"] = CACHE["phone"]
+        orderin["full_name"] = CACHE["full_name"]
+        create_order(db_sesion, order_in= orderin)
     return templates.TemplateResponse("confirm.html", {"request":response})
     # return {"transactionId" : str(transactionId), "orderId" : orderId}
 ## Capture

+ 1 - 1
sql/crud.py

@@ -9,7 +9,7 @@ def get_orders(db: Session, skip: int = 0, limit: int = 100):
     return db.query(order_info_linepay).offset(skip).limit(limit).all()
 
 def create_order(db: Session, order_in: orderschema):
-    create_order = order_info_linepay(**order_in.dict())
+    create_order = order_info_linepay(**order_in)
     db.add(create_order)
     db.commit()
     db.refresh(create_order)

+ 1 - 1
sql/database.py

@@ -4,7 +4,7 @@ from sqlalchemy.orm import sessionmaker
 
 
 ## ENV LOAD
-SQLALCHEMY_DATABASE_URL = 'mysql://choozmo:pAssw0rd@db.ptt.cx:3306/dbname?charset=utf8mb4'
+SQLALCHEMY_DATABASE_URL = 'mysql://choozmo:pAssw0rd@db.ptt.cx:3306/AI_anchor?charset=utf8mb4'
 
 engine = create_engine(SQLALCHEMY_DATABASE_URL)
 SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)

+ 1 - 1
sql/models.py

@@ -9,7 +9,7 @@ class order_info_linepay(Base):
     __tablename__ = "order_info_linepay"
     
     id = Column(Integer, primary_key=True, nullable=False)
-    order_id = Column(String(255), unique=True, nullable=False)
+    orderid = Column(String(255), unique=True, nullable=False)
     email = Column(String(255), nullable=False)
     phone = Column(String(20))
     full_name = Column(String(50))

+ 1 - 1
sql/schemas.py

@@ -8,7 +8,7 @@ from datetime import datetime
 class order_info_linepay(BaseModel):
     id: int
     # UUID4 validation???
-    order_id: str
+    orderid: str
     email: EmailStr
     # phone: phone??
     # @validator('phone')

+ 23 - 0
templates/index.html

@@ -0,0 +1,23 @@
+<!DOCTYPE html>
+<html>
+    <head>
+		<title>index</title>
+    </head>
+    <body>
+		<dl>
+			<dt>商品明細</dt>
+			<dd>{{ request.product }}</dd>
+			<dt>金額</dt>
+			<dd>{{ request.amount }}</dd>
+			<!-- <dd>
+				<a href="{{ request.url }}" rel="noopener noreferrer">填寫資料</a>
+			</dd> -->
+		</dl>
+		<form action = "/request" method = "POST">
+			<p>email <input type = "email" name = "email" /></p>
+			<p>phone <input type = "tel" name = "phone" /></p>
+			<p>full_name <input type = "text" name = "full_name" /></p>
+			<p><input type = "submit" value = "submit" /></p>
+		</form>
+    </body>
+</html>

+ 6 - 0
templates/request.html

@@ -5,6 +5,12 @@
     </head>
     <body>
 		<dl>
+			<dt>email</dt>
+			<dd>{{ request.email }}</dd>
+			<dt>phone</dt>
+			<dd>{{ request.phone }}</dd>
+			<dt>full_name</dt>
+			<dd>{{ request.full_name}}</dd>
 			<dt>paymentAccessToken</dt>
 			<dd>{{ request.info.paymentAccessToken }}</dd>
 			<dt>transactionId</dt>