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

Django对接支付宝沙箱环境(2024年9月新测有效)

1、申请沙箱环境
#需要填一些个人信息
https://opendocs.alipay.com/

2、使用支付宝登入,并进入控制台,进入'开发者工具推荐'-->'沙箱'

3、获取基本信息

主要是APPID,和支付宝网关地址

4、生成应用私钥和应用公钥和支付宝公钥

上面的接口加签方式选择系统默认密钥

注:这里有个坑,如果选择自定密钥,后面回调验签会不成功。

点击查看,可以看到应用私钥和应用公钥和支付宝公钥

6、沙箱账号

这里用商家和买家的账号信息,也可以进行充值

7、下载支付宝沙箱APP

8、在手机上用买家账号和密码登入登入支付宝沙箱APP

9、下载并安装支付宝SDK

pip3 install alipay-sdk-python
10、生成支付链接

在视图函数中调用止函数即可生成支付链接。

import logging
from alipay.aop.api.AlipayClientConfig import AlipayClientConfig
from alipay.aop.api.DefaultAlipayClient import DefaultAlipayClient
from alipay.aop.api.FileItem import FileItem
from alipay.aop.api.domain.AlipayTradeAppPayModel import AlipayTradeAppPayModel
from alipay.aop.api.domain.AlipayTradePagePayModel import AlipayTradePagePayModel
from alipay.aop.api.domain.AlipayTradePayModel import AlipayTradePayModel
from alipay.aop.api.domain.GoodsDetail import GoodsDetail
from alipay.aop.api.domain.SettleDetailInfo import SettleDetailInfo
from alipay.aop.api.domain.SettleInfo import SettleInfo
from alipay.aop.api.domain.SubMerchant import SubMerchant
from alipay.aop.api.request.AlipayOfflineMaterialImageUploadRequest import AlipayOfflineMaterialImageUploadRequest
from alipay.aop.api.request.AlipayTradeAppPayRequest import AlipayTradeAppPayRequest
from alipay.aop.api.request.AlipayTradePagePayRequest import AlipayTradePagePayRequest
from alipay.aop.api.request.AlipayTradePayRequest import AlipayTradePayRequest
from alipay.aop.api.response.AlipayOfflineMaterialImageUploadResponse import AlipayOfflineMaterialImageUploadResponse
from alipay.aop.api.response.AlipayTradePayResponse import AlipayTradePayResponsedef alpay_page(order_id,total_amount,subject,return_url,notify_url):"""功能:网页生成支付宝支付页面:param order_id:订单号(str):param total_amount:订单金额(float):param subject:订单标题:param return_url:同步回调地址:param notify_url:异步回调地址"""logging.basicConfig(level=logging.INFO,format='%(asctime)s %(levelname)s %(message)s',filemode='a', )logger = logging.getLogger('')"""设置配置,包括支付宝网关地址、app_id、应用私钥、支付宝公钥等,其他配置值可以查看AlipayClientConfig的定义。"""alipay_client_config = AlipayClientConfig()        #创建用户对象配置文件         alipay_client_config.server_url = project1.settings.gateway     #支付宝网关alipay_client_config.app_id = project1.settings.APPID           #支付宝APPIDalipay_client_config.app_private_key = project1.settings.private_key   #应用私钥alipay_client_config.alipay_public_key = project1.settings.public_key  #支付宝公钥alipay_client_config.charset = 'utf-8'   """得到客户端对象。注意,一个alipay_client_config对象对应一个DefaultAlipayClient,定义DefaultAlipayClient对象后,alipay_client_config不得修改,如果想使用不同的配置,请定义不同的DefaultAlipayClient。logger参数用于打印日志,不传则不打印,建议传递。"""client = DefaultAlipayClient(alipay_client_config=alipay_client_config,logger=logger)model = AlipayTradePagePayModel()model.out_trade_no = order_idmodel.total_amount = total_amountmodel.subject = subjectmodel.body = "支付宝测试"model.product_code = "FAST_INSTANT_TRADE_PAY"#下面这些注释掉的,是交易的详细信息,有些在沙箱环境中似乎不能用。# settle_detail_info = SettleDetailInfo()# settle_detail_info.amount = 50# settle_detail_info.trans_in_type = "userId"# settle_detail_info.trans_in = "2088302300165604"# settle_detail_infos = list()# settle_detail_infos.append(settle_detail_info)# settle_info = SettleInfo()# settle_info.settle_detail_infos = settle_detail_infos# model.settle_info = settle_info# sub_merchant = SubMerchant()# sub_merchant.merchant_id = "2088721043828344"# model.sub_merchant = sub_merchantrequest = AlipayTradePagePayRequest(biz_model=model)request.notify_url = notify_url  # 异步通知回调地址request.return_url = return_url  # 同步回调地址# 得到构造的请求,如果http_method是GET,则是一个带完成请求参数的url,如果http_method是POST,则是一段HTML表单片段response = client.page_execute(request, http_method="GET")print("alipay.trade.page.pay response:" + response)return response             #返回支付页面url
11、支付宝回调
@csrf_exempt
def pay_callback(req):#支付宝回调函数#verify_with_rsa用于验签from alipay.aop.api.util.SignatureUtils import verify_with_rsalog_file = os.path.join(settings.BASE_DIR, 'uwsgi/uwsgi.log')logging.basicConfig(filename=log_file, level=logging.DEBUG,format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')def visa(data_dict):#验签函数# 获取并删除signsign = data_dict.pop('sign')# 获取并删除sign_typesign_type = data_dict.pop('sign_type')# 将回传参数排序(按ascii码升序排序)并组合成字符串unsigned_str = '&'.join('{}={}'.format(key, data_dict[key]) for key in sorted(data_dict))# 将参数字符串编码message = unsigned_str.encode('utf-8')# 获取支付宝公钥public_key = project1.settings.public_key# 支付宝回调验签try:status = verify_with_rsa(public_key, message, sign)if status:return Trueelse:return Falseexcept BaseException as e:print(e)return Falseif req.method=='POST':#异步回调logging.debug('异步回调')data_dict=req.POST.dict()print('data',data_dict)if data_dict.get('trade_status')=='TRADE_SUCCESS':#判断支付是否成功result = visa(data_dict)          #调用验签函数验签print('异步回签字结果', result)if result:#如果验签成功,则更新订单信息#这里写上你自己的更新订单代码 #验签成功后必须返回'sucess',否则支付宝会一直通过POST方式发送验签信息return HttpResponse('success')return HttpResponse('unsuccess')return HttpResponse('unsuccess')elif req.method=='GET':#同步验签#获取支付宝回传参数(字典)        data_dict=req.GET.dict()result=visa(data_dict)                  #调用验签函数验签print('同步回签字结果',result)if result==True:#验签成功则更新订单信息#这里写上你自己的更新订单代码 context={#返回给用户的信息,可自定义                'status':True,'order':data_dict.get('out_trade_no'),        #订单号                'total_amount':data_dict.get('total_amount'), #订单金额'trade_no':data_dict.get('trade_no')          #交易流水号}return render(req,'web/pay_success.html',context)else:return JsonResponse({'status':False})

相关文章:

Django对接支付宝沙箱环境(2024年9月新测有效)

1、申请沙箱环境 #需要填一些个人信息 https://opendocs.alipay.com/ 2、使用支付宝登入,并进入控制台,进入开发者工具推荐-->沙箱 3、获取基本信息 主要是APPID,和支付宝网关地址 4、生成应用私钥和应用公钥和支付宝公钥 上面的接口加签方式选择…...

【MySQL】-- 库的操作

文章目录 1. 查看数据库1.1 语法 2. 创建数据库2.1 语法2.2 示例2.2.1 创建一个名为java114的数据库2.2.2 创建数据库java114,如果数据库不存在则创建2.2.3 查看警告信息 3. 字符集编码和校验(排序)规则3.1 查看数据库支持的字符集编码3.2 查…...

linux桌面软件(wps)内嵌到主窗口后的关闭问题

程序测试环境是:slackware系统,属于linux系统,有桌面(Xface Session)。系统镜像是:slackware64-15.0-install-dvd.iso。qt、c代码实现。 问题描述:延续上一篇文章,将wps软件窗口内嵌…...

WindowsTerminal 美化-壁纸随机更换

目录 一. 相关网址二. 壁纸随机更换思路三. 指定 WindowsTermina 壁纸路径四. 编写脚本,随机替换壁纸4.1 powershell脚本4.2 .bat批处理脚本 四. 配置定时任务,添加触发器五. 效果 一. 相关网址 官方下载 Windows Terminal 官方Github微软商店 美化 Oh …...

iOS 多次获取图片主题色不一样

一个需求中,要求获取图片的主题色 代码如下 -(void)kk_getImage:(UIImage *)image fetchthemeColor:(void(^)(UIColor *color))callBack {dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{// 第一步 先把图片缩小 加快计算速度.…...

UE5 武器IK瞄准系统

创建空项目 创建基础蓝图类My_GameMode,My_HUD,My_PlayChar,My_PlayController 项目设置地图模式 近裁平面 0.1 My_PlayChar蓝图中添加摄像机,角色骨骼网格体,武器骨骼网格体 编辑角色骨骼,预览控制器使用特定动画,动画选择ANM_ark-47-Idle hand_r 添加插槽WeaponMes…...

①EtherCAT转ModbusTCP, EtherCAT/Ethernet/IP/Profinet/ModbusTCP协议互转工业串口网关

EtherCAT/Ethernet/IP/Profinet/ModbusTCP协议互转工业串口网关https://item.taobao.com/item.htm?ftt&id822721028899 协议转换通信网关 EtherCAT 转 ModbusTCP GW系列型号 MS-GW15 简介 MS-GW15 是 EtherCAT 和 Modbus TCP 协议转换网关,为用户提供一种 …...

在macOS上进行开发环境配置与应用开发详细的配置指南

在macOS上进行开发环境配置与应用开发,需要遵循一系列步骤来确保你的开发环境既高效又稳定。以下是一个详细的配置指南,涵盖了从安装基本工具到创建应用的整个过程。 1. 安装和更新macOS 首先,确保你的macOS是最新版本。更新系统可以提供更…...

JavaScript 事件处理基础

在网页中添加事件监听器,可以通过JavaScript代码来实现。 要处理用户的交互事件,需要先选择要添加事件监听器的元素,可以使用document.querySelector()或document.getElementById()等方法来获取元素。 然后,使用addEventListene…...

WordPress响应式Git主题响应式CMS主题模板

兼容 IE9、谷歌 Chrome 、火狐 Firefox 等主流浏览器 扁平化的设计加响应式布局,兼容电脑、和各个尺寸手机的完美响应 主题设置面板新增多种AD位,PC端和移动设备各不相同 在主题设置选项中就可以进行基本的SEO设置:首页、分类、文章等页面…...

Solidity 设计模式:实现灵活与可扩展的智能合约架构

Solidity 作为以太坊智能合约的主要编程语言,拥有许多独特的设计模式,这些模式帮助开发者实现更加灵活、可扩展和安全的合约架构。设计模式不仅能够简化开发过程,还能减少常见的编程错误,并提高智能合约的可维护性和可升级性。本文…...

房屋水电费:重新布局,重构JS代码

<!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>房租水电费</title><script type"…...

Jmeter生成JWT token

JWT简介 JWT官网&#xff1a;https://jwt.io/ JSON Web令牌&#xff08;JWT&#xff09;是一个开放标准&#xff08;RFC 7519&#xff09;&#xff0c;它定义了一种紧凑而自包含的方式&#xff0c;用于在各方之间以JSON对象的形式安全地传输信息。此信息可以验证和信任&#x…...

STM32的ADC技术详解

ADC&#xff08;Analog-to-Digital Converter&#xff0c;模数转换器&#xff09; 是将连续的模拟信号转换为离散的数字信号的关键组件。在STM32系列微控制器中&#xff0c;ADC广泛应用于传感器数据采集、信号处理和控制系统等领域。本文将详细介绍STM32的ADC技术&#xff0c;包…...

PySpark把一列数据上下移动,时序数据

在Pandas中&#xff0c;我们用.shift()把数据框上下移动。 在 PySpark 中&#xff0c;确实存在一个类似于 Pandas 中 shift 函数的功能&#xff0c;它被称为 shiftleft 函数。这个函数用于将给定的值向左移动指定的位数。不过&#xff0c;这与 Pandas 中的 shift 函数有所不同…...

网络基础 【HTTPS】

&#x1f493;博主CSDN主页:麻辣韭菜&#x1f493;   ⏩专栏分类&#xff1a;Linux初窥门径⏪   &#x1f69a;代码仓库:Linux代码练习&#x1f69a; &#x1f4bb;操作环境&#xff1a; CentOS 7.6 华为云远程服务器 &#x1f339;关注我&#x1faf5;带你学习更多Linux知识…...

51单片机的红外感应洗手器【proteus仿真+程序+报告+原理图+演示视频】

1、主要功能 该系统由AT89C51/STC89C52单片机红外感应传感器继电器LED等模块构成。适用于智能红外感应自动洗手器等相似项目。 可实现功能: 1、红外感应传感器实时检测是否有人体接近&#xff08;距离小于20cm&#xff09; 2、如果有人靠近&#xff0c;继电器自动闭合&#…...

【11】纯血鸿蒙HarmonyOS NEXT星河版开发0基础学习笔记-模块化语法与自定义组件

序言&#xff1a; 本文详细讲解了关于鸿蒙系统学习中的模块化语法与自定义组件&#xff0c;在模块化语法中我们学习到了多种导入导出方式&#xff0c;实现了在一个项目中&#xff0c;通过引用不同的组件&#xff0c;让我们整体代码的可读性更强&#xff0c;相当于我们把一个手…...

Angular 客户端渲染时,从 ng-state 里读取 SSR 状态的具体逻辑

Angular 在客户端启动时&#xff0c;如何检测页面中的 ng-state 标签并从中读取 JSON 对象&#xff0c;进而还原应用的状态&#xff0c;是服务器端渲染&#xff08;SSR&#xff09;与客户端渲染&#xff08;CSR&#xff09;无缝衔接的核心环节之一。为了理解这个过程&#xff0…...

C++的联合体union

联合体有点像class类型或者struct类型&#xff0c;只不过它一次只占用一个成员的内存。 通常我们有一个结构体&#xff0c;声明了4个浮点数&#xff0c;那么结构体中就有4*416字节。当我们不断向类或者结构体中添加成员时&#xff0c;其大小也会不断增大。 union只有一个成员…...

JavaScript 中的变量作用域

JavaScript 中的变量作用域 在 JavaScript 中&#xff0c;理解变量作用域是非常重要的&#xff0c;它决定了变量的可见性和生命周期。本文将深入探讨 JavaScript 中的变量作用域&#xff0c;帮助你更好地掌握这一关键概念。 一、什么是变量作用域&#xff1f; 变量作用域指的…...

【C++】二叉搜索树+变身 = 红黑树

&#x1f680;个人主页&#xff1a;小羊 &#x1f680;所属专栏&#xff1a;C 很荣幸您能阅读我的文章&#xff0c;诚请评论指点&#xff0c;欢迎欢迎 ~ 目录 前言一、定义与性质二、红黑树节点的定义三、新增节点插入四、验证红黑树五、AVL树和红黑树比较 前言 本文仅适合了…...

万界星空科技MES数据集成平台

制造执行系统MES作为连接企业上层ERP系统和现场控制系统的桥梁&#xff0c;承担了实时数据采集、处理、分析和传递的重要任务。MES数据集成平台是一个集成各类数据源&#xff0c;将数据进行整合和统一管理的系统&#xff0c;通过提供标准化接口和协议&#xff0c;实现数据的无缝…...

Ajax和axios简单用法

Ajax Ajax&#xff08;Asynchronous JavaScript And XML&#xff0c;异步的JavaScript和XML&#xff09;。 作用是&#xff1a; 数据交换&#xff1a;通过Ajax可以给服务器发送请求&#xff0c;并获取服务器响应的数据。异步交互&#xff1a;可以在不重新加载整个页面的情况…...

Chillax2024.08.01 |免费的白噪音软件

支持多种声音叠加&#xff0c;单独调整音量&#xff0c;定时功能&#xff0c;完全免费。 大小&#xff1a;13.5M 百度网盘&#xff1a;https://pan.baidu.com/s/1dWpdYoO1bPCnHR1bXpTZEg?pwdolxt 夸克网盘&#xff1a;https://pan.quark.cn/s/89dc88c56e26 移动网盘&#xff…...

Python自动化办公:从Excel到PDF生成的全流程

解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 在现代办公环境中,数据处理和报表生成是日常工作中非常重要的一环。Python作为一门灵活且功能强大的编程语言,能够通过一系列开源库实现办公自动化。本文将详细讲解如何使用Python实现从Excel数据处理到生成PDF…...

allegro 不同页面相同网路的连接

一、cadence学习笔记&#xff08;1&#xff09;-原理图库制作 绘制好各个界面 放置OFFPAGE 绘制好单个界面是这个样子的&#xff0c;并将剩下的界面进行相同的操作 所有界面完成后&#xff0c;进入设计界面 右键design1.dsn选择Annotate… 点击OK后可以看到WiFi界面OFFPAGE旁边…...

医院管理新趋势:Spring Boot技术引领

4系统概要设计 4.1概述 本系统采用B/S结构(Browser/Server,浏览器/服务器结构)和基于Web服务两种模式&#xff0c;是一个适用于Internet环境下的模型结构。只要用户能连上Internet,便可以在任何时间、任何地点使用。系统工作原理图如图4-1所示&#xff1a; 图4-1系统工作原理…...

Java 新手教程!面向对象设计一口气讲完![]~( ̄▽ ̄)~*(中)

目录 Java 内部类 Java面向对象的设计 - Java 内部类 什么是内部类&#xff1f; 例子 使用内部类的优点 访问局部变量的限制 内部类和继承 内部类中没有静态成员 生成的内部类的类文件 静态上下文中的内类 Java 内部类类型 Java面向对象设计 - Java内部类类型 成员内…...

驰骋低代码功能升级 - 实体功能权限控制

1. 权限控制升级概述 新增功能&#xff1a;对新建、保存、删除、归档、撤销归档等操作的按钮进行精细化的权限控制。展示位置&#xff1a;这些权限控制体现在查询页面和实体卡片页面的工具栏按钮上。 2. 权限控制方式 新建 0. 不控制&#xff1a;任何人都可以新建。1. 指定岗…...