关于支付宝异步通知的那些事

简介: 一、如何指定接收异步通知的地址     对于支付产生的交易,支付宝会根据原始支付API中传入的异步通知地址notify_url,通过POST请求的形式将支付结果 作为参数通知到商户系统。     以app支付为例,支付请求中notify_url参数的(如下图):     二、异步通知返回参数介绍     支付宝通过POST请求的形式将支付结果作为参数通知到商户系统。

一、如何指定接收异步通知的地址 

    对于支付产生的交易,支付宝会根据原始支付API中传入的异步通知地址notify_url,通过POST请求的形式将支付结果 作为参数通知到商户系统。 
    以app支付为例,支付请求中notify_url参数的(如下图): 

    



二、异步通知返回参数介绍 

    支付宝通过POST请求的形式将支付结果作为参数通知到商户系统。各接口返回的异步通知参数可能会略有不同,具体请参见支付宝开放平台文档中各接口的异步通知参数的详细说明。 
以app支付为例,返回的异步通知参数如下(以下示例报文仅供参考,实际返回的详细报文请以实际返回为准): 
    复制代码

1
https: //api.xx.com/receive_notify.htm?total_amount=2.00&buyer_id=2088102116773037&body=大乐透2.1&trade_no=2016071921001003030200089909&refund_fee=0.00¬ify_time=2016-07-19 14:10:49&subject=大乐透2.1&sign_type=RSA2&charset=utf-8¬ify_type=trade_status_sync&out_trade_no=0719141034-6418&gmt_close=2016-07-19 14:10:46&gmt_payment=2016-07-19 14:10:47&trade_status=TRADE_SUCCESS&version=1.0&sign=kPbQIjX+xQc8F0/A6/AocELIjhhZnGbcBN6G4MM/HmfWL4ZiHM6fWl5NQhzXJusaklZ1LFuMo+lHQUELAYeugH8LYFvxnNajOvZhuxNFbN2LhF0l/KL8ANtj8oyPM4NN7Qft2kWJTDJUpQOzCzNnV9hDxh5AaT9FPqRS6ZKxnzM=&gmt_create=2016-07-19 14:10:44&app_id=2015102700040153&seller_id=2088102119685838¬ify_id=4a91b7a78a503640467525113fb7d8bg8e


三、异步通知的验签 
    为了帮助开发者调用开放接口,我们提供了开放平台服务端sdk和demo,包含JAVA、PHP和.NET三语言版本,封装了签名&验签、HTTP接口请求等基础功能。为了避免验签出错强烈建议先下载对应语言版本的SDK并引入您的开发工程进行快速接入。 

   
其验签步骤为: 
    第一步: 在通知返回参数列表中,除去sign、sign_type两个参数外,凡是通知返回回来的参数皆是待验签的参数。 
    第二步: 将剩下参数进行url_decode, 然后进行字典排序,组成字符串,得到待签名字符串: 
    第三步: 将签名参数(sign)使用base64解码为字节码串。 
    第四步: 使用RSA的验签方法,通过签名字符串、签名参数(经过base64解码)及支付宝公钥验证签名。 
    第五步:在步骤四验证签名正确后,必须再严格按照如下描述校验通知数据的正确性。 

    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时,支付宝才会认定为买家付款成功。 

四、无法接收到异步通知怎么办 

    自查方案一:[url]https://openclub.alipay.com/read.php?tid=1677&fid=25&page=1[/url]
    自查方案二:[url]https://openclub.alipay.com/read.php?tid=675&fid=2[/url]

五、异步通知中的交易状态介绍 
   请参考这个详情帖子:[url]https://openclub.alipay.com/read.php?tid=1295&fid=25[/url] 

六、为什么会重复不断的收到支付宝的异步通知
 
每当交易状态改变时,服务器异步通知页面就会收到支付宝发来的处理结果通知,程序执行完后必须打印输出success。如果商户反馈给支付宝的字符不是success这7个字符,支付宝服务器会不断重发通知,直到超过24小时22分钟。一般情况下,25小时以内完成8次通知(通知的间隔频率一般是:4m,10m,10m,1h,2h,6h,15h)。 
其中,若退款期限是3个月可退款,支付成功后,支付宝会发送trade_success的支付成功状态的异步通知,在3个月后支付宝会再次发送trade_finished的交易结束状态的异步通知,表示交易结束不允许退款。 

  返回success代码示例: 
   JAVA:复制代码

out.println("success");

 PHP:复制代码

echo "success";

 .NET:复制代码

Response.Write("success");

 其他开发语言也是直接输出success即可 

    直接访问你的异步页面应该是输出(如下图)中的success这7个字符 
注意:浏览器上点击查看页面源代码,看到的是这个7个字符,有空格或者其他字符都会导致重复收到通知(建议大家做一下简单的验证) 
   

目录
相关文章
|
数据采集 API 开发工具
项目支付接入支付宝【沙箱环境】
该博客文章详细介绍了如何在PC端项目中接入支付宝支付功能,特别是在沙箱环境中的配置和实现步骤。文章提供了详细的配置指南,包括获取支付宝公钥和私钥、配置沙箱应用环境、生成密钥、设置服务端代码以及调用支付接口等步骤,并附有相应的代码示例和说明。
项目支付接入支付宝【沙箱环境】
|
域名解析 网络协议 算法
2022阿里云免费SSL证书申请全过程(图文详解)
阿里云SSL证书免费申请流程:先0元支付SSL证书资源包,每个阿里云账号可以一年可以申请20个免费SSL证书,然后域名DNS验证,提交CA审核后就可以下载SSL证书到本地了
51317 4
2022阿里云免费SSL证书申请全过程(图文详解)
|
SQL XML Java
MyBatis-Plus多表关联查询
MyBatis-Plus多表关联查询
1743 0
支付系统30-------支付宝支付---支付成功异步通知----通知参数和通知结果
支付系统30-------支付宝支付---支付成功异步通知----通知参数和通知结果
|
XML 缓存 Java
搞透 IOC、Spring IOC ,看这篇就够了!
本文详细解析了Spring框架的核心内容——IOC(控制反转)及其依赖注入(DI)的实现原理,帮助读者理解如何通过IOC实现组件解耦,提高程序的灵活性和可维护性。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
|
域名解析 网络协议 应用服务中间件
阿里云SSL证书配置(HTTPS证书配置)
该内容是一个关于如何在阿里云上准备和购买SSL证书,以及如何为网站启用HTTPS的步骤指南。首先,需要注册并实名认证阿里云账号,然后在SSL证书控制台选择证书类型、品牌和时长进行购买。申请证书时填写域名信息,并进行DNS验证,这包括在阿里云域名管理板块添加解析记录。完成验证后提交审核,等待证书审核通过并下载Nginx格式的证书文件。最后,将证书配置到网站服务器以启用HTTPS。整个过程涉及账户注册、实名认证、证书购买、DNS设置和证书下载及安装。
8715 1
|
JavaScript 前端开发 开发者
ECMAScript标准
【4月更文挑战第11天】ECMAScript标准
201 1
|
数据采集 存储 消息中间件
iLogtail开源之路
2022年6月底,阿里云iLogtail代码完整开源,正式发布了完整功能的iLogtail社区版。iLogtail作为阿里云SLS官方标配的采集器,多年以来一直稳定服务阿里集团、蚂蚁集团以及众多公有云上的企业客户,目前已经有千万级的安装量,每天采集数十PB的可观测数据,广泛应用于线上监控、问题分析/定位、运营分析、安全分析等多种场景。此次完整开源,iLogtail社区版首次在内核能力上与企业版完全对齐,开发者可以构建出与企业版性能相当的iLogtail云原生可观测性数据采集器。
1464 1
iLogtail开源之路
|
小程序 开发者
关于微信小游戏的备案,你需要的事
关于微信小游戏的备案,你需要的事
689 0
|
PHP
PHP - Laravel 接口请求参数获取(多种方式)
PHP - Laravel 接口请求参数获取(多种方式)
756 0