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 相关文章推荐
使用数据库保存session的方法
Oct 09 PHP
从网上搜到的phpwind 0day的代码
Dec 07 PHP
一个典型的PHP分页实例代码分享
Jul 28 PHP
php+html5使用FormData对象提交表单及上传图片的方法
Feb 11 PHP
PHP JSON格式的中文显示问题解决方法
Apr 09 PHP
PHP session文件独占锁引起阻塞问题解决方法
May 12 PHP
PHP面向对象之后期静态绑定功能介绍
May 18 PHP
PHP编写RESTful接口的方法
Feb 21 PHP
php识别翻转iphone拍摄的颠倒图片
May 17 PHP
Windows下wamp php单元测试工具PHPUnit安装及生成日志文件配置方法
May 28 PHP
微信公众平台开发教程⑤ 微信扫码支付模式介绍
Apr 10 PHP
PHP+百度AI OCR文字识别实现了图片的文字识别功能
May 08 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
剧场版动画《PSYCHO-PASS 3 FIRST INSPECTOR》3月27日日本上映!
2020/03/06 日漫
超级简单的php+mysql留言本源码
2009/11/11 PHP
浅谈php安全性需要注意的几点事项
2014/07/17 PHP
js时间日期和毫秒的相互转换
2013/02/22 Javascript
如何使用jQuery Draggable和Droppable实现拖拽功能
2013/07/05 Javascript
使用jQuery实现验证上传图片的格式与大小
2014/12/03 Javascript
jquery实现标题字体变换的滑动门菜单效果
2015/09/07 Javascript
学习javascript面向对象 掌握创建对象的9种方式
2016/01/04 Javascript
Chrome不支持showModalDialog模态对话框和无法返回returnValue问题的解决方法
2016/10/30 Javascript
javaScript嗅探执行神器-sniffer.js
2017/02/14 Javascript
jQuery插件Echarts实现的渐变色柱状图
2017/03/23 jQuery
Vue-Router2.X多种路由实现方式总结
2018/02/09 Javascript
jQuery实现使用sort方法对json数据排序的方法
2018/04/17 jQuery
从vue源码解析Vue.set()和this.$set()
2018/08/30 Javascript
vue-router beforeEach跳转路由验证用户登录状态
2018/12/26 Javascript
spring+angular实现导出excel的实现代码
2019/02/27 Javascript
微信小程序bindtap事件与冒泡阻止详解
2019/08/08 Javascript
React Native登录之指纹登录篇的示例代码
2020/11/03 Javascript
Python函数的周期性执行实现方法
2016/08/13 Python
windows下python和pip安装教程
2018/05/25 Python
Python走楼梯问题解决方法示例
2018/07/25 Python
python使用response.read()接收json数据的实例
2018/12/19 Python
python提取照片坐标信息的实例代码
2019/08/14 Python
如何在python中写hive脚本
2019/11/08 Python
简单了解python filter、map、reduce的区别
2020/01/14 Python
python实现连连看游戏
2020/02/14 Python
浅谈pytorch torch.backends.cudnn设置作用
2020/02/20 Python
Python 如何测试文件是否存在
2020/07/31 Python
python中二分查找法的实现方法
2020/12/06 Python
最好的商品表达自己:Cafepress
2019/09/04 全球购物
奥地利体育网上商店:Gigasport
2019/10/09 全球购物
房地产开盘策划方案
2014/02/10 职场文书
2016年高校自主招生自荐信范文
2015/03/24 职场文书
远程教育集中轮训基层干部培训班学习心得体会
2016/01/09 职场文书
幽默导游词应该怎么写?
2019/08/26 职场文书
Redis 哨兵机制及配置实现
2022/03/25 Redis