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 数组教程 定义数组
Oct 23 PHP
PHP与SQL注入攻击防范小技巧
Sep 16 PHP
基于PHP中的常用函数回顾
Jul 11 PHP
CodeIgniter使用phpcms模板引擎
Nov 12 PHP
PHP扩展模块memcached长连接使用方法分析
Dec 24 PHP
php面向对象中static静态属性和静态方法的调用
Feb 08 PHP
PHP使用Face++接口开发微信公众平台人脸识别系统的方法
Apr 17 PHP
yii2.0实现验证用户名与邮箱功能
Dec 22 PHP
PHP针对多用户实现更换头像功能
Sep 04 PHP
PHP面向对象程序设计之多态性的应用示例
Dec 19 PHP
smarty模板的使用方法实例分析
Sep 18 PHP
PHP code 验证码生成类定义和简单使用示例
May 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
西德产收音机
2021/03/01 无线电
基于PHP创建Cookie数组的详解
2013/07/03 PHP
ThinkPHP自动填充实现无限级分类的方法
2014/08/22 PHP
Laravel 5框架学习之向视图传送数据(进阶篇)
2015/04/08 PHP
php Session无效分析资料整理
2016/11/29 PHP
PHP安装memcache扩展的步骤讲解
2019/02/14 PHP
innerHTML,outerHTML,innerTEXT三者之间的区别
2007/01/28 Javascript
2007/12/23更新创意无限,简单实用(javascript log)
2007/12/24 Javascript
javascript动态加载实现方法一
2012/08/22 Javascript
JSON 数字排序多字段排序介绍
2013/09/18 Javascript
Jquery利用mouseenter和mouseleave实现鼠标经过弹出层且可以点击
2014/02/12 Javascript
浅谈setTimeout 与 setInterval
2015/06/23 Javascript
jquery实现图片预加载
2015/12/25 Javascript
Bootstrap轮播插件中图片变形的终极解决方案 使用jqthumb.js
2016/07/10 Javascript
js手机号批量滚动抽奖实现代码
2020/04/17 Javascript
jQuery插件echarts设置折线图中折线线条颜色和折线点颜色的方法
2017/03/03 Javascript
JS简单实现获取元素的封装操作示例
2017/04/07 Javascript
JS实现新建文件夹功能
2017/06/17 Javascript
使用Dropzone.js上传的示例代码
2017/10/10 Javascript
React Native中Mobx的使用方法详解
2018/12/04 Javascript
es6函数之尾递归用法实例分析
2020/04/25 Javascript
[02:17]DOTA2亚洲邀请赛 RAVE战队出场宣传片
2015/02/07 DOTA
使用Python3中的gettext模块翻译Python源码以支持多语言
2015/03/31 Python
在Python的列表中利用remove()方法删除元素的教程
2015/05/21 Python
浅谈Python数据类型判断及列表脚本操作
2016/11/04 Python
Python调用钉钉自定义机器人的实现
2020/01/03 Python
Python读取yaml文件的详细教程
2020/07/21 Python
详解html5页面 rem 布局适配方法
2018/01/12 HTML / CSS
土木工程应届生求职信
2013/10/31 职场文书
后勤岗位职责
2013/11/26 职场文书
教师业务学习制度
2014/01/25 职场文书
村干部培训班主持词
2014/03/28 职场文书
车辆转让协议书
2014/04/15 职场文书
2014院党委领导班子及其成员群众路线对照检查材料思想汇报
2014/10/04 职场文书
入党积极分子自我批评思想汇报
2014/10/10 职场文书
Mysql效率优化定位较低sql的两种方式
2021/05/26 MySQL