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

python实现支付宝异步回调验签

说明

python实现支付宝异步回调验签,示例中使用Django框架。
此方案使用了支付宝的pythonSDK,请一定装最新版本的,支付宝官网文档不知道多久没更新了,之前的版本pip安装会报一些c++库不存在的错误;

	pip install alipay-sdk-python==3.7.156

验签核心代码

from alipay.aop.api.util.SignatureUtils import verify_with_rsa#支付宝公钥
publicKey = ''def check_alipay_sign(request):"""验签:param request::return:"""sign = request.get('sign')  # 取出传过来的签#待签名字符串org_message = get_dic_sorted_params(request)# 转换成字节串message = bytes(org_message, encoding='utf-8')print(message)try:# 调用验签函数status = verify_with_rsa(publicKey, message, sign)return statusexcept Exception as e:print(f"Exception during signature verification: {e}")return False# 接收字典类型参数,去除sign、sign_type字段,转换成升序字符串
def get_dic_sorted_params(org_dic_params):content = ''org_dic_params.pop('sign')org_dic_params.pop('sign_type')                      # 去除sign、sigh_typenew_list = sorted(org_dic_params, reverse=False)     # 待验签参数进行排序for i in new_list:p = i+'='+ org_dic_params.get(i)+'&'content += psorted_params = content.strip('&')                   # 重组字符串,将{k:v}形式的字典类型原始响应值--》转换成'k1=v1&k2=v2'形式的字符串格式return sorted_params

djgano 调用

验签成功返回 SUCCESS,支付宝将将停止此订单的异步推送否则将会一共推送8次。

class alipayCallback(APIView):authentication_classes = []def post(self, request):"""支付宝支付回调- 内部订单号: request.POST.get('out_trade_no')- 交易状态: request.POST.get('trade_status') [TRADE_FINISHED:交易完结;TRADE_CLOSED:交易关闭;TRADE_SUCCESS:支付成功;WAIT_BUYER_PAY:交易创建]- 产品名称: request.POST.get('subject')- 总金额: request.POST.get('total_amount')- 实付金额: request.POST.get('buyer_pay_amount'):param request::return:"""orderId = str(request.POST.get('out_trade_no'))userId = orderId[orderId.index("#")+1:]print("内部订单号" + request.POST.get('out_trade_no'))print("订单号" + request.POST.get('trade_no'))  # 平台生成的订单号print("交易状态" + request.POST.get('trade_status'))print("产品名称" + request.POST.get('subject'))print("总金额" + request.POST.get('total_amount'))print("实付金额" + request.POST.get('buyer_pay_amount'))print(request.POST.dict())#验签 防止伪造请求if check_alipay_sign(request.POST.dict()):print("验签成功")"""# TODO 判断支付状态,订单状态修改                """return HttpResponse("SUCCESS")else:print("未支付成功!")return HttpResponse("未支付成功")else:print("验签失败")return HttpResponse("验签失败")
http://www.lryc.cn/news/390966.html

相关文章:

  • 注意!Vue.js 或 Nuxt.js 中请停止使用.value
  • Java:JDK、JRE和JVM 三者关系
  • Radio专业术语笔记
  • cocosCreator找出未用到的图片
  • 一览 Anoma 上的有趣应用概念
  • Spring Boot集成fastjson2快速入门Demo
  • Three.js机器人与星系动态场景(二):强化三维空间认识
  • java顺序查找
  • 提升学生职务执行力的智慧校园学工管理策略
  • 系统运维面试总结(shell编程)
  • 在数据库中,什么是主码、候选码、主属性、非主属性?
  • Linux-笔记 udev机制介绍
  • 深度学习基准模型Mamba
  • 面试专区|【40道移动端测试高频题整理(附答案背诵版)】
  • vb6多线程异步,VB.NET 全用API实现:CreateThread创建多线程,等待线程完成任务
  • Python中计算一个序列中特点值出现的数量,比如 [0,0,0,1,1,0,0,]中1的数量
  • gitignore
  • Adobe Premiere 视频编辑软件下载安装,pr全系列分享 轻松编辑视频
  • 大屏开发系列——Echarts的基础使用
  • 指挥中心操作台的形状及空间布局
  • Linux源码阅读笔记07-进程管理4大常用API函数
  • 后端之路第三站(Mybatis)——JDBC跟Mybatis、lombok
  • 零基础入门怎么学习老挝语字母表?《老挝语翻译通》App真人发音教学,学习老挝语字母发音和词汇句子!
  • linux深度deepin基于rsync和apt-mirror同步软件源及构建本地内网源
  • 场景管理分析平台介绍
  • SQL Server和Oracle数据库的实时同步
  • Python中使用Oracle向量数据库实现文本检索系统
  • java考试题20道
  • 云仓的优势体现在哪里?
  • github 设置中文,亲测有效