django直线支付宝支付接口

发布时间 2023-04-02 10:59:29作者: 智健

1.创建Django项目
首先,在命令行中使用以下命令创建一个新的Django项目:

django-admin startproject project_name

2.安装Python SDK
然后,下载并安装支付宝Python SDK。可以使用pip命令进行安装:

pip install alipay-sdk-python

3.配置支付宝参数
配置支付宝参数
在settings.py文件中,添加支付宝参数配置:

ALIPAY_APPID = 'your_appid'
ALIPAY_PUBLIC_KEY = 'your_public_key'
ALIPAY_PRIVATE_KEY = 'your_private_key'
ALIPAY_GATEWAY = 'https://openapi.alipay.com/gateway.do'

其中,your_appid、your_public_key和your_private_key是你的支付宝账号信息。

4.编写支付接口
在views.py文件中,添加支付接口代码:

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

def alipay(request):
    alipay = AliPay(
        appid=settings.ALIPAY_APPID,
        app_notify_url='http://localhost:8000/notify/',
        app_private_key_path=settings.ALIPAY_PRIVATE_KEY,
        alipay_public_key_path=settings.ALIPAY_PUBLIC_KEY,
        sign_type='RSA2',
        debug=True
    )

    order_string = alipay.api_alipay_trade_page_pay(
        out_trade_no='201806261254201',
        total_amount='0.01',
        subject='测试订单',
        return_url='http://localhost:8000/return/'
    )

    return HttpResponse(order_string)

其中,alipay函数是一个视图函数,它接收一个request参数,并返回一个HttpResponse对象。在函数中,首先创建AliPay对象,并设置相关参数,包括appid、app_notify_url、app_private_key_path、alipay_public_key_path、sign_type和debug。然后,调用api_alipay_trade_page_pay方法生成订单字符串,最后返回该字符串。

5.编写回调接口
在views.py文件中,添加支付宝回调接口代码:

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

def notify(request):
    data = request.POST.dict()
    signature = data.pop('sign')

    alipay = AliPay(
        appid=settings.ALIPAY_APPID,
        app_notify_url='http://localhost:8000/notify/',
        app_private_key_path=settings.ALIPAY_PRIVATE_KEY,
        alipay_public_key_path=settings.ALIPAY_PUBLIC_KEY,
        sign_type='RSA2',
        debug=True
    )

    success = alipay.verify(data, signature)

    if success and data["trade_status"] in ("TRADE_SUCCESS", "TRADE_FINISHED"):
        # 处理订单信息
        return HttpResponse('success')
    else:
        return HttpResponse('fail')

其中,notify函数是一个回调函数,它接收一个request参数,并返回一个HttpResponse对象。首先从函数中获取POST请求的数据,并将签名数据从POST请求中剔除,然后创建AliPay对象,并调用verify方法对数据进行验证。如果验证成功并且交易状态为TRADE_SUCCESS或TRADE_FINISHED,则处理订单信息并返回'success',否则返回'fail'。

6.编写返回接口
在views.py文件中,添加支付宝返回接口代码:

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

def alipay_return(request):
    data = request.GET.dict()
    signature = data.pop('sign')

    alipay = AliPay(
        appid=settings.ALIPAY_APPID,
        app_notify_url='http://localhost:8000/notify/',
        app_private_key_path=settings.ALIPAY_PRIVATE_KEY,
        alipay_public_key_path=settings.ALIPAY_PUBLIC_KEY,
        sign_type='RSA2',
        debug=True
    )

    success = alipay.verify(data, signature)

    if success and data["trade_status"] in ("TRADE_SUCCESS", "TRADE_FINISHED"):
        # 处理订单信息
        return HttpResponse('支付成功')
    else:
        return HttpResponse('支付失败')

其中,alipay_return函数是一个返回函数,它接收一个request参数,并返回一个HttpResponse对象。在函数中,首先获取GET请求的数据,并将签名数据从GET请求中剔除,然后创建AliPay对象,并调用verify方法对数据进行验证。如果验证成功并且交易状态为TRADE_SUCCESS或TRADE_FINISHED,则处理订单信息并返回'支付成功',否则返回'支付失败'。

7.配置URL
在urls.py文件中,添加URL配置:

from django.urls import path
from . import views

urlpatterns = [
    path('alipay/', views.alipay),
    path('notify/', views.notify),
    path('return/', views.alipay_return),
]

第一个URL配置是支付接口URL,第二个URL配置是支付宝回调接口URL,第三个URL配置是支付宝返回接口URL。