微信App支付(二)

在微信App支付(一)里,app端已经调起微信支付,微信会通过我们签名时提交的回调接口返回支付信息。
以下为回调接口代码:

/**
     * 微信支付回调
     * 
     * @param
     * @param
     * @param
     * @param
     * @return
     */
    @RequestMapping("backtracks")
    @ResponseBody
    public void weixinNotifyUrl(HttpServletRequest request, HttpServletResponse response) {
        try {
            BufferedReader reader = request.getReader();
            String line = "";
            StringBuffer inputString = new StringBuffer();
            PrintWriter writer = response.getWriter();

            while ((line = reader.readLine()) != null) {
                inputString.append(line);
            }

            if (reader != null) {
                reader.close();
            }
            System.out.println("----[微信回调]接收到的报文---" + inputString.toString());
            if (!StringUtils.isEmpty(inputString.toString())) {
                // WXPayResult wxPayResult =
                // JdomParseXmlUtils.getWXPayResult(inputString.toString());
                Map<String, String> map1 = new HashMap<String, String>();
                map1 = ParseXMLUtils.jdomParseXml(inputString.toString());
                if ("SUCCESS".equalsIgnoreCase(map1.get("return_code"))) {
                    Map<String, String> parameters = new HashMap<String, String>();
                    parameters.put("appid", map1.get("appid"));
                    //parameters.put("attach", map1.get("attach"));
                    parameters.put("bank_type", map1.get("bank_type"));
                    parameters.put("cash_fee", map1.get("cash_fee"));
                    parameters.put("fee_type", map1.get("fee_type"));
                    parameters.put("is_subscribe", map1.get("is_subscribe"));
                    parameters.put("mch_id", map1.get("mch_id"));
                    parameters.put("nonce_str", map1.get("nonce_str"));
                    parameters.put("openid", map1.get("openid"));
                    parameters.put("out_trade_no", map1.get("out_trade_no"));
                    parameters.put("result_code", map1.get("result_code"));
                    parameters.put("return_code", map1.get("return_code"));
                    parameters.put("time_end", map1.get("time_end"));
                    parameters.put("total_fee", map1.get("total_fee"));
                    parameters.put("trade_type", map1.get("trade_type"));
                    parameters.put("transaction_id", map1.get("transaction_id"));
                    String sign = map1.get("sign");
                    String out_trade_no = map1.get("out_trade_no");
                    String total_amount = map1.get("total_fee");
                    String time_end = map1.get("time_end");
                    String return_code = weixinBack.urlBack(parameters, out_trade_no, total_amount, time_end, sign);
                    String return_msg = return_code.equals("SUCCESS") ? "OK" : "验签失败";
                    writer.write(HttpXmlUtils.backWeixin(return_code, return_msg));

                } else {
                    writer.write(HttpXmlUtils.backWeixin("FAIL", "验签失败"));
                }
            } else {
                writer.write(HttpXmlUtils.backWeixin("FAIL", "验签失败"));
            }
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

String return_code = weixinBack.urlBack(parameters, out_trade_no, total_amount, time_end, sign);
weixinBack这个接口里面主要是验证签名和业务逻辑,验证签名只需要把微信传回来的参数按照之前签名方法签名和微信返回的sign进行比对就可以了。签名正确后,执行业务逻辑,然后返回给微信是否成功。

/**返回给微信的消息
     * 
     * @param return_code
     * @param return_msg
     * @param output
     * @return
     */
    /*<xml> 
    <return_code><![CDATA[SUCCESS]]></return_code>
    <return_msg><![CDATA[OK]]></return_msg>
    </xml>*/
    public static String backWeixin(String return_code, String return_msg) {
        StringBuffer bf = new StringBuffer();
        bf.append("<xml>");

        bf.append("<return_code><![CDATA[");
        bf.append(return_code);
        bf.append("]]></return_code>");

        bf.append("<return_msg><![CDATA[");
        bf.append(return_msg);
        bf.append("]]></return_msg>");

        bf.append("</xml>");
        return bf.toString();
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值