Skip to main content

支付宝异步验签

我们已经成功的调用了支付宝的支付接口,并实现了支付功能,但是,支付成功后,我们需要将支付宝页面跳转到我们自己的网站,并记录用户的支付信息。也就是要实现时序流程图中的步骤6和7。

以下是支付宝支付流程的时序图:

图66-支付时序图

确认支付

在支付宝的交易流程中,确认支付完成后,支付宝会调用一个GET请求,向return URL发送请求信息。我们需要配置一个return URL地址,用于接收支付宝的返回信息。

首先,在Django settings.py配置文件中,配置支付宝下新增一个参数ALIPAY_RETURN_URL:

dx_movie/dx_movie/settings.py

# 配置支付宝
...
# returnURL
ALIPAY_RETURN_URL = 'https://your-domain.com/orders/'
# NotifyURL
ALIPAY_NOTIFY_URL = 'https://your-domain.com/api/callback/'
warning

https://your-domain.com替换成你自己的网址。可以使用上一节介绍的内外穿透工具生成的外网ip。 确保可以正常访问。

接下来配置支付宝的沙箱环境。在沙箱应用中,找到授权回调地址,如下图所示。

图73-沙箱应用授权回调地址

点击“修改”,填写回调地址,如下图。

图73-配置回调地址

配置URL

接下来,在后端URL配置中添加2个路由, 代码如下:

dx_movie/dx_movie/urls.py
from django.urls import path

router.register(r'orders', trade_views.OrderViewSet)

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()),
path('api/callback/', trade_views.AlipayCallbackAPIView.as_view()),
]

其中,orders是在trade模块下,当支付成功后,跳转到这个网址。api/callback是授权的回调地址,用于异步验签的网址。

接下来,在trade/veiws.py文件中新建AlipayCallbackAPIView视图,代码如下:

class AlipayCallbackAPIView(APIView):
def post(self, request):
params = request.POST.dict()
print(params)
return Response('success')

测试回调

再次购买会员卡,填写沙箱账号和密码进行支付,支付成功后,在终端查接收到的支付宝异步验签参数,如下图所示。

图73-异步验签返回参数 为了更清晰地查看这些参数,我们可以使用在线json工具 bejson.com 格式化后的效果如下图示。 图73-格式化后的参数数据

小结

本文介绍了支付宝的异步通知功能,包括确认支付和异步通知的配置步骤,小伙伴们我们下节再见。