支付宝支付成功异步回调验签以及注意事项(附源码)
文章目录
- 1. 吐槽:
- 2. 要注意的点:
- 3. 导入方法(上代码)
1. 吐槽:
做微信支付的时候抽时间去看了支付宝支付,发现支付宝支付好简单,有官方给的SDK直接调用就OK,但是真正做起来才发现实在是太想当然了,微信app支付就那么几个接口,而且输入输出验签都写得很详细,但是支付宝开始做才发现文档实在是太多了,说不定就从哪跳转到了另外一个地方,尤其做到异步调用这里,文档简直不要太不详细,其实最主要就是封装的SDK没有文档,找不到验签的方法.
2. 要注意的点:
notify_url
notify_url = "https://www.xxx.com/****/******/callback/"
,这里的url要注意看你的项目中最后的"/"是否需要加,有的斜杠不加是会报错的异步通知中,要进行sign验签
官方代码基本都是封装到类里的,我找来找去就是找不到那个类,但是找到了它封装的一个
verify_with_rsa(public_key, message, sign) 函数
3. 导入方法(上代码)
from alipay.aop.api.util.SignatureUtils import verify_with_rsadef notify(self, request):"""支付宝内部支付完成后,异步通知到这个接口,返回支付宝状态,同步到数据库中""""""处理不同得参数,必须返回success"""# 我这里是用的Django所以取值使用request.POST,具体怎么取值取决于使用者的框架data = request.POST.dict()# sign, sign_type 都要从数据中取出,否则签名通不过sign, sign_type = data.pop('sign'), data.pop('sign_type')#排序params = sorted(data.items(), key=lambda e: e[0], reverse=False)#拼接成字符串message = "&".join(u"{}={}".format(k, v) for k, v in params).encode()alipay_public_key = settings.alipay_public_keytry:if verify_with_rsa(alipay_public_key.encode('utf-8').decode('utf-8'), message, sign):# 1. 商户需要验证该通知数据中的 out_trade_no 是否为商户系统中创建的订单号# 2. 判断 total_amount 是否确实为该订单的实际金额(即商户订单创建时的金额),# 3. 校验通知中的 seller_id(或者 seller_email ) 是否为 out_trade_no 这笔单据的对应的操作方(有的时候,一个商户可能有多个seller_id/seller_email)# 4. 验证 app_id 是否为该商户本身。上述 1、2、3、4有任何一个验证不通过,则表明本次通知是异常通知,务必忽略。在上述验证通过后商户必须根据支付宝不同类型的业务通知,正确的进行不同的业务处理,并且过滤重复的通知结果数据。在支付宝的业务通知中,只有交易通知状态为 TRADE_SUCCESS 或 TRADE_FINISHED 时,支付宝才会认定为买家付款成功# 1-4的验证需要自己加notify_type = data['notify_type'] # 通知类型trade_status = data['trade_status'] # 订单状态if notify_type == 'trade_status_sync':pay_success = Falseif trade_status == 'TRADE_SUCCESS' or trade_status == 'TRADE_FINISHED':pay_success = Trueif pay_success:# 如果支付成功一定是success这个单词,其他的alipay不认return 'success'return 'failure'else:return 'failure'except:return 'failure'
支付宝支付成功异步回调验签以及注意事项(附源码)相关推荐
- Java微信支付-支付成功异步回调验签
接上一篇Java微信支付-统一下单API,本篇在上篇文章的基础上讲述调用统一下单API用户支付成功之后微信异步回调通知 下文中所需配置.类都在以请查看以上链接内容. 在调用微信支付-统一下单API时, ...
- 微信支付回调 java_Java微信支付-退款成功异步回调验签
/** * 微信支付实现 * * @author: Sun * @create: 2019-10-10 17:54 * @version: v1.0 */ @Service @Slf4j public ...
- php支付宝异步回调验签失败,thinkphp网站支付宝异步回调验签失败问题_PHP开发框架教程...
了解Redis这个核心数据类型_PHP开发框架教程 string字符串tring类型是二进制安全的,即string中可以包含任何数据,Redis 中的普通string采用rawencoding 即原始 ...
- 支付宝支付成功异步通知收不到怎么办?
支付宝支付成功异步通知收不到怎么办? 原因可能是 1)php的扩展curl没有开启 2)异步地址无法公网访问 3)异步地址代码传值错误 4)其实已经收到(其实是验签失败返回为空),但是没有做日志记录或 ...
- 微信支付V3版本回调+验签流程
本文主要是接前面2篇微信V3支付参数准备和微信V3支付整合进项目中的后续之微信支付后的回调. 一.回调验签流程介绍 二.核心流程操作 本文主要是接前面2篇微信V3支付参数准备和微信V3支付整合进项目中 ...
- 项目对接支付宝支付,内网穿透实现监听支付宝的支付成功异步回调通知
调试的话使用支付宝的沙箱环境来进行调试 调试的时候因为是本地调试,没有上线的域名,无法被支付宝的异步回调请求所打到,这种情况下可以使用内网穿透来进行解决 内网穿透步骤: 内网穿透的几个常用软件 1.n ...
- 支付宝(蚂蚁金服开放平台)-支付结果异步通知-验签
问题描述: 按文档https://doc.open.alipay.com/docs/doc.htm?spm=a219a.7629140.0.0.rIlDQO&treeId=204&ar ...
- 支付宝php异步回调,支付宝支付成功之后异步回调处理
/** * alipay_notify.php. * User: lvfk * Date: 2017/10/26 0026 * Time: 13:48 * Desc: 支付宝支付成功异步通知 */ i ...
- luffy-16/订单表设计,立即付款接口/前端,支付成功get回调用户展示,支付成功post回调修改订单状态
这里写目录标题 一.昨日回顾 二.今日内容 1.订单表设计 2.立即付款接口(一堆校验,登录后) 2.1视图类 2.2序列化类 2.3自定义异常类 2.4配置文件 2.5路由 3.立即付款前端 4.支 ...
最新文章
- python字典练习题
- 微软开发x86模拟器,让Windows for ARM能运行x86应用
- 数组引用以避免数组降阶(c++)
- 【Flask】Jinja2之测试器的应用
- APP长期处于后台手机打开多个APP后进程被杀
- Xamarin效果第八篇之视频监控
- kafak消费者从头开始消费(消费者组)
- @Cacheable 指定缓存位置
- icmp的报文,Destination Host Unreachable
- bigdicmal除法精度设置_java中BigDecimal进行加减乘除的基本用法
- c语言求满足不等式的最小值,高手请进,请教一道简单的c语言题!
- 【风格迁移】Neural Style Transfer 神经风格迁移
- PHP依赖注入(DI)和控制反转(IOC)
- 创建Oracle定时任务
- 网线为什么要分A、B类接法?区别是什么?
- python实现虚拟键盘
- linux永久保存环境变量
- 电视机hdr是什么功能
- AARRR(海盗模型)|原理+Python可视化实现
- 随机生成英文字母 php,PHP生成随机英文用户名