微信支付统一下单支付结果回调

在用户支付完过后微信会调用我们给它的异步通知地址返回支付的结果,需要注意的是我们给的通知地址是可以进行外网访问的

我使用的一些工具类方法大多是从官方给的demo,下面是下载地址
https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=11_1

好了上代码

  @RequestMapping("/wechatpayment")
   @Transactional
    public void wechatpayment(HttpServletRequest req, HttpServletResponse resp){
        //读取参数
        InputStream inputStream;
        StringBuffer sb=new StringBuffer();
        try {
            inputStream=req.getInputStream();
            String s ;
            BufferedReader br=new BufferedReader(new InputStreamReader(inputStream,"UTF-8"));
            while ((s=br.readLine())!=null) {
                sb.append(s);
            }
            br.close();
            inputStream.close();
            boolean verdict;
            Map<String, String> map;
            //将参数转换成map
            map= WXPayUtil.xmlToMap(sb.toString());
            //根据订单id查询订单信息
            Order order = orderService.selectOrderId(map.get("out_trade_no"));
            //判断是否处理过该订单信息
            //已经处理过直接返回成功的消息给微信
            String xml=null;
            if (order.getStatus().equals("2")){
                xml="<xml>" +
                        "  <return_code><![CDATA[SUCCESS]]></return_code>" +
                        "  <return_msg><![CDATA[OK]]></return_msg>" +
                        "</xml>";
            }else{
	            //校验签名是否正确(使用HMACSHA256签名算法)
	            verdict=WXPayUtil.isSignatureValid(map, WeixinPayConfig.key,WXPayConstants.SignType.HMACSHA256);
	            Map<String,String> result=new HashMap<>();
	             //判断微信返回的结果是否是交易成功
	            if("SUCCESS".equals(map.get("return_code"))){
	            	//判断签名是否校验成功
	                if (verdict) {
	                    BigDecimal total_fee=new BigDecimal(map.get("total_fee"));
	                    BigDecimal price = order.getPrice();
	                    System.out.println(total_fee.compareTo(price));
	                    //判断与订单价格是否一致
	                    if (total_fee.compareTo(price)==0){
	                        //交易成功
	                   		 /**
	                   		 *修改订单状态
                             * 进行成功后的业务逻辑
                             */
	                        xml="<xml>" +
	                                "  <return_code><![CDATA[SUCCESS]]></return_code>" +
	                                "  <return_msg><![CDATA[OK]]></return_msg>" +
	                                "</xml>";
	                    }else {
	                        xml="<xml>" +
	                                "  <return_code><![CDATA[FAIL]]></return_code>" +
	                                "  <return_msg><![CDATA[预订单金额不一致]]></return_msg>" +
	                                "</xml>";
	                    }
	                }else {
	                    xml="<xml>" +
	                            "  <return_code><![CDATA[FAIL]]></return_code>" +
	                            "  <return_msg><![CDATA[签名失败]]></return_msg>" +
	                            "</xml>";
	                }
	            }else {//未收到微信成功状态码
	                xml="<xml>" +
	                            "  <return_code><![CDATA[FAIL]]></return_code>" +
	                            "  <return_msg><![CDATA[未收到微信成功状态码]]></return_msg>" +
	                            "</xml>";
	            }
            }
            PrintWriter out = resp.getWriter();
            out.print(xml);
            out.flush();
            out.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

微信的回调就这些了

微信统一下单 https://blog.csdn.net/weixin_45589505/article/details/105270203

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值