12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 |
- import uuid
- 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 = "37336af5452f74ee871a9fa38d81602e"
- HOST_NAME = "https://api.ptt.cx:8750"
- # 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://api.ptt.cx:8750"
- 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 = str(uuid.uuid4())
- 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"
|