返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >支付宝异步通知说明
  • 448
分享到

支付宝异步通知说明

phpjavajvm 2023-09-21 07:09:30 448人浏览 独家记忆
摘要

如何设置异步通知地址 不同接口接收异步通知设置方式不同,可查看 哪些接口支持触发异步。 设置 notify_url 接收异步 对于支付产生的交易,支付宝会根据原始支付 api 中传入的异步通知地址 notify_url,通过 POST 请求

如何设置异步通知地址

不同接口接收异步通知设置方式不同,可查看 哪些接口支持触发异步

设置 notify_url 接收异步

对于支付产生的交易,支付宝会根据原始支付 api 中传入的异步通知地址 notify_url,通过 POST 请求的形式将支付结果作为参数通知到商家系统,接口调用 SDK 设置 notify_url 传参方式如下。

Alipay SDK(老版)

//Java版:request.setNotifyUrl("商家自己的notify_url地址");//PHP版:$request->setNotifyUrl("商家自己的notify_url地址");//.net版:request.SetNotifyUrl("商家自己的notify_url地址");//python版本:request.notify_url="商家自己的notify_url地址"//node.js版:fORMData.addField('notifyUrl', '商家自己的notify_url地址');

Alipay Easy SDK(新版)

目前 Alipay Easy SDK 只支持 Java、PHP、.Net 语言,因此只有该 3 种语言有设置 notify_url 方式。

//Java版:Factory.Payment.FaceToFace()    // 调用asyncNotify扩展方法,可以为每次API调用,设置独立的异步商家自己的notify_url地址");    //PHP版:Factory::payment()->FaceToFace()    // 调用asyncNotify扩展方法,可以为每次API调用,设置独立的异步通知地址    // 此处设置的异步通知地址的优先级高于全局Config中配置的异步通知地址    ->asyncNotify("商家自己的notify_url地址");   //.net版:Factory.Payment.FaceToFace()    // 调用AsyncNotify扩展方法,可以为每此API调用,设置独立的异步通知地址    // 此处设置的异步通知地址的优先级高于全局Config中配置的异步通知地址    .AsyncNotify("商加自己的notify_url地址");

From 蚂蚁订阅接收异步

生活号、口碑、现金红包、单笔转账接口等异步通知发送到对应 APPID 应用的应用网关中,通过 POST 请求的形式将支付结果作为参数通知到商家系统。

如何接收可查看各产品文档上的异步说明。

异步通知返回参数介绍

支付宝查看支付宝开放平台文档中各接口的异步通知参数的详细说明。

以 App 支付为例,返回的异步通知参数如下(以下示例报文仅供参考,实际返回的详细报文请以实际返回为准)。

total_amount=2.00&buyer_id=20****7&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=20151*****3&seller_id=20881021****8¬ify_id=4a91b7a78a503640467525113fb7d8bg8e

异步通知验签

验签流程

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

验签步骤

  1. 在通知返回参数列表中,除去 sign、sign_type 两个参数外,凡是通知返回回来的参数皆是待验签的参数。将剩下参数进行 url_decode,然后进行字典排序,组成字符串,得到待签名字符串;
    生活号异步通知组成的待验签串里需要保留 sign_type 参数。
  2. 将签名参数(sign)使用 base64 解码为字节码串;
  3. 使用 RSA 的验签方法,通过签名字符串、签名参数(经过 base64 解码)及支付宝公钥验证签名。
  4. 验证签名正确后,必须再严格按照如下描述校验通知数据的正确性。

在上述验证通过后,商家必须根据支付宝不同类型的业务通知,正确的进行不同的业务处理,并且过滤重复的通知结果数据。

注意:

  • 在支付宝的业务通知中,只有交易通知状态为 TRADE_SUCCESS 或 TRADE_FINISHED 时,支付宝才会认定为买家付款成功。
  • 如果签约的产品支持退款,并且对应的产品默认支持能收到 TRADE_SUCCESS 或 TRADE_FINISHED 状态,该笔交易会先收到 TRADE_SUCCESS 交易状态,然后默认12个月该笔交易会再次收到 TRADE_FINISHED 状态。实际该笔交易只支付了一次,切勿认为该笔交易支付两次。

接口响应

收到异步通知后,商家输出 success 表示消息获取成功,支付宝就会停止发送异步,如果输出 fail,表示消息获取失败,支付宝会重新发送消息到异步地址。

建议在接收异步进行验签,如果验签成功输出 success,验签失败返回 fail,重新接收异步进行处理。

响应值描述是否重试
fail消息获取失败重试
success消息获取成功不重试

异步通知交易状态介绍

目前支付产品的交易状态大致分以下4种:

  • WAIT_BUYER_PAY:交易创建,等待买家付款。
  • TRADE_CLOSED:在指定时间段内未支付时关闭的交易或在交易完成全额退款成功时关闭的交易。
  • TRADE_SUCCESS:商家签约的产品支持退款功能的前提下,买家付款成功。
  • TRADE_FINISHED:商家签约的产品不支持退款功能的前提下,买家付款成功。或者,商家签约的产品支持退款功能的前提下,交易已经成功并且已经超过可退款期限。

无法接收异步通知如何处理

收不到回调原因

  • 异步通知发送地址错误。notify_url、授权回调地址、应用网关地址弄混了。
  • 异步地址无法公网访问。
  • 异步地址设置方式错误。notify_url 传参,From 蚂蚁消息设置地址方式。
  • 接口默认不触发相关的状态数据通知。
  • 其实已经收到(其实是验签失败返回为空),但是没有做日志记录或者没有记录到通知。

核实异步地址是否正常

  • 可通过目前提供的 云排查日志 查询对应交易的异步回调数据内容。
  • 模拟 post 方式把云排查日志查询到的数据发送到接收异步回调页面,看异步页面能否正常接收到 post 发送过来的数据。
  • 根据设置异步方式不同,可参考:

为什么重复收到异步通知

重复收到异步通知主要是由于未返回 success 或异步通知不是同一个触发条件导致。

未返回 success

每当交易状态改变时,服务器异步通知页面就会收到支付宝发来的处理结果通知,程序执行完后必须打印输出 success,可通过 云排查 查询是否返回支付宝 success。

如果商家反馈给支付宝的字符不是 success 这 7 个字符,支付宝服务器会不断重发通知,直到超过 24 小时 22 分钟。一般情况下,25 小时以内完成 8 次通知(通知的间隔频率一般是:4m、10m、1h、2h、6h、15h)。

返回 success 示例代码

以下仅展示 Java、PHP、.NET 语言的示例,其它开发语言也是直接输出 success 即可。

JAVA

out.print("success");

PHP

echo "success";

.NET

Response.Write("success");

直接访问你的异步页面应该是输出(如下图)中的 success 这 7 个字符。

注意:浏览器上点击查看页面源代码,看到的是这个 7 个字符,有空格或者其它字符都会导致重复收到通知(建议大家做一下简单的验证)。

特别注意:返回的是纯文本内容,不要包含 html 等标签。

异步通知不是同一个触发条件

若在已经返回 success 后还会收到支付宝异步回调,请检查通知内容中的触发条件是否是相同的。

如支付产品在交易状态发生改变后,不同交易状态也可能会触发异步。

案例:若退款期限是 12 个月可退款,支付成功后,支付宝会发送 trade_success 的支付成功状态的异步通知,在 12 个月后支付宝会再次发送 trade_finished 的交易结束状态的异步通知,表示交易结束不允许退款。

注意:TRADE_SUCCESS 触发的异步停止后,可能受异步触发条件影响,TRADE_CLOSED 或者 TRADE_FINISHED 也会触发异步。

异步通知的特性

  • 必须保证服务器异步通知页面(notify_url)上无任何字符,如空格、HTML 标签、开发系统自带抛出的异常提示信息等。
  • 支付宝是用  POST 方式发送通知信息,因此该页面中获取参数的方式,如:request.Form(out_trade_no)、$_POST[out_trade_no]。
  • 支付宝主动发起通知,该方式才会被启用。
  • 只有在支付宝的交易管理中存在该笔交易,且发生了交易状态的改变,支付宝才会通过该方式发起服务器通知(即时到账交易状态为 等待买家付款 的状态默认是不会发送通知的)。
  • 该方式的调试与运行必须在服务器上,即互联网上能访问。而且服务器间的交互不像页面跳转同步通知可以在页面上显示出来,这种交互方式是不可见的。
  • 第一次交易状态改变(即时到账中此时交易状态是交易完成)时,不仅会返回同步处理结果,而且服务器异步通知页面也会收到支付宝发来的处理结果通知。
  • 程序执行完后必须打印输出 success。如果商家反馈给支付宝的字符不是 success 这 7 个字符,支付宝服务器会不断重发通知,直到超过 24 小时 22 分钟。一般情况下,25 小时以内完成 8 次通知(通知的间隔频率一般是:4m,10m,10m,1h,2h,6h,15h) 。
  • 程序执行完成后,该页面不能执行页面跳转。如果执行页面跳转,支付宝会收不到 success 字符,会被支付宝服务器判定为该页面程序运行出现异常,而重发处理结果通知。
  • cookies、session 等在此页面会失效,即无法获取这些数据。
  • 该方式的作用主要防止订单丢失,即页面跳转同步通知没有处理订单更新,它则去处理。
  • 当商家收到服务器异步通知并打印出 success 时,服务器异步通知参数 notify_id 才会失效。也就是说在支付宝发送同一条异步通知时(包含商家并未成功打印出 success 导致支付宝重发数次通知),服务器异步通知参数 notify_id 是不变的。
  • 异步通知 header 是 Content-Type:application/x-www-form-urlencoded; text/html; charset=utf-8 ,不是按照 RFC2183 RFC1521 标准来的。

来源地址:https://blog.csdn.net/weixin_64051447/article/details/130403250

--结束END--

本文标题: 支付宝异步通知说明

本文链接: https://lsjlt.com/news/413673.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 支付宝异步通知说明
    如何设置异步通知地址 不同接口接收异步通知设置方式不同,可查看 哪些接口支持触发异步。 设置 notify_url 接收异步 对于支付产生的交易,支付宝会根据原始支付 API 中传入的异步通知地址 notify_url,通过 POST 请求...
    99+
    2023-09-21
    php java jvm
  • PHP 实现支付宝APP 支付 (服务端 + 客户端 + 异步)
    目录 一、使用实例 二、服务端 1.下载SDK 2.业务层 3.业务层返回实例 推荐使用联调工具: 4.回调层 三、客户端 总结 一、使用实例 官方信息: 二、服务端 1.下载SDK App 支付服务端 DEMO&...
    99+
    2023-09-18
    python pandas php mysql thinkphp
  • 详细介绍PHP支付宝支付步骤
    在如今的电商时代,支付宝无疑是备受消费者欢迎的支付方式之一。如果你是一名 PHP 开发者,可能会需要为自己的网站添加支付宝支付功能。下面将详细介绍 PHP 支付宝支付步骤。注册支付宝账号首先,你必须拥有一个可用的支付宝账户,该账户将用于向你...
    99+
    2023-05-14
  • PHP支付宝当面付异步回调如何实现验签
    众所周知,支付宝当面付的f2pay目录提供了如何获取当面付二维码的方法,但是没有异步回调的实例,所以本文章将介绍如果使用sdk达到验签的方法 支付宝官方提供的SDK入口文件为根目录的 AopSdk...
    99+
    2023-08-31
    php 开发语言 服务器
  • DedeCMS V5.6 支付接口调整说明
    离线升级包下载:http://updatenew.dedecms.com/downloads/patch0514.tar.gz 同时用户也可以通过后台进行更新升级(不过我们还是建议通过离线更新的方式),不过后台...
    99+
    2022-06-12
    支付接口
  • Golang实现支付宝沙箱支付的方法步骤
    首先我使用的是 gin 作为我的后端框架,我们先设定好几个接口。 func main() { r := gin.Default() r.GET("/pay", too...
    99+
    2023-05-16
    Golang 支付宝沙箱支付 Golang 支付宝支付
  • java对接支付宝支付接口开发详细步骤
    目录第一步第二步第三步第四步对接支付宝支付接口,官方文档已经写的很清楚了,但是也有很多像我一样的小白,第一次对接支付宝支付接口,会有些迷茫,所以我在此写下这篇文章,给我和我一样的同学...
    99+
    2024-04-02
  • 微信支付、支付宝支付等常用第三方支付通道接口手续费对比
    目录一、支付市场的份额二、支付手续费与限额三、常用第三方支付通道接口手续费对比支付宝支付接口费率:微信支付接口费率:QQ钱包支付接口费率:银联支付接口费率:京东支付接口费率:通联代付...
    99+
    2023-01-28
    微信支付手续费 支付宝手续费 银联支付手续费 第三方支付手续费
  • SpringAOP四种通知类型+环绕通知说明
    目录一、四种常见的通知类型注意二、环绕通知1、改动日志类 Logger.java2、改动配置文件分析AOP机制之环绕通知的见解其中有五个通知类型SpringAOP的四种通知类型:前置...
    99+
    2024-04-02
  • RabbitMQ延迟队列如何实现订单支付结果异步阶梯性通知
    小编给大家分享一下RabbitMQ延迟队列如何实现订单支付结果异步阶梯性通知,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!在第三方支付中,例如支付宝、或者微信,对于订单请求,第三方支付系统采用的是消息同步返回、异步通知+主...
    99+
    2023-06-29
  • 苹果支付v2 通知(订阅/退款回调通知)
    苹果v2 通知相比v1 减少了一次再次请求服务器验证,但是JWS 格式本人接触较少,翻阅了资料大概搞懂苹果整个验签流程。 如下   use Firebase\JWT\JWT;use Firebase\JWT\Key;use Firebase...
    99+
    2023-09-03
    1024程序员节 php 开发语言
  • 苹果(apple)支付退款通知、api
    苹果(apple)支付退款通知、api 背景: 用户在使用苹果支付购买商品后,可以直接像苹果申请退款,如果申请成功将导致商户直接构成损失。甚至某网络平台有这种专门薅羊毛的店铺,低价出售虚拟商品,再申请退款。所以有必要对用户发起的退款订单做及...
    99+
    2023-08-20
    java 后端 ios json
  • Android通过支付宝进行刷脸认证
    Android通过支付宝进行刷脸认证 官方文档快速接入 一、简介 支付宝刷脸认证是通过支付宝人脸识别进行身份校验,主要包括三个模块身份认证初始化...
    99+
    2022-06-06
    支付宝 Android
  • 支付宝开放平台2.0签名、验签失败以及PHP-SDK使用说明
    前言: 你一定像我一样对支付流程还算熟悉,但打死不从头阅读文档(逐字逐句理解),还对过往的经验沾沾自喜、盲目自大,造成验签失败! 如果你用心再看一遍官方文档,那么接下来的内容不看也罢。仅对接支付接口。 版本、版本、版本,问题在版本对应上: ...
    99+
    2023-08-31
    php 开发语言
  • RabbitMQ 延迟队列实现订单支付结果异步阶梯性通知(实例代码)
    在第三方支付中,例如支付宝、或者微信,对于订单请求,第三方支付系统采用的是消息同步返回、异步通知+主动补偿查询的补偿机制。 由于互联网通信的不可靠性,例如双方网络、服务器、应用等因素...
    99+
    2024-04-02
  • 快手快币支付宝微信双端h5游戏通道对接易支付插件
    目前支付方案大概就两种,一种是申请官方接口另外一种就是个人收款方案代表是码支付,现在码支付貌似已经挂了,当然市面上还有类似码支付的解决方案,本文不做探讨,官方接口申请需要企业资质,有一定的门槛,由于前段时间手上一个项目,用到了一些大厂的接口...
    99+
    2023-10-06
    php
  • 购买云服务器怎么开通支付宝账户
    首先,让我们了解一下如何开通支付宝云服务器。在购买云服务器之前,您需要选择合适的服务器提供商。通常,选择一个可靠的服务器提供商是非常重要的。选择服务器提供商时,您需要考虑以下几个因素: 服务器的硬件配置:服务器的硬件配置是指服务器的处理...
    99+
    2023-10-28
    支付宝 账户 服务器
  • 购买云服务器怎么开通支付宝账号
    一、购买云服务器 购买云服务器是购买阿里云的产品。您需要在淘宝或者天猫平台上搜索“云服务器”或者“阿里云服务器”,找到您需要的云服务器品牌和型号,然后下单购买。下单后,您需要填写订单信息、付款信息和物流信息等,等待阿里云的工作人员为您发货...
    99+
    2023-10-28
    支付宝 账号 服务器
  • php异步通知如何实现
    这篇文章主要介绍“php异步通知如何实现”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“php异步通知如何实现”文章能帮助大家解决问题。PHP异步通知是指通过异步方式与另一个系统进行通信并实现数据的实...
    99+
    2023-07-05
  • php异步通知怎么实现
    在PHP中实现异步通知可以通过以下两种方式: 使用curl发送异步请求:在接收到请求后,使用curl函数发送一个异步请求到指定的处...
    99+
    2023-10-27
    php
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作