微信支付回调处理

通过上篇博文已经知道通过微信支付接口获取预支付id进行微信支付已经配置好回调地址了,下面我讲下回调相关代码,通过微信返回信息进行业务处理,包括用户送出的礼物信息放在attach字段里面的。

@RequestMapping(value = "/notice.do", produces = "text/html;charset=utf-8")
    public void weixin_notify(HttpServletRequest request, HttpServletResponse response) throws Exception {

        //读取参数
        InputStream inputStream;
        StringBuffer sb = new StringBuffer();
        inputStream = request.getInputStream();
        String s;
        BufferedReader in = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"));
        while ((s = in.readLine()) != null) {
            sb.append(s);
        }
        in.close();
        inputStream.close();

        //解析xml成map
        Map<String, String> m = new HashMap<String, String>();
        m = XMLUtil.doXMLParse(sb.toString());

        //过滤空 设置 TreeMap
        SortedMap<Object, Object> packageParams = new TreeMap<Object, Object>();
        Iterator it = m.keySet().iterator();
        while (it.hasNext()) {
            String parameter = (String) it.next();
            String parameterValue = m.get(parameter);

            String v = "";
            if (null != parameterValue) {
                v = parameterValue.trim();
            }
            packageParams.put(parameter, v);
        }

        // 账号信息
        String key = "r22dum9drtxtd78btskxslu6tzlsqtrl"; // key
        logger.info("回调--------" + packageParams);
        //判断签名是否正确
        if (PayCommonUtil.isTenpaySign("UTF-8", packageParams, key)) {
            //------------------------------
            //处理业务开始
            //------------------------------
            String resXml = "";
            String activityId = "";
            String userId = "";
            String total_fee = "";
            if ("SUCCESS".equals((String) packageParams.get("result_code"))) {
                // 这里是支付成功
                //执行自己的业务逻辑
                String mch_id = (String) packageParams.get("mch_id");
                String openid = (String) packageParams.get("openid");
                String is_subscribe = (String) packageParams.get("is_subscribe");
                String out_trade_no = (String) packageParams.get("out_trade_no");
                String attach = (String) packageParams.get("attach");//用户id&活动号
                userId = attach.substring(0, attach.lastIndexOf("/"));
                total_fee = (String) packageParams.get("total_fee");
                logger.info("mch_id:" + mch_id);
                logger.info("openid:" + openid);
                logger.info("is_subscribe:" + is_subscribe);
                logger.info("out_trade_no:" + out_trade_no);
                logger.info("total_fee:" + total_fee);
                activityId = attach.substring(attach.lastIndexOf("/") + 1, attach.length());

                logger.info("支付成功");
                //通知微信.异步确认成功.必写.不然会一直通知后台.八次之后就认为交易失败了.
                resXml = "<xml>" + "<return_code><![CDATA[SUCCESS]]></return_code>"
                        + "<return_msg><![CDATA[OK]]></return_msg>" + "</xml> ";

            } else {
                logger.info("支付失败,错误信息:" + packageParams.get("err_code"));
                resXml = "<xml>" + "<return_code><![CDATA[FAIL]]></return_code>"
                        + "<return_msg><![CDATA[报文为空]]></return_msg>" + "</xml> ";
            }
            //------------------------------
            List<BoxInfoJson> boxInfoJsons = new ArrayList<>();
            try {
                Account account = accountService.getAccount(Integer.parseInt(userId));
                //取得活动信息
                String liveId = douyaLiveEventTempService.getLiveIdByEventNo(activityId);
                //取得会场信息
                List<LiveVenue> venueList = liveVenueService.getEventVenueList(liveId);
                for (LiveVenue liveVenue : venueList) {
                    BoxInfoJson json = new BoxInfoJson();
                    LiveGift liveGift = new LiveGift();
                    liveGift.setHeadImg(account.getAvatar());
                    liveGift.setNickName(account.getNick_name());
                    if (total_fee.equals("66")) {
                        liveGift.setLiveGift(YINGGUANGBANG);
                    } else if (total_fee.equals("100")) {
                        liveGift.setLiveGift(XUANHUA);
                    } else if (total_fee.equals("200")) {
                        liveGift.setLiveGift(DAMAI);
                    } else if (total_fee.equals("666")) {
                        liveGift.setLiveGift(YANJICHAOQUN);
                    } else if (total_fee.equals("1000")) {
                        liveGift.setLiveGift(YANHUO);
                    } else if (total_fee.equals("2000")) {
                        liveGift.setLiveGift(ZUIJIAZHUJIAO);
                    } else if (total_fee.equals("6660")) {
                        liveGift.setLiveGift(ZUIJIAYINGPIAN);
                    } else if (total_fee.equals("10000")) {
                        liveGift.setLiveGift(AOSIKAJIANGBEI);
                    } else {
                        liveGift.setLiveGift("");
                    }
                    Box b = boxService.getBoxById(liveVenue.getBox_id());
                    String tMacaddress = b.getMac_address();
                    json.setType(13);
                    json.setVenueType(String.valueOf(liveVenue.getType()));
                    json.setMacAddress(tMacaddress);
                    json.setLiveGift(liveGift);
                    boxInfoJsons.add(json);
                }
                LiveInfo liveInfo = new LiveInfo();
                liveInfo.setBoxInfoJsonList(boxInfoJsons);
                //转换通知内容为json格式并发送给业务接口
                String jsonValue = JSONObject.toJSONString(liveInfo);
                String url = live_boss_client_url;
                JSONObject liveRtn = PayCommonUtil.sendHttpRequest(url, jsonValue);
                if (liveRtn.get("code").equals("00")) {
                    logger.info("送出礼物成功" + new Date());
                } else {
                    String msg = "";
                    JSONArray ja = (JSONArray) liveRtn.get("data");
                    for (Object aJa : ja) {
                        String mac = aJa.toString();
                        Box box = boxService.queryNameByMac(mac);
                        msg += box.getHall_name() + ",";
                    }
                    msg = msg.substring(0, msg.length() - 1) + "启动失败!";
                    logger.error("送出礼物失败了", msg);
                }
            } catch (Exception e) {
                e.printStackTrace();
                logger.error("系统异常", e);
            }
            //------------------------------
            BufferedOutputStream out = new BufferedOutputStream(
                    response.getOutputStream());
            out.write(resXml.getBytes());
            out.flush();
            out.close();
        } else {
            logger.info("通知签名验证失败");
        }

    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

haibo8023

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值