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

***php进行支付宝开发中return_url和notify_url的区别分析

本文实例分析了php进行支付宝开发中return_url和notify_url的区别。分享给大家供大家参考。具体分析如下:

在支付宝处理业务中return_url,notify_url是返回些什么状态呢,我们要根据它来做一些处理就必须了解return_url,notify_url的区别,下面我就来给大家介绍介绍.

问题描述:

我在处理支付宝业务中出现过这样的问题,付费完成后,在支付宝跳转到商家指定页面时,订单状态已经更新,通过调试发现是支付宝先通知notify_url,完成了订单状态.

支付宝return_url和notify_url通知顺序问题:

顺序不一定的,请别以先后顺序来做判断,具体如何判断,是根据您当前数据库里的状态和刚从支付宝里获取到的状态做对比来判断是否有做过处理了.

关于支付宝return_url和notify_url的区别,同步通知页面特性(return_url特性):

(1) 买家在支付成功后会看到一个支付宝提示交易成功的页面,该页面会停留几秒,然后会自动跳转回商户指定的同步通知页面(参数return_url);

(2) 该页面中获得参数的方式,需要使用GET方式获取,如request.QueryString("out_trade_no")、$_GET['out_trade_no'];

(3) 该方式仅仅在买家付款完成以后进行自动跳转,因此只会进行一次;

(4) 该方式不是支付宝主动去调用商户页面,而是支付宝的程序利用页面自动跳转的函数,使用户的当前页面自动跳转;

(5) 基于(4)的原因,可在本机而不是只能在服务器上进行调试;

(6) 返回URL只有一分钟的有效期,超过一分钟该链接地址会失效,验证则会失败;

(7) 设置页面跳转同步通知页面(return_url)的路径时,不要在页面文件的后面再加上自定义参数。例如:

错误的写法:

代码如下:
<http://www.alipay.com/alipay/return_url.php?xx=11>

 

正确的写法:

代码如下:
<http://www.alipay.com/alipay/return_url.php>

 

服务器异步通知页面特性(notify_url特性):

(1) 必须保证服务器异步通知页面(notify_url)上无任何字符,如空格、HTML标签、开发系统自带抛出的异常提示信息等;

(2) 支付宝是用POST方式发送通知信息,因此该页面中获取参数的方式,如:

request.Form("out_trade_no")、$_POST['out_trade_no']。

(3) 支付宝主动发起通知,该方式才会被启用;

(4) 只有在支付宝的交易管理中存在该笔交易,且发生了交易状态的改变,支付宝才会通过该方式发起服务器通知(即时到账中交易状态为“等待买家付款”的状态默认是不会发送通知的);

(5) 服务器间的交互,不像页面跳转同步通知可以在页面上显示出来,这种交互方式是不可见的;

(6) 第一次交易状态改变(即时到账中此时交易状态是交易完成)时,不仅页面跳转同步通知页面会启用,而且服务器异步通知页面也会收到支付宝发来的处理结果通知;

(7) 程序执行完后必须打印输出“success”(不包含引号)。如果商户反馈给支付宝的字符不是success这7个字符,支付宝服务器会不断重发通知,直到超过24小时22分钟。

一般情况下,25小时以内完成8次通知(通知的间隔频率一般是:2m,10m,10m,1h,2h,6h,15h);

(8) 程序执行完成后,该页面不能执行页面跳转。如果执行页面跳转,支付宝会收不到success字符,会被支付宝服务器判定为该页面程序运行出现异常,而重发处理结果通知;

(9) cookies、session等在此页面会失效,即无法获取这些数据;

(10) 该方式的调试与运行必须在服务器上,即互联网上能访问;

(11) 该方式的作用主要防止订单丢失,即页面跳转同步通知没有处理订单更新,它则去处理;

(12) 通知ID(参数notify_id)只有一分钟有效期,超过一分钟该次通知会验证失败。一旦验证成功下次再验证就会失效。

希望本文所述对大家的php程序设计有所帮助。

相关文章:

  • freemarker网页静态化
  • Lucene解析 - 基本概念
  • git日常使用经验积累
  • 十六周四次课
  • CSS重置, 批量设置指定所有类型控件的CSS风格
  • 全民链郑宇谈区块链电商:和传统公司合作,“去中心化”提都不要提
  • 系统目录结构、ls命令、文件类型、alias命令
  • 京东八年架构师: Redis 如何分布式,金融的设计原理
  • oracle添加序列
  • Linux中常见文件类型及文件系统类型
  • Zabbix latest data页面500错误解决
  • 【凯子哥带你夯实应用层】使用ActionMode实现有删除动画的多选删除功能
  • Purism发布Librem 5 Linux手机文档
  • centos7 安装 elasticsearch-6.2.4
  • Kubernetes 1.10和Cross-Cloud CI Project Dashboard 1.3释放,Kubernetes发布用户调查
  • Android组件 - 收藏集 - 掘金
  • const let
  • HTTP请求重发
  • Javascript设计模式学习之Observer(观察者)模式
  • Objective-C 中关联引用的概念
  • Python实现BT种子转化为磁力链接【实战】
  • React-flux杂记
  • Storybook 5.0正式发布:有史以来变化最大的版本\n
  • Terraform入门 - 1. 安装Terraform
  • Vue ES6 Jade Scss Webpack Gulp
  • Vue.js-Day01
  • 电商搜索引擎的架构设计和性能优化
  • 关于for循环的简单归纳
  • 七牛云假注销小指南
  • 如何在GitHub上创建个人博客
  • 设计模式走一遍---观察者模式
  • 通过来模仿稀土掘金个人页面的布局来学习使用CoordinatorLayout
  • 学习JavaScript数据结构与算法 — 树
  • 《天龙八部3D》Unity技术方案揭秘
  • #define与typedef区别
  • #我与Java虚拟机的故事#连载01:人在JVM,身不由己
  • $分析了六十多年间100万字的政府工作报告,我看到了这样的变迁
  • (Matlab)使用竞争神经网络实现数据聚类
  • (第二周)效能测试
  • (个人笔记质量不佳)SQL 左连接、右连接、内连接的区别
  • (没学懂,待填坑)【动态规划】数位动态规划
  • (七)MySQL是如何将LRU链表的使用性能优化到极致的?
  • (顺序)容器的好伴侣 --- 容器适配器
  • (一)eclipse Dynamic web project 工程目录以及文件路径问题
  • (转)Spring4.2.5+Hibernate4.3.11+Struts1.3.8集成方案一
  • (自适应手机端)响应式新闻博客知识类pbootcms网站模板 自媒体运营博客网站源码下载
  • .chm格式文件如何阅读
  • .gitignore文件—git忽略文件
  • .NET 2.0中新增的一些TryGet,TryParse等方法
  • .net core 控制台应用程序读取配置文件app.config
  • .net core使用RPC方式进行高效的HTTP服务访问
  • .NET 的静态构造函数是否线程安全?答案是肯定的!
  • .NET 中使用 Mutex 进行跨越进程边界的同步
  • .NET/C# 在代码中测量代码执行耗时的建议(比较系统性能计数器和系统时间)
  • .NET处理HTTP请求