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学习笔记之二
Jan 17 PHP
PHP表单验证的3个函数ISSET()、empty()、is_numeric()的使用方法
Aug 22 PHP
解析PHP工厂模式的好处
Jun 18 PHP
PHP 获取文件权限函数介绍
Jul 11 PHP
跟我学Laravel之请求(Request)的生命周期
Oct 15 PHP
PHP IDE PHPStorm配置支持友好Laravel代码提示方法
May 12 PHP
在PHP语言中使用JSON和将json还原成数组的方法
Jul 19 PHP
基于 Swoole 的微信扫码登录功能实现代码
Jan 15 PHP
PHP长连接实现与使用方法详解
Feb 11 PHP
Laravel 5+ .env环境配置文件详解
Apr 06 PHP
PHP 自动加载类原理与用法实例分析
Apr 14 PHP
PHP Web表单生成器案例分析
Jun 02 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文件上传实例详解!!!
2007/01/02 PHP
基于php常用正则表达式的整理汇总
2013/06/08 PHP
ThinkPHP内置jsonRPC的缺陷分析
2014/12/18 PHP
php将图片文件转换成二进制输出的方法
2015/06/10 PHP
PHP判断来访是搜索引擎蜘蛛还是普通用户的代码小结
2015/09/14 PHP
CodeIgniter连贯操作的底层原理分析
2016/05/17 PHP
PHP读书笔记_运算符详解
2016/07/01 PHP
ThinkPHP实现转换数据库查询结果数据到对应类型的方法
2017/11/16 PHP
PHP 7.4中使用预加载的方法详解
2019/07/08 PHP
解决laravel groupBy 对查询结果进行分组出现的问题
2019/10/09 PHP
javascript prototype 原型链
2009/03/12 Javascript
DIV菜单层实现代码
2010/11/19 Javascript
判断文件是否正在被使用的JS代码
2013/12/21 Javascript
iframe实用操作锦集
2014/04/22 Javascript
JS实现超炫网页烟花动画效果的方法
2015/03/02 Javascript
JavaScript让Textarea支持tab按键的方法
2015/06/26 Javascript
AngularJS ng-repeat数组有重复值的解决方法
2016/10/23 Javascript
JavaScript实现时钟滴答声效果
2017/01/29 Javascript
富文本编辑器vue2-editor实现全屏功能
2019/05/26 Javascript
微信小程序之下拉列表实现方法解析(附完整源码)
2019/08/23 Javascript
vue 动态组件用法示例小结
2020/03/06 Javascript
基于Vue全局组件与局部组件的区别说明
2020/08/11 Javascript
wxpython中自定义事件的实现与使用方法分析
2016/07/21 Python
Python面向对象之Web静态服务器
2019/09/03 Python
Python发送邮件的实例代码讲解
2019/10/16 Python
Python configparser模块配置文件过程解析
2020/03/03 Python
中国最大的团购网站:聚划算
2016/09/21 全球购物
瑞典灯具和照明网上商店:Lamp24.se
2018/03/17 全球购物
Python里面如何拷贝一个对象
2014/02/17 面试题
如何做好总经理助理
2013/11/12 职场文书
房地产促销活动方案
2014/03/01 职场文书
机械设备与数控技术专业求职信
2014/08/10 职场文书
考研导师推荐信范文
2015/03/27 职场文书
宾馆前台接待岗位职责
2015/04/02 职场文书
法定代表人身份证明书
2015/06/18 职场文书
《云雀的心愿》教学反思
2016/02/23 职场文书