当前位置: 首页 > news >正文

在本地进行Django支付宝扫码支付-当面付开发

这几天涉及到一个个人项目的支付开发场景,正好完成之后,做一下开发记录,给有需要的朋友做一下参考

涉及安装Python环境请参考我专栏中的历史文章,这里不再重复说明

环境:

Python3.11 使用Django框架

因本次代码为沙箱环境,未涉及支付宝当面付的申请,如何有需要,可以评论区告诉我,我会单独写一篇文对申请过程进行说明。

内网穿透工具安装请参考:

代码步骤

1、安装支付宝第三方SDK,我这里没有用官方的,因为代码使用起来比较简洁

pip3 install python-aliyun-sdk

2、生成urls.py文件,代码如下

from django.urls import path
from . import viewsurlpatterns = [path('precreate_payment/', views.precreate_payment, name='precreate_payment'),path('payment_notify/', views.payment_notify, name='payment_notify'),
]

方法说明 :

precreate_payment:支付宝二维码扫码生成,请求地址:$host/precreate_payment/

payment_notify:支付宝导步回调,地址$host/payment_notify/

3、编写视图文件 views.py

from django.shortcuts import render, redirect
from django.conf import settings
from alipay import AliPay
from django.views.decorators.csrf import csrf_exempt
from django.urls import reverse
from django.http import HttpResponseRedirect, HttpResponse, JsonResponse
import random
from datetime import datetime
import json#生成支付宝请求地址,debug为是否开启沙箱
def initialize_alipay():alipay = AliPay(appid=settings.ALIPAY_APPID,app_notify_url=None,app_private_key_string=settings.ALIPAY_APP_PRIVATE_KEY,alipay_public_key_string=settings.ALIPAY_PUBLIC_KEY,sign_type="RSA2",debug=True)return alipay#订单ID生成
def generate_out_trade_no():now = datetime.now()out_trade_no = now.strftime('%Y%m%d%H%M%S')out_trade_no += str(random.randint(1000, 9999))return out_trade_nodef precreate_payment(request):alipay = initialize_alipay()out_trade_no = generate_out_trade_no()result = alipay.api_alipay_trade_precreate(out_trade_no=out_trade_no,total_amount=100.00,subject="Test Order",)if result.get("code") == "10000":qr_code_url = result.get("qr_code")return render(request, 'pay/precreate_payment.html', {'qr_code_url': qr_code_url})else:return HttpResponse("Error in pre-creating transaction: " + result.get("sub_msg"), status=400)@csrf_exempt
def payment_notify(request):body_str = request.body.decode('utf-8')params = dict(request.POST.items())sign = params.pop('sign', None)alipay = initialize_alipay()if alipay.verify(params, sign):print("Alipay notify parameters:", json.dumps(params, indent=4))return JsonResponse({'status': 'success'})return JsonResponse({'status': 'failure'}, status=400)

 以上代码中引用了一些三方模块,除了支付宝SDK,还有一些模块如果提示不存在,请自行安装

pyment_notify为支付宝异步回调接口,可以根据你真实环境来进行生成。本地业务可以在

print("Alipay notify parameters:", json.dumps(params, indent=4))

这行进行替换,处理业务逻辑。

4、功能测试

        1、访问$host/precreate_payment/,显示你的二维码

        2、使用支付宝沙箱APP,登陆进行扫码支付

        3、通过控制台查看你的支付宝回调接口,检查服务器是否接收到响应

备注说明:

本来简化了一下本地代理的软件, 结果审核没给过, 想用代理工具的自己参考我之前的ftp搭建工具吧。 或者搜一下内网穿透

 

http://www.lryc.cn/news/430099.html

相关文章:

  • redis-RedisTemplate.opsForGeo 的geo地理位置相关的方法演示
  • 做短视频矩阵要十几人团队吗?云微客助阵,一人即可
  • 常用语音识别开源工具的对比与实践
  • Fortify代码安全测试工具在静态应用安全测试(SAST)方面针对典型问题的改进
  • AWS 消息队列服务 SQS
  • 【iOS】——响应者链和事件传递链
  • mysql查询慢
  • 【Java-==与equals】
  • ai回答 部署前端项目时需要使用ssh吗
  • 结合ChatGPT与Discord,提高团队合作效率
  • VisualStudio|开发环境相关技巧及问题
  • Redis远程字典服务器(11)—— redis客户端介绍
  • 【mysql】mysql之DDL数据定义语言
  • Word文件密码忘记,该如何才能编辑Word文件呢?
  • 解锁移动办公新境界,七款顶尖移动终端管控软件分享!助您轻松掌控每一台移动设备,企业必备!
  • 基于微信小程序的大用户心理咨询系统设计与实现---附源码99040
  • Bigtop 从0开始(上)
  • 算法基础及例题
  • 机器学习-KNN 算法
  • 【Linux】如何快速查看 linux 服务器有几个cpu
  • [数据集][目标检测]电力场景轭式悬架锈蚀分类数据集6351张2类别
  • 【嵌入式linux开发】智能家居入门5:老版ONENET,多协议接入(QT、微信小程序、HTTP协议、ONENET云平台、旭日x3派)
  • 软考-软件设计师(程序设计语言习题)
  • 「C++系列」vector 容器
  • 梯度的概念
  • 低代码开发:机遇与挑战并存的技术革新
  • Linux之RabbitMQ集群部署
  • 【JAVA CORE_API】Day19 多线程API(2)、多线程并发安全问题、同步
  • 最新Windows 11 23H2精简版,免费获取!稳定流畅!
  • PostgreSQL SELECT 语句:深入解析与实例应用