from fastapi import APIRouter from linepay import LinePayApi from fastapi.templating import Jinja2Templates # template templates = Jinja2Templates(directory="templates") router = APIRouter() LINE_PAY_CHANNEL_ID = "1656387996" SECRET_KEY = \ "df2f77bd544240801a048bd4293afd8eeb7fff3cb7050e42c791db4b83ebadcd" HOST_NAME = "https://f516-42-74-70-95.ngrok.io" # Line Pay Config LINE_PAY_CHANNEL_ID = LINE_PAY_CHANNEL_ID LINE_PAY_CHANNEL_SECRET = SECRET_KEY # LINE_PAY_REQEST_BASE_URL = "https://{}".format(HOST_NAME) LINE_PAY_REQEST_BASE_URL = "https://f516-42-74-70-95.ngrok.io" line = LinePayApi( LINE_PAY_CHANNEL_ID, LINE_PAY_CHANNEL_SECRET, is_sandbox=True ) # CACHE CACHE = {} # Request @router.post('/request') async def pay_request(): order_id = "20211227011" amount = "1" currency = "TWD" request_options = { "amount": amount, "currency": currency, "orderId": order_id, "packages": [ { "id": "NFT", "amount": 1, "products": [ { "name": "NFT Box 1", "quantity": 1, "price": 1, "imageUrl": "https://i.imgur.com/3rFHRVz.jpg" } ] } ], "redirectUrls": { "confirmUrl": LINE_PAY_REQEST_BASE_URL + "/confirm/" # "cancelUrl": LINE_PAY_REQEST_BASE_URL + "/cancel/" } } response = line.request(request_options) transaction_id = int(response.get("info", {}).get("transactionId", 0)) check_result = line.check_payment_status(transaction_id) response["transaction_id"] = transaction_id response["paymentStatusCheckReturnCode"] = check_result.get( "returnCode", None ) response["paymentStatusCheckReturnMessage"] = check_result.get( "returnMessage", None ) # return response return response # Confirm @router.get('/confirm/') async def pay_confirm( transactionId: int = "transactionId", ): CACHE["transaction_id"] = transactionId response = line.confirm( transactionId, float(CACHE.get("amount", 0)), CACHE.get("currency", "TWD")) check_result = line.check_payment_status(transactionId) payment_details = line.payment_details(transaction_id=transactionId) response["transaction_id"] = transactionId response["paymentStatusCheckReturnCode"] = check_result.get( "returnCode", None ) response["paymentStatusCheckReturnMessage"] = check_result.get( "returnMessage", None ) response["payment_details"] = payment_details if(response["paymentStatusCheckReturnCode"] == '0123'): # return response return "confirm.html", {"request": response} else: return "Not found"