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 var_dump遍历对象属性的函数与应用代码
Jun 04 PHP
php Smarty初体验二 获取配置信息
Aug 08 PHP
php自动加载机制的深入分析
Jun 08 PHP
浅析SVN常见问题及解决方法
Jun 21 PHP
解决PHP4.0 和 PHP5.0类构造函数的兼容问题
Aug 01 PHP
关于PHP的curl开启问题探讨
Apr 08 PHP
apache中为php 设置虚拟目录
Dec 17 PHP
php通过sort()函数给数组排序的方法
Mar 18 PHP
基于php的微信公众平台开发入门实例
Apr 15 PHP
微信支付开发订单查询实例
Jul 12 PHP
PHP生成(支持多模板)二维码海报代码
Apr 30 PHP
PHP设计模式之适配器模式(Adapter)原理与用法详解
Dec 12 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递归调用的小技巧讲解
2013/02/19 PHP
探讨PHP使用eAccelerator的API开发详解
2013/06/09 PHP
PHP中加速、缓存扩展的区别和作用详解(eAccelerator、memcached、xcache、APC )
2016/07/09 PHP
javascript实现的鼠标链接提示效果生成器代码
2007/06/28 Javascript
Tips 带三角可关闭的文字提示
2010/10/06 Javascript
iframe 父窗口和子窗口相互的调用方法集锦
2010/12/15 Javascript
JS替换文本域内的回车示例
2014/02/18 Javascript
window.open 以post方式传递参数示例代码
2014/02/27 Javascript
Jquery原生态实现表格header头随滚动条滚动而滚动
2014/03/18 Javascript
jQuery选择器全集详解
2014/11/24 Javascript
JS实现鼠标箭头变成一个燃烧烛光效果的方法
2015/02/28 Javascript
jQuery操作表单常用控件方法小结
2015/03/23 Javascript
js判断手机端(Android手机还是iPhone手机)
2015/07/22 Javascript
浅析Javascript ES6新增值比较函数Object.is
2016/08/24 Javascript
原生js开发的日历插件
2017/02/04 Javascript
如何理解jQuery中的ajaxSubmit方法
2017/03/13 Javascript
javascript 初学教程及五子棋小程序的简单实现
2017/07/04 Javascript
VUE简单的定时器实时刷新的实现方法
2019/01/20 Javascript
使用webpack搭建pixi.js开发环境
2020/02/12 Javascript
浅谈vue websocket nodeJS 进行实时通信踩到的坑
2020/09/22 NodeJs
[38:38]完美世界DOTA2联赛PWL S3 access vs Rebirth 第二场 12.17
2020/12/18 DOTA
python在windows下实现备份程序实例
2014/07/04 Python
python将unicode转为str的方法
2017/06/21 Python
对python字典元素的添加与修改方法详解
2018/07/06 Python
Python实现查询某个目录下修改时间最新的文件示例
2018/08/29 Python
浅谈Python中eval的强大与危害
2019/03/13 Python
解决pycharm 工具栏Tool中找不到Run manager.py Task的问题
2019/07/01 Python
python画图——实现在图上标注上具体数值的方法
2019/07/08 Python
python中的Elasticsearch操作汇总
2019/10/30 Python
Python Matplotlib绘图基础知识代码解析
2020/08/31 Python
pymongo insert_many 批量插入的实例
2020/12/05 Python
canvas生成带二维码海报的踩坑记录
2019/09/11 HTML / CSS
中软Java笔试题
2012/11/11 面试题
平安建设工作方案
2014/06/02 职场文书
设立有限责任公司出资协议书
2014/11/01 职场文书
2014年挂职干部工作总结
2014/12/06 职场文书