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 相关文章推荐
漂亮但不安全的CTB
Oct 09 PHP
PHP 和 XML: 使用expat函数(一)
Oct 09 PHP
一个PHP日历程序
Dec 06 PHP
15种PHP Encoder的比较
Mar 06 PHP
Cakephp 执行主要流程
Mar 24 PHP
安装apache2.2.22配置php5.4(具体操作步骤)
Jun 26 PHP
PHP包含文件函数include、include_once、require、require_once区别总结
Apr 05 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(九)
Jun 24 PHP
PHP永久登录、记住我功能实现方法和安全做法
Apr 27 PHP
thinkPHP多域名情况下使用memcache方式共享session数据的实现方法
Jul 21 PHP
PHP 断点续传实例详解
Nov 11 PHP
PHP代码覆盖率统计详解
Jul 22 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
数据库相关问题
2006/10/09 PHP
php判断目录存在的简单方法
2019/09/26 PHP
JavaScript 创建对象和构造类实现代码
2009/07/30 Javascript
为jQuery增加join方法的实现代码
2010/11/28 Javascript
Jquery读取URL参数小例子
2013/08/30 Javascript
JavaScript字符串对象split方法入门实例(用于把字符串分割成数组)
2014/10/16 Javascript
javascript的变量、传值、传址、参数之间关系
2015/07/26 Javascript
jquery.fastLiveFilter.js实现输入自动过滤的方法
2015/08/11 Javascript
angularJS Provider、factory、service详解及实例代码
2016/09/21 Javascript
JS实现重新加载当前页面或者父页面的几种方法
2016/11/30 Javascript
javascript完美实现给定日期返回上月日期的方法
2017/06/15 Javascript
js防刷新的倒计时代码 js倒计时代码
2017/09/06 Javascript
五步轻松实现JavaScript HTML时钟效果
2020/03/25 Javascript
原生JS实现多个小球碰撞反弹效果示例
2018/01/31 Javascript
快速处理vue渲染前的显示问题
2018/03/05 Javascript
解决vue跨域axios异步通信问题
2019/04/17 Javascript
微信小程序页面间传递数组对象方法解析
2019/11/06 Javascript
vue 组件销毁并重置的实现
2020/01/13 Javascript
js实现无缝轮播图
2020/03/09 Javascript
python 写入csv乱码问题解决方法
2016/10/23 Python
Pycharm学习教程(6) Pycharm作为Vim编辑器使用
2017/05/03 Python
Python标准库笔记struct模块的使用
2018/02/22 Python
python实现图片转字符小工具
2019/04/30 Python
基于Python实现船舶的MMSI的获取(推荐)
2019/10/21 Python
python FTP批量下载/删除/上传实例
2019/12/22 Python
HTML5 canvas标签实现刮刮卡效果
2015/04/24 HTML / CSS
办公文员的工作岗位职责
2013/11/12 职场文书
网上卖盒饭创业计划书
2014/01/26 职场文书
合伙经营协议书范本
2014/04/18 职场文书
《夕阳真美》教学反思
2014/04/27 职场文书
自强之星事迹材料
2014/05/12 职场文书
莫言诺贝尔获奖演讲稿
2014/05/21 职场文书
高中班级口号
2014/06/09 职场文书
SQL Server代理:理解SQL代理错误日志处理方法
2021/06/30 SQL Server
vue的项目如何打包上线
2022/04/13 Vue.js
收音机爱好者玩机13年,简评其使用过的19台收音机
2022/04/30 无线电