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