php对微信支付回调处理的方法


Posted in PHP onAugust 23, 2018

应用场景

支付完成后,微信会把相关支付结果和用户信息发送给商户,商户需要接收处理,并返回应答。

对后台通知交互时,如果微信收到商户的应答不是成功或超时,微信认为通知失败,微信会通过一定的策略定期重新发起通知,尽可能提高通知的成功率,但微信不保证通知最终能成功。 (通知频率为15/15/30/180/1800/1800/1800/1800/3600,单位:秒)

注意:同样的通知可能会多次发送给商户系统。商户系统必须能够正确处理重复的通知。

推荐的做法是,当收到通知进行处理时,首先检查对应业务数据的状态,判断该通知是否已经处理过,如果没有处理过再进行处理,如果处理过直接返回结果成功。在对业务数据进行状态检查和处理之前,要采用数据锁进行并发控制,以避免函数重入造成的数据混乱。

特别提醒:商户系统对于支付结果通知的内容一定要做签名验证,并校验返回的订单金额是否与商户侧的订单金额一致,防止数据泄漏导致出现“假通知”,造成资金损失。

微信支付回调处理分为

1.同步
2.异步

这里微信官方推荐使用 第二种

php对微信回调异步处理

//获取返回的xml
$testxml = file_get_contents("php://input");
//将xml转化为json格式
$jsonxml = json_encode(simplexml_load_string($testxml, 'SimpleXMLElement', LIBXML_NOCDATA));
//转成数组
$result = json_decode($jsonxml, true);
if($result){
     //如果成功返回了
     if($result['return_code'] == 'SUCCESS' && $result['result_code'] == 'SUCCESS'){
     //进行改变订单状态等操作。。。。 
  }
}

本次微信支付返回的xml转化为json格式如下:

{
  "appid": "12345",
  "attach": "pay",
  "bank_type": "CFT",
  "cash_fee": "1",
  "fee_type": "CNY",
  "is_subscribe": "Y",
  "mch_id": "12345",
  "nonce_str": "dZYFpaDYRpF5rwhv",
  "openid": "onhwF1hiutUySKCsrV21A6MCtT5Q",
  "out_trade_no": "SH201808222055598628",
  "result_code": "SUCCESS",
  "return_code": "SUCCESS",
  "sign": "5A019F52BEF1C3A98AE0F1FF29D01574",
  "time_end": "20180822205606",
  "total_fee": "1",
  "trade_type": "MWEB",
  "transaction_id": "4200000171201808221550954201"
}

其中

"result_code": "SUCCESS",
"return_code": "SUCCESS",

是判断用户是否已经支付的依据

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
php预定义常量
Dec 25 PHP
IIS6+PHP5+MySQL5+Zend Optimizer+phpMyAdmin安装配置图文教程 2009年
Jun 08 PHP
PHP小程序自动提交到自助友情连接
Nov 24 PHP
PHP中输出转义JavaScript代码的实现代码
Apr 22 PHP
xml在joomla表单中的应用详解分享
Jul 19 PHP
关于PHP模板Smarty的初级使用方法以及心得分享
Jun 21 PHP
PHP实现简单爬虫的方法
Jul 29 PHP
php通过文件头判断格式的方法
May 28 PHP
php compact 通过变量创建数组
Nov 15 PHP
PHP中类型转换 ,常量,系统常量,魔术常量的详解
Oct 26 PHP
Yii框架中用response保存cookie,用request读取cookie的原理解析
Sep 04 PHP
Laravel 集成微信用户登录和绑定的实现
Dec 27 PHP
PHP封装的验证码工具类定义与用法示例
Aug 22 #PHP
Yii2语言国际化自动配置详解
Aug 22 #PHP
PHP实现负载均衡的加权轮询方法分析
Aug 22 #PHP
PHP实现负载均衡session共享redis缓存操作示例
Aug 22 #PHP
PHP封装的完整分页类示例
Aug 21 #PHP
php代码调试利器firephp安装与使用方法分析
Aug 21 #PHP
CodeIgniter框架钩子机制实现方法【hooks类】
Aug 21 #PHP
You might like
PHP 中的批处理的实现
2007/06/14 PHP
百度工程师讲PHP函数的实现原理及性能分析(一)
2015/05/13 PHP
phpStudy 2016 使用教程详解(支持PHP7)
2017/10/18 PHP
prototype Element学习笔记(篇一)
2008/10/26 Javascript
Javascript var变量隐式声明方法
2009/10/19 Javascript
使用JQuery进行跨域请求
2010/01/25 Javascript
一款js和css代码压缩工具[附JAVA环境配置方法]
2010/04/16 Javascript
用JavaScript对JSON进行模式匹配 (Part 2 - 实现)
2010/07/17 Javascript
JavaScript DOM 编程艺术(第2版)读书笔记(JavaScript的最佳实践)
2013/10/01 Javascript
node.js中的fs.unlink方法使用说明
2014/12/15 Javascript
JS数字抽奖游戏实现方法
2015/05/04 Javascript
理解JavaScript的变量的入门教程
2015/07/07 Javascript
js立即执行函数: (function ( ){})( ) 与 (function ( ){}( )) 有什么区别?
2015/11/18 Javascript
jQuery中on绑定事件后引发的事件冒泡问题如何解决
2016/05/25 Javascript
JavaScript实现url参数转成json形式
2016/09/25 Javascript
JS点击缩略图整屏居中放大图片效果
2017/07/04 Javascript
分享vue.js devtools遇到一系列问题
2017/10/24 Javascript
Bootstrap 实现表格样式、表单布局的实例代码
2018/12/09 Javascript
微信小程序提交form操作示例
2018/12/30 Javascript
vue+element+Java实现批量删除功能
2019/04/08 Javascript
微信公众号生成新浪短网址的实现(快速生成)
2019/08/18 Javascript
js验证账户名是否重复
2020/05/26 Javascript
JS this关键字在ajax中使用出现问题解决方案
2020/07/17 Javascript
利用 JavaScript 实现并发控制的示例代码
2020/12/31 Javascript
如何使用原生Js实现随机点名详解
2021/01/06 Javascript
python基础教程之简单入门说明(变量和控制语言使用方法)
2014/03/25 Python
人工智能最火编程语言 Python大战Java!
2017/11/13 Python
python中@property和property函数常见使用方法示例
2019/10/21 Python
python中sklearn的pipeline模块实例详解
2020/05/21 Python
pandas参数设置的实用小技巧
2020/08/23 Python
CSS3实现类似翻书效果的过渡动画的示例代码
2019/09/06 HTML / CSS
香港万宁官方海外旗舰店:香港健与美连锁店
2018/09/27 全球购物
平安工地汇报材料
2014/08/19 职场文书
2014年物业管理工作总结
2014/11/21 职场文书
2015年高三毕业班班主任工作总结
2015/10/22 职场文书
简单聊聊Golang中defer预计算参数
2022/03/25 Golang