最近團隊在接入微信支付,APP和JSAPI的接口都需要填寫一個notify_url回調地址,但是坑爹的官方文檔並沒有找到JSAPI模式的java版的demo,所以不得不自己看文檔寫了一個接受微信異步通知的頁面,並做相應的業務處理。直接上代碼:
-
<%@page import="com.shop.thread.WXPayFinishThread"%>
-
<%@page import="com.shop.util.XmlUtil"%>
-
<%@page import="net.sf.json.JSONObject"%>
-
<%@page import="java.io.*"%>
-
<%
-
/* *
-
-
功能:微信支付服務器異步通知頁面
-
作者:李小拐
-
日期:2016年6月22日20:20:44
-
說明:
-
以下代碼只是自己的樣例代碼,非官方,你可以根據自己網站的需要,按照技術文檔編寫,並非一定要使用該代碼。
-
該代碼僅供學習和研究微信接口使用,只是提供一個參考。
-
* */
-
%>
-
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
-
<%@ page import="java.util.*"%>
-
<%
-
-
//http://101.201.38.47/egx/wxpay_notify_url.jsp
-
System.out.println("----進入到了該頁面---");
-
BufferedReader reader = request.getReader();
-
String line = "";
-
StringBuffer inputString = new StringBuffer();
-
try{
-
while ((line = reader.readLine()) != null) {
-
inputString.append(line);
-
}
-
request.getReader().close();
-
System.out.println("----接收到的報文---"+inputString.toString());
-
JSONObject json=XmlUtil.XmlToJson(inputString.toString());
-
//String appid=json.get("appid")+"";
-
//String mch_id=json.get("mch_id")+"";
-
if(json.getString("return_code").equals("SUCCESS")){
-
if(json.getString("result_code").equals("SUCCESS")){
-
String transaction_id=json.get("transaction_id")+"";//微信支付訂單號
-
String out_trade_no=json.get("out_trade_no")+"";//商戶訂單號
-
String openid=json.get("openid")+"";
-
String trade_type=json.get("trade_type")+"";
-
//接下來是做自己的業務處理
-
//開一個線程,更新訂單狀態
-
WXPayFinishThread wxp=new WXPayFinishThread(openid,transaction_id,out_trade_no,trade_type);
-
wxp.start();
-
-
}
-
}
-
//告訴微信服務器,我收到信息了,不要在調用回調action了
-
response.getWriter().write("<xml>
<return_code><![CDATA[SUCCESS]]>
</return_code>
</xml>");
-
System.out.println("----結束---"+inputString.toString());
-
}catch(Exception e){
-
e.printStackTrace();
-
}
-
-
%>
以上代碼只處理了SUCCESS的情況,FAIL的情況請自行處理。。。