|
@@ -1,19 +1,22 @@
|
|
import uuid
|
|
import uuid
|
|
import os
|
|
import os
|
|
import logging
|
|
import logging
|
|
|
|
+import dotenv
|
|
from typing import Optional
|
|
from typing import Optional
|
|
-from fastapi import FastAPI
|
|
|
|
|
|
+from fastapi import FastAPI, Form
|
|
from fastapi.params import Depends
|
|
from fastapi.params import Depends
|
|
from fastapi.templating import Jinja2Templates
|
|
from fastapi.templating import Jinja2Templates
|
|
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.networks import EmailStr
|
|
from starlette.responses import HTMLResponse
|
|
from starlette.responses import HTMLResponse
|
|
from sqlalchemy.orm import Session
|
|
from sqlalchemy.orm import Session
|
|
from fastapi.encoders import jsonable_encoder
|
|
from fastapi.encoders import jsonable_encoder
|
|
|
|
|
|
from sql.database import get_db_session
|
|
from sql.database import get_db_session
|
|
from sql.crud import create_order, get_order, get_orders
|
|
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
|
|
from sql.schemas import order_info_linepay as orderSechmas
|
|
|
|
|
|
|
|
|
|
@@ -45,15 +48,23 @@ app = FastAPI()
|
|
|
|
|
|
@app.get('/')
|
|
@app.get('/')
|
|
def hello():
|
|
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
|
|
## Request
|
|
@app.post('/request', response_class=HTMLResponse)
|
|
@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())
|
|
order_id = str(uuid.uuid4())
|
|
amount = 1200
|
|
amount = 1200
|
|
currency = "TWD"
|
|
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["amount"] = amount
|
|
CACHE["currency"] = currency
|
|
CACHE["currency"] = currency
|
|
request_options ={
|
|
request_options ={
|
|
@@ -87,13 +98,16 @@ async def pay_request():
|
|
response["transaction_id"] = transaction_id
|
|
response["transaction_id"] = transaction_id
|
|
response["paymentStatusCheckReturnCode"] = check_result.get("returnCode", None)
|
|
response["paymentStatusCheckReturnCode"] = check_result.get("returnCode", None)
|
|
response["paymentStatusCheckReturnMessage"] = check_result.get("returnMessage", 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 templates.TemplateResponse("request.html", {"request":response})
|
|
# return response
|
|
# return response
|
|
|
|
|
|
|
|
|
|
## Confirm
|
|
## Confirm
|
|
@app.get('/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
|
|
CACHE["transaction_id"] = transactionId
|
|
response = line.confirm(transactionId,float(CACHE.get("amount",0)),CACHE.get("currency","TWD"))
|
|
response = line.confirm(transactionId,float(CACHE.get("amount",0)),CACHE.get("currency","TWD"))
|
|
check_result = line.check_payment_status(transactionId)
|
|
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["paymentStatusCheckReturnCode"] = check_result.get("returnCode", None)
|
|
response["paymentStatusCheckReturnMessage"] = check_result.get("returnMessage",None)
|
|
response["paymentStatusCheckReturnMessage"] = check_result.get("returnMessage",None)
|
|
response["payment_details"] = payment_details
|
|
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 templates.TemplateResponse("confirm.html", {"request":response})
|
|
# return {"transactionId" : str(transactionId), "orderId" : orderId}
|
|
# return {"transactionId" : str(transactionId), "orderId" : orderId}
|
|
## Capture
|
|
## Capture
|