python支付宝支付和回调

embedded/2024/10/25 4:05:23/

创建支付订单

logging.basicConfig(level=logging.INFO,format='%(asctime)s %(levelname)s %(message)s',filemode='a',)
logger = logging.getLogger('')if __name__ == '__main__':"""设置配置,包括支付宝网关地址、app_id、应用私钥、支付宝公钥等,其他配置值可以查看AlipayClientConfig的定义。"""alipay_client_config = AlipayClientConfig()alipay_client_config.server_url = 'https://openapi.alipay.com/gateway.do'alipay_client_config.app_id = '[your app_id]'alipay_client_config.app_private_key = '[your app private key]'alipay_client_config.alipay_public_key = '[alipay public key]'"""得到客户端对象。注意,一个alipay_client_config对象对应一个DefaultAlipayClient,定义DefaultAlipayClient对象后,alipay_client_config不得修改,如果想使用不同的配置,请定义不同的DefaultAlipayClient。logger参数用于打印日志,不传则不打印,建议传递。"""client = DefaultAlipayClient(alipay_client_config=alipay_client_config, logger=logger)"""系统接口示例:alipay.trade.pay"""# 对照接口文档,构造请求对象model = AlipayTradePayModel()model.auth_code = "282877775259787048"model.body = "Iphone6 16G"goods_list = list()goods1 = GoodsDetail()goods1.goods_id = "apple-01"goods1.goods_name = "ipad"goods1.price = 10goods1.quantity = 1goods_list.append(goods1)model.goods_detail = goods_listmodel.operator_id = "yx_001"model.out_trade_no = "20180510AB014"model.product_code = "FACE_TO_FACE_PAYMENT"model.scene = "bar_code"model.store_id = ""model.subject = "huabeitest"model.timeout_express = "90m"model.total_amount = 1request = AlipayTradePayRequest(biz_model=model)# 如果有auth_token、app_auth_token等其他公共参数,放在udf_params中# udf_params = dict()# from alipay.aop.api.constant.ParamConstants import *# udf_params[P_APP_AUTH_TOKEN] = "xxxxxxx"# request.udf_params = udf_params# 执行请求,执行过程中如果发生异常,会抛出,请打印异常栈response_content = Nonetry:response_content = client.execute(request)except Exception as e:print(traceback.format_exc())if not response_content:print("failed execute")else:response = AlipayTradePayResponse()# 解析响应结果response.parse_response_content(response_content)print(response.body)if response.is_success():# 如果业务成功,则通过respnse属性获取需要的值print("get response trade_no:" + response.trade_no)else:# 如果业务失败,则从错误码中可以得知错误情况,具体错误码信息可以查看接口文档print(response.code + "," + response.msg + "," + response.sub_code + "," + response.sub_msg)

回调验证签名

from alipay.aop.api.util.SignatureUtils import verify_with_rsa# 支付宝公钥
alipay_public_key = '你的支付公钥'# 待签名字符串需要做升序处理,且去除sign和sign_type
org_message = '返回的body'# 转换成字节串
message = bytes(org_message, encoding='utf-8')# 返回的sign值(需要base64解码,python中sign解码封装在了verify_with_rsa方法中)
sign = 'body中截取的sign'# 签名方法
data= verify_with_rsa(alipay_public_key, message, sign)# 输出验签结果
print(data)try:# 处理支付成功的逻辑if data.get('trade_status') == 'TRADE_SUCCESS':order_no = data.get('out_trade_no')# 查询订单 对订单进行更新等操作return JSONResponse(status_code=200,content={'code': 1, 'msg': '支付成功'})# 处理支付失败的逻辑elif data.get('trade_status') in ['TRADE_CLOSED', 'TRADE_FINISHED']:order_no = data.get('out_trade_no')# 支付失败的对订单更新操作return JSONResponse(status_code=200,content={'code': 1, 'msg': '支付失败'})

http://www.ppmy.cn/embedded/132233.html

相关文章

【优选算法篇】在分割中追寻秩序:二分查找的智慧轨迹

文章目录 C 二分查找详解:基础题解与思维分析前言第一章:热身练习1.1 二分查找基本实现解题思路图解分析C代码实现易错点提示代码解读 1.2 在排序数组中查找元素的第一个和最后一个位置解题思路1.2.1 查找左边界算法步骤:图解分析C代码实现 1…

3.1.1ReactOS系统中搜索给定长度的空间地址区间函数的实现

系列文章目录 //搜索给定长度的空间地址区间 MmFindGap(); PMADDRESS_SPACE AddressSpace,//该进程用户空间 ULONG_PTR Length,//寻找的空间间隔大小 ULONG_PTR Granularity,//粒度位,表明空间起点的对齐要求,注意是起…

时序数据库 TDengine 支持集成开源的物联网平台 ThingsBoard

Thingsboard 中“设备配置”和“设备”的关系是一对多的关系,通过设备配置为每个设备设置不同的配置,每个设备都会有一个与其关联的设备配置文件。等等,这不就是TDengine 中超级表的概念: 超级表是一种特殊的表结构,用…

针对 el-date picker pickerOptions 快捷选项的超级方法

提供快捷的配置,支持原子组合,高级用法支持用户自定义配置项 demo import { generateShortCuts } from ./date-shortcuts.js ... pickerOptions: {shortcuts: generateShortCuts({type: day}) } ...date-shortcuts 文件 import moment from moment // …

vue使用 jsplumb 生成流程图

1、安装jsPlumb: npm install jsplumb 2、 在使用的 .vue 文件中引入 import { jsPlumb } from "jsplumb"; 简单示例: 注意:注意看 id 为"item-3"和"item-9"那条数据的连线配置 其中有几个小图片&#x…

银河麒麟(debian)下安装postgresql、postgis

1、安装postgresql、postgis sudo apt update sudo apt install postgresql postgresql-contrib sudo apt install postgis postgresql-12-postgis-32、创建一个使用postgis的数据库 sudo -i -u postgres #postgres管理员用户createdb gisdb #创建新的gisdb数据库 psql -d gi…

Mac ARM 本地运行 Mini-Omni 记录

Mini-Omni是一个开源的多模态大型语言模型,可以听、说和思考。具有实时端到端语音输入和流式音频输出的对话能力。Github 安装 conda miniconda 安装 执行 # 创建一个python环境 conda create -n omni python3.10 conda activate omni# clone项目 git clone http…

react18中如何监听localstorage的变化获取最新的本地缓存

有时候业务中会需要监听缓存的变化,实时更新页面的内容获取发送接口请求。这就要我们来监听对localstorage的修改,实时响应变化!!一下方法同样实用于vue项目。 同一个项目中不同页面的实现 实现效果 代码分析 修改localstoare的…