Django 프로젝트에서 알리페이(Alipay) 결제 시스템 연동하기

Django 애플리케이션에 알리페이 결제 기능을 통합하려면 python-alipay-sdk 라이브러리를 활용하여 결제 요청 처리와 결과 검증 로직을 구현해야 합니다.

1. 개발 환경 설정

우선 필요한 라이브러리를 설치합니다:

pip install python-alipay-sdk

2. 설정 정보 구성

settings.py 파일에 알리페이 서비스 이용을 위한 필수 키와 식별자를 정의합니다. 보안을 위해 실제 키 값은 환경 변수로 관리하는 것을 권장합니다.

ALIPAY_CONFIG = {
    "APP_ID": "your_app_id",
    "APP_PRIVATE_KEY": "/path/to/app_private_key.pem",
    "ALIPAY_PUBLIC_KEY": "/path/to/alipay_public_key.pem",
    "SIGN_TYPE": "RSA2",
    "IS_DEBUG": True  # 테스트 환경인 경우 True
}

3. 결제 요청 뷰 구현

사용자가 결제를 시작할 때 알리페이 결제 페이지로 리다이렉트할 수 있는 URL을 생성하는 로직입니다.

from django.http import HttpResponseRedirect
from alipay import AliPay
from django.conf import settings

def initiate_payment(request):
    client = AliPay(
        appid=settings.ALIPAY_CONFIG["APP_ID"],
        app_notify_url="https://yourdomain.com/payment/notify/",
        app_private_key_path=settings.ALIPAY_CONFIG["APP_PRIVATE_KEY"],
        alipay_public_key_path=settings.ALIPAY_CONFIG["ALIPAY_PUBLIC_KEY"],
        sign_type=settings.ALIPAY_CONFIG["SIGN_TYPE"],
        debug=settings.ALIPAY_CONFIG["IS_DEBUG"]
    )

    url = client.api_alipay_trade_page_pay(
        out_trade_no="order_123456789",
        total_amount="10.00",
        subject="상품 결제 테스트",
        return_url="https://yourdomain.com/payment/return/"
    )
    
    gateway_url = "https://openapi.alipay.com/gateway.do?" + url
    return HttpResponseRedirect(gateway_url)

4. 콜백 및 결과 검증

결제 후 알리페이 서버로부터 전달되는 응답 데이터(비동기 알림 및 동기 리다이렉트)를 검증하여 최종적으로 결제 성공 여부를 판단합니다.

from django.http import HttpResponse
from alipay import AliPay

def verify_payment(request):
    params = request.POST.dict()
    signature = params.pop('sign')
    
    client = AliPay(...) # 위와 동일한 초기화 과정 필요
    
    if client.verify(params, signature):
        if params["trade_status"] in ["TRADE_SUCCESS", "TRADE_FINISHED"]:
            # DB 결제 상태 업데이트 로직 추가
            return HttpResponse("success")
    return HttpResponse("fail")

5. URL 라우팅 설정

urls.py에 각 단계별 엔드포인트를 매핑합니다.

from django.urls import path
from . import views

urlpatterns = [
    path('pay/', views.initiate_payment, name='pay'),
    path('notify/', views.verify_payment, name='notify'),
    path('return/', views.verify_payment, name='return'),
]

태그: Django Alipay Payment-Gateway python

6월 17일 23:25에 게시됨