|  | @@ -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"
 |