|
@@ -4,15 +4,25 @@ import os
|
|
import logging
|
|
import logging
|
|
from typing import AsyncContextManager, Optional
|
|
from typing import AsyncContextManager, Optional
|
|
from fastapi import FastAPI, Request, responses
|
|
from fastapi import FastAPI, Request, responses
|
|
|
|
+from fastapi.params import Depends
|
|
from fastapi.templating import Jinja2Templates
|
|
from fastapi.templating import Jinja2Templates
|
|
from pydantic import BaseModel
|
|
from pydantic import BaseModel
|
|
from dotenv import load_dotenv
|
|
from dotenv import load_dotenv
|
|
from os.path import join, dirname
|
|
from os.path import join, dirname
|
|
from linepay import LinePayApi
|
|
from linepay import LinePayApi
|
|
|
|
+from pydantic.errors import UrlSchemeError
|
|
from starlette.responses import HTMLResponse
|
|
from starlette.responses import HTMLResponse
|
|
|
|
+from pydantic import BaseModel, EmailStr, validator
|
|
|
|
+from sqlalchemy.orm import Session
|
|
|
|
+from . import crud, models, schemas
|
|
|
|
+from .database import SessionLocal, engine
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
|
|
# dotenv
|
|
# dotenv
|
|
dotenv_path = join(dirname(__file__),'./env/.env')
|
|
dotenv_path = join(dirname(__file__),'./env/.env')
|
|
|
|
+# dotenv_path = join(dirname(__file__),'./env/test.env') ## sandbox
|
|
load_dotenv(dotenv_path)
|
|
load_dotenv(dotenv_path)
|
|
|
|
|
|
# logger (TBD)
|
|
# logger (TBD)
|
|
@@ -24,15 +34,28 @@ templates = Jinja2Templates(directory="templates")
|
|
LINE_PAY_CHANNEL_ID = os.environ.get("LINE_PAY_CHANNEL_ID")
|
|
LINE_PAY_CHANNEL_ID = os.environ.get("LINE_PAY_CHANNEL_ID")
|
|
LINE_PAY_CHANNEL_SECRET = os.environ.get("LINE_PAY_CHANNEL_SECRET")
|
|
LINE_PAY_CHANNEL_SECRET = os.environ.get("LINE_PAY_CHANNEL_SECRET")
|
|
LINE_PAY_REQEST_BASE_URL = "https://{}".format(os.environ.get("HOST_NAME"))
|
|
LINE_PAY_REQEST_BASE_URL = "https://{}".format(os.environ.get("HOST_NAME"))
|
|
-line = LinePayApi(LINE_PAY_CHANNEL_ID, LINE_PAY_CHANNEL_SECRET, is_sandbox=True)
|
|
|
|
|
|
+line = LinePayApi(LINE_PAY_CHANNEL_ID, LINE_PAY_CHANNEL_SECRET, is_sandbox=False)
|
|
|
|
+# line = LinePayApi(LINE_PAY_CHANNEL_ID, LINE_PAY_CHANNEL_SECRET, is_sandbox=True)
|
|
|
|
|
|
# CACHE
|
|
# CACHE
|
|
CACHE = {}
|
|
CACHE = {}
|
|
|
|
|
|
|
|
|
|
|
|
+
|
|
|
|
+# db
|
|
|
|
+models.Base.metadata.create_all(bind=engine)
|
|
|
|
+
|
|
# Fastapi
|
|
# Fastapi
|
|
app = FastAPI()
|
|
app = FastAPI()
|
|
|
|
|
|
|
|
+# Dependency
|
|
|
|
+def get_db():
|
|
|
|
+ db = SessionLocal()
|
|
|
|
+ try:
|
|
|
|
+ yield db
|
|
|
|
+ finally:
|
|
|
|
+ db.close()
|
|
|
|
+
|
|
|
|
|
|
|
|
|
|
@app.get('/')
|
|
@app.get('/')
|
|
@@ -40,8 +63,8 @@ def hellow():
|
|
return {"Hello" : "World"}
|
|
return {"Hello" : "World"}
|
|
|
|
|
|
## Request
|
|
## Request
|
|
-@app.get('/request', response_class=HTMLResponse)
|
|
|
|
-async def pay_request(request: Request):
|
|
|
|
|
|
+@app.post('/request', response_class=HTMLResponse)
|
|
|
|
+async def pay_request(userinfo: schemas.UserInfo, db: Session = Depends(get_db)):
|
|
order_id = str(uuid.uuid4())
|
|
order_id = str(uuid.uuid4())
|
|
amount = 1200
|
|
amount = 1200
|
|
currency = "TWD"
|
|
currency = "TWD"
|