APP (UniAPP) 微信支付回调的 HTTP_RAW_POST_DATA 报错情况 (wxpayv3)

2024-06-07 17:18

本文主要是介绍APP (UniAPP) 微信支付回调的 HTTP_RAW_POST_DATA 报错情况 (wxpayv3),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

背景描述

  • 当前我在学习 Uniapp 的应用开发,使用的是 Uniapp 官方提供的 服务端PHP源码

根据 微信支付文档-回调通知注意事项可知,支付成功后,回调地址所返回的报文必须是xml格式

  • 从一众路径所知的回调方法中,很多会涉及到这样一句代码
$xml = $GLOBALS['HTTP_RAW_POST_DATA'];

But: PHP7+ 中已经移除了这个全局变量,所以请用 php://input 替代,否则得到数据为空

  • 于是代码优化为:
	$xml = isset($GLOBALS['HTTP_RAW_POST_DATA'])? $GLOBALS['HTTP_RAW_POST_DATA'] : file_get_contents("php://input");

源码参考

   /*** 微信支付回调* @param Request $request*/public function wxNotify(Request $request){//TODO 此代码 是因为 php7之后的版本中已经弃用 HTTP_RAW_POST_DATA,所以...$xml=isset($GLOBALS['HTTP_RAW_POST_DATA'])? $GLOBALS['HTTP_RAW_POST_DATA'] : file_get_contents("php://input");//将服务器返回的XML数据转化为数组$data = self::xml2array($xml);if (($data['return_code'] == 'SUCCESS') && ($data['result_code'] == 'SUCCESS')) {//获取服务器返回的数据$out_trade_no = $data['out_trade_no'];            //订单单号$data['timestamp'] = date("Y-m-d H:i:s");$json_str_notify = json_encode($data);//TODO 此时可以根据自己的业务逻辑 进行数据库更新操作if ($out_trade_no){//个人业务需求,支付订单号有所设定而已$order_sn = explode("W",$out_trade_no)[0];$orderInfoModel = new XorderInfos();$orderInfoModel->updatePayResultForNotify($order_sn, 0,$json_str_notify);}}}/*** 将xml转为array* @param  string $xml xml字符串* @return array    转换得到的数组*/protected function xml2array($xml){//禁止引用外部xml实体libxml_disable_entity_loader(true);$result = json_decode(json_encode(simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA)), true);return $result;}
  • 为方便后期的退款操作,存入数据表中的格式参考:

{"appid":"wxdd8xxxxxxxxxxx30","bank_type":"CFT","cash_fee":"1","fee_type":"CNY","is_subscribe":"N","mch_id":"1538257171","nonce_str":"8m348zzmez4o52mt6rzjds6rri836840","openid":"ozBhy5j_xxxxxxxxxxxxxxxxx5w","out_trade_no":"201906122044331501W103158","result_code":"SUCCESS","return_code":"SUCCESS","sign":"CBBC7A6B82A22B72F6CDC393AB88E52F","time_end":"20190613150556","total_fee":"1","trade_type":"APP","transaction_id":"4200000327201906131737890110","timestamp":"2019-06-13 15:05:57"}

参考文章:

  1. 关于php://input、$_POST、$HTTP_RAW_POST_DATA的理解及区别
  2. 微信支付遇到的大坑 WxpayAPI_php_v3

这篇关于APP (UniAPP) 微信支付回调的 HTTP_RAW_POST_DATA 报错情况 (wxpayv3)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1039799

相关文章

解决1093 - You can‘t specify target table报错问题及原因分析

《解决1093-Youcan‘tspecifytargettable报错问题及原因分析》MySQL1093错误因UPDATE/DELETE语句的FROM子句直接引用目标表或嵌套子查询导致,... 目录报js错原因分析具体原因解决办法方法一:使用临时表方法二:使用JOIN方法三:使用EXISTS示例总结报错原

Spring Boot 结合 WxJava 实现文章上传微信公众号草稿箱与群发

《SpringBoot结合WxJava实现文章上传微信公众号草稿箱与群发》本文将详细介绍如何使用SpringBoot框架结合WxJava开发工具包,实现文章上传到微信公众号草稿箱以及群发功能,... 目录一、项目环境准备1.1 开发环境1.2 微信公众号准备二、Spring Boot 项目搭建2.1 创建

java向微信服务号发送消息的完整步骤实例

《java向微信服务号发送消息的完整步骤实例》:本文主要介绍java向微信服务号发送消息的相关资料,包括申请测试号获取appID/appsecret、关注公众号获取openID、配置消息模板及代码... 目录步骤1. 申请测试系统2. 公众号账号信息3. 关注测试号二维码4. 消息模板接口5. Java测试

springboot如何通过http动态操作xxl-job任务

《springboot如何通过http动态操作xxl-job任务》:本文主要介绍springboot如何通过http动态操作xxl-job任务的问题,具有很好的参考价值,希望对大家有所帮助,如有错... 目录springboot通过http动态操作xxl-job任务一、maven依赖二、配置文件三、xxl-

qt5cored.dll报错怎么解决? 电脑qt5cored.dll文件丢失修复技巧

《qt5cored.dll报错怎么解决?电脑qt5cored.dll文件丢失修复技巧》在进行软件安装或运行程序时,有时会遇到由于找不到qt5core.dll,无法继续执行代码,这个问题可能是由于该文... 遇到qt5cored.dll文件错误时,可能会导致基于 Qt 开发的应用程序无法正常运行或启动。这种错

Maven 配置中的 <mirror>绕过 HTTP 阻断机制的方法

《Maven配置中的<mirror>绕过HTTP阻断机制的方法》:本文主要介绍Maven配置中的<mirror>绕过HTTP阻断机制的方法,本文给大家分享问题原因及解决方案,感兴趣的朋友一... 目录一、问题场景:升级 Maven 后构建失败二、解决方案:通过 <mirror> 配置覆盖默认行为1. 配置示

Python基于微信OCR引擎实现高效图片文字识别

《Python基于微信OCR引擎实现高效图片文字识别》这篇文章主要为大家详细介绍了一款基于微信OCR引擎的图片文字识别桌面应用开发全过程,可以实现从图片拖拽识别到文字提取,感兴趣的小伙伴可以跟随小编一... 目录一、项目概述1.1 开发背景1.2 技术选型1.3 核心优势二、功能详解2.1 核心功能模块2.

Linux中修改Apache HTTP Server(httpd)默认端口的完整指南

《Linux中修改ApacheHTTPServer(httpd)默认端口的完整指南》ApacheHTTPServer(简称httpd)是Linux系统中最常用的Web服务器之一,本文将详细介绍如何... 目录一、修改 httpd 默认端口的步骤1. 查找 httpd 配置文件路径2. 编辑配置文件3. 保存

MySQL启动报错:InnoDB表空间丢失问题及解决方法

《MySQL启动报错:InnoDB表空间丢失问题及解决方法》在启动MySQL时,遇到了InnoDB:Tablespace5975wasnotfound,该错误表明MySQL在启动过程中无法找到指定的s... 目录mysql 启动报错:InnoDB 表空间丢失问题及解决方法错误分析解决方案1. 启用 inno

如何基于Python开发一个微信自动化工具

《如何基于Python开发一个微信自动化工具》在当今数字化办公场景中,自动化工具已成为提升工作效率的利器,本文将深入剖析一个基于Python的微信自动化工具开发全过程,有需要的小伙伴可以了解下... 目录概述功能全景1. 核心功能模块2. 特色功能效果展示1. 主界面概览2. 定时任务配置3. 操作日志演示