天天看點

公衆号支付2 notify_url 回調

  1.     public String PaySult() throws Exception {  
  2.         String resXml = "";  
  3.         Map<String, String> backxml = new HashMap<String, String>();  
  4.         InputStream inStream;  
  5.         try {  
  6.             inStream = request.getInputStream();  
  7.             ByteArrayOutputStream outSteam = new ByteArrayOutputStream();  
  8.             byte[] buffer = new byte[1024];  
  9.             int len = 0;  
  10.             while ((len = inStream.read(buffer)) != -1) {  
  11.                 outSteam.write(buffer, 0, len);  
  12.             }  
  13.             logger.error("微信支付----付款成功----");  
  14.             outSteam.close();  
  15.             inStream.close();  
  16.             String result = new String(outSteam.toByteArray(), "utf-8");// 擷取微信調用我們notify_url的傳回資訊  
  17.             logger.error("微信支付----result----=" + result);  
  18.             Map<Object, Object> map = Xmlunit.xml2map(result, false);  
  19.             if (map.get("result_code").toString().equalsIgnoreCase("SUCCESS")) {  
  20.                 logger.error("微信支付----傳回成功");  
  21.                 if (verifyWeixinNotify(map)) {  
  22.                     // 訂單處理 操作 orderconroller 的回寫操作?  
  23.                     logger.error("微信支付----驗證簽名成功");  
  24.                     // backxml.put("return_code", "<![CDATA[SUCCESS]]>");  
  25.                     // backxml.put("return_msg", "<![CDATA[OK]]>");  
  26.                     // // 告訴微信伺服器,我收到資訊了,不要在調用回調action了  
  27.                     // strbackxml = pay.ArrayToXml(backxml);  
  28.                     // response.getWriter().write(strbackxml);  
  29.                     // logger.error("微信支付 ~~~~~~~~~~~~~~~~執行完畢?backxml=" +  
  30.                     // strbackxml);  
  31.                     // ====================================================================  
  32.                     // 通知微信.異步确認成功.必寫.不然會一直通知背景.八次之後就認為交易失敗了.  
  33.                     resXml = "<xml>" + "<return_code><![CDATA[SUCCESS]]></return_code>"  
  34.                             + "<return_msg><![CDATA[OK]]></return_msg>" + "</xml> ";  
  35.                     // 處理業務 -修改訂單支付狀态  
  36.                     logger.error("微信支付回調:修改的訂單=" + map.get("out_trade_no"));  
  37.                     int editres = Wechat_Order.execute("UPDATE wechat_order SET paystatus =? WHERE orderno=?",  
  38.                             new Object[] { EnumPayStatus.Paybackok.getValue(), map.get("out_trade_no") });  
  39.                     if (editres > 0) {  
  40.                         logger.error("微信支付回調:修改訂單支付狀态成功");  
  41.                     } else {  
  42.                         logger.error("微信支付回調:修改訂單支付狀态失敗");  
  43.                     }  
  44.                 }  
  45.                 // ------------------------------  
  46.                 // 處理業務完畢  
  47.                 // ------------------------------  
  48.                 BufferedOutputStream out = new BufferedOutputStream(response.getOutputStream());  
  49.                 out.write(resXml.getBytes());  
  50.                 out.flush();  
  51.                 out.close();  
  52.             }  
  53.             // else {  
  54.             // logger.info("支付失敗,錯誤資訊:" + map.get("err_code"));  
  55.             // resXml = "<xml>" + "<return_code><![CDATA[FAIL]]></return_code>"  
  56.             // + "<return_msg><![CDATA[封包為空]]></return_msg>" + "</xml> ";  
  57.             // }  
  58.         } catch (IOException e) {  
  59.             // TODO Auto-generated catch block  
  60.             logger.error("支付回調釋出異常:" + e);  
  61.             e.printStackTrace();  
  62.         }  
  63.         return resXml;  
  64.     }  
  65.     public boolean verifyWeixinNotify(Map<Object, Object> map) {  
  66.         SortedMap<String, String> parameterMap = new TreeMap<String, String>();  
  67.         String sign = (String) map.get("sign");  
  68.         for (Object keyValue : map.keySet()) {  
  69.             if (!keyValue.toString().equals("sign")) {  
  70.                 parameterMap.put(keyValue.toString(), map.get(keyValue).toString());  
  71.             }  
  72.         }  
  73.         String createSign = pay.getSign(parameterMap);  
  74.         if (createSign.equals(sign)) {  
  75.             return true;  
  76.         } else {  
  77.             logger.error("微信支付  ~~~~~~~~~~~~~~~~驗證簽名失敗");  
  78.             return false;  
  79.         }  
  80.     }  

轉載出處:https://blog.csdn.net/qq_26101151/article/details/53433380

繼續閱讀