Skip to main content

支付宝支付交易方法实现

本文介绍了如何通过Python实现使用支付宝进行支付交易的方法。

注册路由

在dx_movie/dx_movie/urls.py中,注册支付相关的路由,代码是如下:

dx_movie/dx_movie/urls.py

urlpatterns = [
path('admin/', admin.site.urls),
path('api/', include(router.urls)),
path('api/', include('djoser.urls')),
path('api/', include('djoser.urls.jwt')),
path('api/alipay/',trade_views.AlipayAPIView.as_view()),
]

创建Alipay API View

首先,我们需要在trade/views.py下创建一个AlipayAPI视图,用于处理支付宝支付的请求。

dx_movie/trade/views.py
from utils.error import TradeError, UserError,response_data
from utils.zhifubao import Alipay


class AlipayAPIView(APIView):
def get(self, request):
card_id = request.GET.get('card_id', None)
try:
card = Card.objects.get(pk=card_id)
except:
return Response(response_data(*TradeError.CardParamsError))
out_trade_no = "pay" + datetime.now().strftime("%Y%m%d%H%M%S") + get_random_code(4)

代码解析

这段代码定义了一个 Django REST framework 的视图 AlipayAPIView,它继承自 APIView。这个视图主要处理支付请求,特别是与支付宝的交互。下面是代码的详细解析:

  1. 导入模块和类
    • utils.error 导入 TradeError, UserError, 和 response_data。这些可能是自定义的错误处理和响应格式化工具。
    • utils.zhifubao 导入 Alipay 类,这个类可能封装了与支付宝交互的方法。
  2. 定义视图 AlipayAPIView
    • 继承自 APIView,表示这是一个处理HTTP请求的视图类。
  3. get 方法
    • 通过 HTTP GET 请求触发。
    • 从请求的查询参数中获取 card_id
    • 使用 card_id 尝试从数据库中获取一个 Card 实例。如果失败,返回一个包含 TradeError.CardParamsError 的响应。
    • 拼接一个惟一的的out_trade_no ,为了保证唯一性,使用get_random_code()生成一个4位的随机数。

生成订单号的方法

在utils文件夹下,新增一个common.py文件,使用了一个get_random_code方法来生成订单号中的随机数部分。common.py代码如下:

dx_movie/utils/common.py
import random

def get_random_code(number):
code = ''
for _ in range(number):
code = code + str(random.randint(0,9))
return code

该方法接受一个参数number,表示要生成的随机数的位数。在方法中,我们使用random.randint(0, 9)来生成0到9之间的随机数,并将其转化为字符串后拼接到code中。

错误码

在utils/error.py文件中,新增TradeError相关错误,代码如下:

dx_movie/utils/error.py

class TradeError():
CardParamsError = (30001, '会员卡参数错误')
OrderCreateError = (30002, '订单创建失败')
PayRequestError = (30003, '支付请求失败')
OrderStatusError = (30004, '订单支付状态错误')

下节课我们继续完成支付宝接口功能。