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函数之error_reporting(E_ALL ^ E_NOTICE)详细说明
Jul 01 PHP
PHP中PDO的错误处理
Sep 04 PHP
利用php绘制饼状图的实现代码
Jun 07 PHP
PHP获取客户端真实IP地址的5种情况分析和实现代码
Jul 08 PHP
php实现的返回数据格式化类实例
Sep 22 PHP
简单谈谈php中的unicode和utf8编码
Jun 10 PHP
php数据访问之增删改查操作
May 09 PHP
Yii核心验证器api详解
Nov 23 PHP
使用PHPMailer发送邮件实例
Feb 15 PHP
老生常谈php 正则中的i,m,s,x,e分别表示什么
Mar 02 PHP
php判断str字符串是否是xml格式数据的方法示例
Jul 26 PHP
PHP PDOStatement::fetchColumn讲解
Jan 31 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
关于PHPDocument 代码注释规范的总结
2013/06/25 PHP
php7函数,声明,返回值等新特性介绍
2018/05/25 PHP
IE浏览器兼容Firefox的JS脚本的代码
2008/10/23 Javascript
Javascript的构造函数和constructor属性
2010/01/09 Javascript
javascript中的array数组使用技巧
2010/01/31 Javascript
JS前端框架关于重构的失败经验分享
2013/03/17 Javascript
在js文件中如何获取basePath处理js路径问题
2013/07/10 Javascript
jquery实现文字由下到上循环滚动的实例代码
2013/08/09 Javascript
利用进制转换压缩数字函数分享
2014/01/02 Javascript
js 立即调用的函数表达式如何写
2014/01/12 Javascript
director.js实现前端路由使用实例
2015/02/03 Javascript
必备的JS调试技巧汇总
2016/07/20 Javascript
iview实现select tree树形下拉框的示例代码
2018/12/21 Javascript
vue实现密码显示与隐藏按钮的自定义组件功能
2019/04/23 Javascript
原生js实现密码强度验证功能
2020/03/18 Javascript
浅谈JavaScript中this的指向更改
2020/07/28 Javascript
Vue 解决通过this.$refs来获取DOM或者组件报错问题
2020/07/28 Javascript
python实现中文转换url编码的方法
2016/06/14 Python
简单谈谈Python中的json与pickle
2017/07/19 Python
彻底理解Python中的yield关键字
2019/04/01 Python
Python Datetime模块和Calendar模块用法实例分析
2019/04/15 Python
tensorflow通过模型文件,使用tensorboard查看其模型图Graph方式
2020/01/23 Python
详解Python设计模式之策略模式
2020/06/15 Python
利用html5的websocket实现websocket聊天室
2013/12/12 HTML / CSS
《少年王勃》教学反思
2014/04/27 职场文书
2014年预备党员端正入党动机思想汇报
2014/09/13 职场文书
2014教师专业技术工作总结
2014/12/03 职场文书
2015年社区平安建设工作总结
2015/05/13 职场文书
2015年税务稽查工作总结
2015/05/26 职场文书
2016春季校长开学典礼致辞
2015/11/26 职场文书
幼师自荐信范文(2016推荐篇)
2016/01/28 职场文书
2019 入党申请书范文
2019/07/10 职场文书
什么是求职信?求职信应包含哪些内容?
2019/08/14 职场文书
SQL注入的实现以及防范示例详解
2021/06/02 MySQL
关于CentOS 8 搭建MongoDB4.4分片集群的问题
2021/10/24 MongoDB
MySQL事务操作的四大特性以及并发事务问题
2022/04/12 MySQL