- public String PaySult() throws Exception {
- String resXml = "";
- Map<String, String> backxml = new HashMap<String, String>();
- InputStream inStream;
- try {
- inStream = request.getInputStream();
- ByteArrayOutputStream outSteam = new ByteArrayOutputStream();
- byte[] buffer = new byte[1024];
- int len = 0;
- while ((len = inStream.read(buffer)) != -1) {
- outSteam.write(buffer, 0, len);
- }
- logger.error("微信支付----付款成功----");
- outSteam.close();
- inStream.close();
- String result = new String(outSteam.toByteArray(), "utf-8");// 擷取微信調用我們notify_url的傳回資訊
- logger.error("微信支付----result----=" + result);
- Map<Object, Object> map = Xmlunit.xml2map(result, false);
- if (map.get("result_code").toString().equalsIgnoreCase("SUCCESS")) {
- logger.error("微信支付----傳回成功");
- if (verifyWeixinNotify(map)) {
- // 訂單處理 操作 orderconroller 的回寫操作?
- logger.error("微信支付----驗證簽名成功");
- // backxml.put("return_code", "<![CDATA[SUCCESS]]>");
- // backxml.put("return_msg", "<![CDATA[OK]]>");
- // // 告訴微信伺服器,我收到資訊了,不要在調用回調action了
- // strbackxml = pay.ArrayToXml(backxml);
- // response.getWriter().write(strbackxml);
- // logger.error("微信支付 ~~~~~~~~~~~~~~~~執行完畢?backxml=" +
- // strbackxml);
- // ====================================================================
- // 通知微信.異步确認成功.必寫.不然會一直通知背景.八次之後就認為交易失敗了.
- resXml = "<xml>" + "<return_code><![CDATA[SUCCESS]]></return_code>"
- + "<return_msg><![CDATA[OK]]></return_msg>" + "</xml> ";
- // 處理業務 -修改訂單支付狀态
- logger.error("微信支付回調:修改的訂單=" + map.get("out_trade_no"));
- int editres = Wechat_Order.execute("UPDATE wechat_order SET paystatus =? WHERE orderno=?",
- new Object[] { EnumPayStatus.Paybackok.getValue(), map.get("out_trade_no") });
- if (editres > 0) {
- logger.error("微信支付回調:修改訂單支付狀态成功");
- } else {
- logger.error("微信支付回調:修改訂單支付狀态失敗");
- }
- }
- // ------------------------------
- // 處理業務完畢
- // ------------------------------
- BufferedOutputStream out = new BufferedOutputStream(response.getOutputStream());
- out.write(resXml.getBytes());
- out.flush();
- out.close();
- }
- // else {
- // logger.info("支付失敗,錯誤資訊:" + map.get("err_code"));
- // resXml = "<xml>" + "<return_code><![CDATA[FAIL]]></return_code>"
- // + "<return_msg><![CDATA[封包為空]]></return_msg>" + "</xml> ";
- // }
- } catch (IOException e) {
- // TODO Auto-generated catch block
- logger.error("支付回調釋出異常:" + e);
- e.printStackTrace();
- }
- return resXml;
- }
- public boolean verifyWeixinNotify(Map<Object, Object> map) {
- SortedMap<String, String> parameterMap = new TreeMap<String, String>();
- String sign = (String) map.get("sign");
- for (Object keyValue : map.keySet()) {
- if (!keyValue.toString().equals("sign")) {
- parameterMap.put(keyValue.toString(), map.get(keyValue).toString());
- }
- }
- String createSign = pay.getSign(parameterMap);
- if (createSign.equals(sign)) {
- return true;
- } else {
- logger.error("微信支付 ~~~~~~~~~~~~~~~~驗證簽名失敗");
- return false;
- }
- }
轉載出處:https://blog.csdn.net/qq_26101151/article/details/53433380