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

相关文章

idea突然报错Malformed \uxxxx encoding问题及解决

《idea突然报错Malformeduxxxxencoding问题及解决》Maven项目在切换Git分支时报错,提示project元素为描述符根元素,解决方法:删除Maven仓库中的resolv... 目www.chinasem.cn录问题解决方式总结问题idea 上的 maven China编程项目突然报错,是

uni-app小程序项目中实现前端图片压缩实现方式(附详细代码)

《uni-app小程序项目中实现前端图片压缩实现方式(附详细代码)》在uni-app开发中,文件上传和图片处理是很常见的需求,但也经常会遇到各种问题,下面:本文主要介绍uni-app小程序项目中实... 目录方式一:使用<canvas>实现图片压缩(推荐,兼容性好)示例代码(小程序平台):方式二:使用uni

linux查找java项目日志查找报错信息方式

《linux查找java项目日志查找报错信息方式》日志查找定位步骤:进入项目,用tail-f实时跟踪日志,tail-n1000查看末尾1000行,grep搜索关键词或时间,vim内精准查找并高亮定位,... 目录日志查找定位在当前文件里找到报错消息总结日志查找定位1.cd 进入项目2.正常日志 和错误日

Nginx部署HTTP/3的实现步骤

《Nginx部署HTTP/3的实现步骤》本文介绍了在Nginx中部署HTTP/3的详细步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录前提条件第一步:安装必要的依赖库第二步:获取并构建 BoringSSL第三步:获取 Nginx

HTTP 与 SpringBoot 参数提交与接收协议方式

《HTTP与SpringBoot参数提交与接收协议方式》HTTP参数提交方式包括URL查询、表单、JSON/XML、路径变量、头部、Cookie、GraphQL、WebSocket和SSE,依据... 目录HTTP 协议支持多种参数提交方式,主要取决于请求方法(Method)和内容类型(Content-Ty

解决升级JDK报错:module java.base does not“opens java.lang.reflect“to unnamed module问题

《解决升级JDK报错:modulejava.basedoesnot“opensjava.lang.reflect“tounnamedmodule问题》SpringBoot启动错误源于Jav... 目录问题描述原因分析解决方案总结问题描述启动sprintboot时报以下错误原因分析编程异js常是由Ja

Python 基于http.server模块实现简单http服务的代码举例

《Python基于http.server模块实现简单http服务的代码举例》Pythonhttp.server模块通过继承BaseHTTPRequestHandler处理HTTP请求,使用Threa... 目录测试环境代码实现相关介绍模块简介类及相关函数简介参考链接测试环境win11专业版python

使用Python的requests库来发送HTTP请求的操作指南

《使用Python的requests库来发送HTTP请求的操作指南》使用Python的requests库发送HTTP请求是非常简单和直观的,requests库提供了丰富的API,可以发送各种类型的HT... 目录前言1. 安装 requests 库2. 发送 GET 请求3. 发送 POST 请求4. 发送

解决Nginx启动报错Job for nginx.service failed because the control process exited with error code问题

《解决Nginx启动报错Jobfornginx.servicefailedbecausethecontrolprocessexitedwitherrorcode问题》Nginx启... 目录一、报错如下二、解决原因三、解决方式总结一、报错如下Job for nginx.service failed bec

Java报错:org.springframework.beans.factory.BeanCreationException的五种解决方法

《Java报错:org.springframework.beans.factory.BeanCreationException的五种解决方法》本文解析Spring框架中BeanCreationExce... 目录引言一、问题描述1.1 报错示例假设我们有一个简单的Java类,代表一个用户信息的实体类:然后,