微信支付-支付结果通知接收「建议收藏」

微信支付-支付结果通知接收「建议收藏」微信支付-支付结果通知接收最近在做微信支付功能在微信成功后,微信通过异步方式返回支付结果是遇到了问题:参数接收不到。后来通过查阅资料才将问题解决,现在将解决方法分享一下。官方文档解释如上图所示:通过微信支付时要先在微信支付系统生成预付订单,然后才能在前台发起支付请求。生成预付订单时会向微信支付系统传递一个参数:notify_url。下面是该参数的解释:微信对这个回调路径没有特殊要求,不需要授权目录下

大家好,又见面了,我是你们的朋友全栈君。

微信支付-支付结果通知接收

最近在做微信支付功能在微信成功后,微信通过异步方式返回支付结果是遇到了问题:参数接收不到。后来通过查阅资料才将问题解决,现在将解决方法分享一下。

###官方文档解释
这里写图片描述

如上图所示:通过微信支付时要先在微信支付系统生成预付订单,然后才能在前台发起支付请求。生成预付订单时会向微信支付系统传递一个参数:notify_url。下面是该参数的解释:

这里写图片描述

微信对这个回调路径没有特殊要求,不需要授权目录下,也不需要在同一个域名下,端口也没要求。

支付完成后,微信会把相关支付结果和用户信息发送给商户,商户需要接收处理,并返回应答。
对后台通知交互时,如果微信收到商户的应答不是成功或超时,微信认为通知失败,微信会通过一定的策略定期重新发起通知,尽可能提高通知的成功率,但微信不保证通知最终能成功。 (通知频率为15/15/30/180/1800/1800/1800/1800/3600,单位:秒)

注意:微信调用notify_url时不会携带参数,所以说商户后台系统不能直接获得微信返回的支付信息,返回信息是以数据流的方式返回的,必须先将流信息转化成XML形式才能获得支付信息。微信返回的支付信息如下所示:

<xml>
  <appid><![CDATA[wx2421b1c4370ec43b]]></appid>
  <attach><![CDATA[支付测试]]></attach>
  <bank_type><![CDATA[CFT]]></bank_type>
  <fee_type><![CDATA[CNY]]></fee_type>
  <is_subscribe><![CDATA[Y]]></is_subscribe>
  <mch_id><![CDATA[10000100]]></mch_id>
  <nonce_str><![CDATA[5d2b6c2a8db53831f7eda20af46e531c]]></nonce_str>
  <openid><![CDATA[oUpF8uMEb4qRXf22hE3X68TekukE]]></openid>
  <out_trade_no><![CDATA[1409811653]]></out_trade_no>
  <result_code><![CDATA[SUCCESS]]></result_code>
  <return_code><![CDATA[SUCCESS]]></return_code>
  <sign><![CDATA[B552ED6B279343CB493C5DD0D78AB241]]></sign>
  <sub_mch_id><![CDATA[10000100]]></sub_mch_id>
  <time_end><![CDATA[20140903131540]]></time_end>
  <total_fee>1</total_fee>
  <trade_type><![CDATA[JSAPI]]></trade_type>
  <transaction_id><![CDATA[1004400740201409030005092168]]></transaction_id>
</xml> 

具体含义请参照官方文档:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_7

###实现方式

public String getWeChatPayReturn(HttpServletRequest request){
	try {
            InputStream inStream = request.getInputStream();
            int _buffer_size = 1024;
            if (inStream != null) {
                ByteArrayOutputStream outStream = new ByteArrayOutputStream();
                byte[] tempBytes = new byte[_buffer_size];
                int count = -1;
                while ((count = inStream.read(tempBytes, 0, _buffer_size)) != -1) {
                    outStream.write(tempBytes, 0, count);
                }
                tempBytes = null;
                outStream.flush();
                //将流转换成字符串
                String result = new String(outStream.toByteArray(), "UTF-8");
                //将字符串解析成XML
                Document doc = DocumentHelper.parseText(result);
                //将XML格式转化成MAP格式数据
                Map<String, Object> resultMap = XmlMapHandle.Dom2Map(doc);
                //后续具体自己实现
            }
            //通知微信支付系统接收到信息
	    return "<xml><return_code><![CDATA[SUCCESS]]></return_code>
				      <return_msg><![CDATA[OK]]></return_msg>
				 </xml>";
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
        //如果失败返回错误,微信会再次发送支付信息
        return "fail";
}

通过上面的操作,应该不会有太大的问题了。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/139773.html原文链接:https://javaforall.net

(0)
上一篇 2022年5月29日 上午9:36
下一篇 2022年5月29日 上午9:46


相关推荐

  • Java对接阿里云短信平台(快速上手)

    Java对接阿里云短信平台(快速上手)一 首先阿里云管理控制台添加短信服务功能二 接着在应用开发模块下 配置签名 模版 不清楚的地方可以查看帮助文档三 下载对应的 SDK 及其 DEMO 我下的 Java 四 将 api demo 代码导入自己的工程 配置自己的 AK AccessKey 五 添加调用发送短信接口里面配置手机号 短信签名 和短信模版 code 及传送变量参数六 调用成功界面 并打印短信信息

    2026年3月17日
    3
  • c#数组赋初值_C#数组初始化

    c#数组赋初值_C#数组初始化C#的数组初始化是在声明数组时将初始值放在大括号({})之内。如果没有指定初始值,则数组成员将自动初始化为该数组类型的默认初始值。请阅读数组的属性。如果将数组声明为某类型的字段,则当实例化该类型时它将被设置为默认值null。一、一维数组的初始化1.在声明数组时将其初始化。如:int[]array=newint[6]{1,2,3,4,5,6};string[]stringArray=…

    2022年7月18日
    70
  • ILRuntime(一)

    ILRuntime(一)之前简单的写了个 ILRuntime 和 Unity 互相调用的文章 https blog csdn net wangjiangron article details 感觉有蛮多不好的地方 所以想重新搞一搞 弄个简单的 ILRuntime 和 Unity 的基本框架 一些基本的概念在上面的文章讲过了 这边就懒得再说了 前期工作依旧是导入 ILRuntime 的库到 Unity 和一个 Hotf

    2026年3月19日
    2
  • ImageNet数据集和ILSVRC2012介绍以及如何通过python使用

    ImageNet数据集和ILSVRC2012介绍以及如何通过python使用介绍 ImageNet 是一个图像数据集 关于它的详细介绍可以参考这篇文章 Dataset 之 ImageNet ImageNet 数据集简介 下载 使用方法之详细攻略 ILSVRC 是 ImageNetLarg 的缩写 是基于 ImageNet 的一个图像识别大赛 每年都会举办 ILSVRC2012 就是 2012 年举办的 比赛组织者会发布一整套数据 包括 trainingdata TRAINING valida

    2026年3月26日
    6
  • tomcat日志乱码怎么解决_linux日志中文乱码

    tomcat日志乱码怎么解决_linux日志中文乱码中文乱码大家在Windows启动Tomcat应该都会遇到中文乱码,其实也不影响使用,但是笔者看着这个乱码难受,于是提供一种较简单的解决方案。解决方案将Tomcat安装目录下/conf/logging.properties中的控制台日志编码由默认的UTF-8改为GBK即可。扩展乱码原因:Windows的控制台默认使用GB2312字符集,而Tomcat控制台日志输出默认使用UTF-8字符集,于是产生中文乱码,可使用chcp命令暂时修改控制台字符集

    2026年4月14日
    4
  • 局域网vlan配置步骤_局域网vlan划分案例

    局域网vlan配置步骤_局域网vlan划分案例计算机网络技术的发展犹如戏剧舞台,你方唱罢我登台。从传统的以太网(10Mb/s)发展到快速以太网(100Mb/s)和千兆以太网(1000Mb/s)也不过几年的时间,其迅猛的势头实在令人吃惊。而现在中大型规模网络建设中,以千兆三层交换机为核心的所谓“千兆主干跑、百兆到桌面”的主流网络模型已不胜枚举。现在,网络业界对“三层交换”和VLAN这两词已经不感到陌生了。一、什么是三…

    2026年1月21日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号