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 05 PHP
PHP下几种删除目录的方法总结
Aug 19 PHP
PHP下用rmdir实现删除目录的三种方法小结
Apr 20 PHP
PHPMailer安装方法及简单实例
Nov 25 PHP
PHP 日常开发小技巧
Sep 23 PHP
PHP获取数组最大值下标的方法
May 12 PHP
php强制用户转向www域名的方法
Jun 19 PHP
php链表用法实例分析
Jul 09 PHP
php实现Session存储到Redis
Nov 11 PHP
PHP生成和获取XML格式数据的方法
Mar 04 PHP
PHP编程获取图片的主色调的方法【基于Imagick扩展】
Aug 02 PHP
php+js实现点赞功能的示例详解
Aug 07 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 array_map()数组函数使用说明
2011/07/12 PHP
组合算法的PHP解答方法
2012/02/04 PHP
基于PHP字符串的比较函数strcmp()与strcasecmp()的使用详解
2013/05/15 PHP
PHP-Java-Bridge使用笔记
2014/09/22 PHP
PHP实现基于面向对象的mysqli扩展库增删改查操作工具类
2017/07/18 PHP
php实现根据身份证获取精准年龄
2020/02/26 PHP
兼容IE和Firefox火狐的上下、左右循环无间断滚动JS代码
2013/04/19 Javascript
apply和call方法定义及apply和call方法的区别
2015/11/15 Javascript
vue构建单页面应用实战
2017/04/10 Javascript
详解JavaScript数组过滤相同元素的5种方法
2017/05/23 Javascript
Easyui和zTree两种方式分别实现树形下拉框
2017/08/04 Javascript
React Native react-navigation 导航使用详解
2017/12/01 Javascript
详解nodejs 配置文件处理方案
2019/01/02 NodeJs
教你完全理解ReentrantLock重入锁
2019/06/03 Javascript
js中比较两个对象是否相同的方法示例
2019/09/02 Javascript
关于vue里页面的缓存详解
2019/11/04 Javascript
js实现图片实时时钟
2020/01/15 Javascript
python计算程序开始到程序结束的运行时间和程序运行的CPU时间
2013/11/28 Python
通过C++学习Python
2015/01/20 Python
Python贪吃蛇游戏编写代码
2020/10/26 Python
安装Python和pygame及相应的环境变量配置(图文教程)
2017/06/04 Python
神经网络python源码分享
2017/12/15 Python
Python实现的FTP通信客户端与服务器端功能示例
2018/03/28 Python
python 删除非空文件夹的实例
2018/04/26 Python
通过Pandas读取大文件的实例
2018/06/07 Python
在PyTorch中Tensor的查找和筛选例子
2019/08/18 Python
详解Python 中sys.stdin.readline()的用法
2019/09/12 Python
如何解决django-celery启动后迅速关闭
2019/10/16 Python
在Python中使用MongoEngine操作数据库教程实例
2019/12/03 Python
pymysql的简单封装代码实例
2020/01/08 Python
CSS3 animation ? steps 函数详解
2019/08/30 HTML / CSS
美国现代家具购物网站:LexMod
2019/01/09 全球购物
2013届毕业生求职信范文
2013/11/20 职场文书
优秀教师主要事迹材料
2015/11/04 职场文书
2016年小学优秀班主任事迹材料
2016/02/29 职场文书
pycharm代码删除恢复的方法
2021/06/26 Python