微信支付--非同步處理支付結果
阿新 • • 發佈:2019-02-03
package com.ods.wx.web;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import net.sf.json.JSONObject;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.eredlab.g4.rif.web.BaseAction;
import com.ods.wx.util.MessageUtil;
import com.ods.wx.wxpay.ReturnOrders;
public class PayLoginAction extends BaseAction {
@SuppressWarnings("static-access")
public ActionForward execute(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response)throws Exception {
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
Map<String, String> map =MessageUtil.parseXml(request);
String jsonObject = JSONObject.fromObject(map).toString();
System.out.println("支付成功後非同步返回資料為:"+jsonObject);
if (map.get("result_code").toString().equalsIgnoreCase("SUCCESS")) {
/**
* 根據自己的需要並不是所有的欄位都要儲存,請結合實際情況
*/
ReturnOrders retOrd = new ReturnOrders();
retOrd.setAppid(map.get("appid"));//商戶appid
retOrd.setBank_type(map.get("bank_type"));//銀行型別
retOrd.setFee_type(map.get("fee_type"));//貨幣種類 CNY是人民幣
retOrd.setIs_subscribe(map.get("is_subscribe"));//是否關注公眾賬號
retOrd.setMch_id(map.get("mch_id"));//商戶號
retOrd.setNonce_str(map.get("nonce_str"));//隨機字串
retOrd.setOpenid(map.get("openid"));//使用者openid
retOrd.setOut_trade_no(map.get("out_trade_no"));//商戶訂單號
retOrd.setResult_code(map.get("result_code"));//業務結果
retOrd.setReturn_code(map.get("return_code"));//返回狀態碼
retOrd.setSign(map.get("sign"));//簽名
retOrd.setSub_mch_id(map.get("sub_mch_id"));//子商戶號
retOrd.setTime_end(map.get("time_end"));//支付完成時間
retOrd.setTotal_fee(map.get("total_fee"));//總金額
retOrd.setTrade_type(map.get("trade_type"));//交易型別
retOrd.setTransaction_id(map.get("transaction_id"));//微信支付訂單號
//TODO 對資料庫的操作
System.out.println("==============支付非同步處理==========");
response.getWriter().write(setXML("SUCCESS", "")); //告訴微信伺服器,我收到資訊了,不要在呼叫回撥action了
System.out.println("-------------"+setXML("SUCCESS", ""));
}
return mapping.findForward(null);
}
public static String setXML(String return_code, String return_msg) {
return "<xml><return_code><![CDATA[" + return_code
+ "]]></return_code><return_msg><![CDATA[" + return_msg
+ "]]></return_msg></xml>";
}
}
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import net.sf.json.JSONObject;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.eredlab.g4.rif.web.BaseAction;
import com.ods.wx.util.MessageUtil;
import com.ods.wx.wxpay.ReturnOrders;
public class PayLoginAction extends BaseAction {
@SuppressWarnings("static-access")
public ActionForward execute(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response)throws Exception {
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
Map<String, String> map =MessageUtil.parseXml(request);
String jsonObject = JSONObject.fromObject(map).toString();
System.out.println("支付成功後非同步返回資料為:"+jsonObject);
if (map.get("result_code").toString().equalsIgnoreCase("SUCCESS")) {
/**
* 根據自己的需要並不是所有的欄位都要儲存,請結合實際情況
*/
ReturnOrders retOrd = new ReturnOrders();
retOrd.setAppid(map.get("appid"));//商戶appid
retOrd.setBank_type(map.get("bank_type"));//銀行型別
retOrd.setFee_type(map.get("fee_type"));//貨幣種類 CNY是人民幣
retOrd.setIs_subscribe(map.get("is_subscribe"));//是否關注公眾賬號
retOrd.setMch_id(map.get("mch_id"));//商戶號
retOrd.setNonce_str(map.get("nonce_str"));//隨機字串
retOrd.setOpenid(map.get("openid"));//使用者openid
retOrd.setOut_trade_no(map.get("out_trade_no"));//商戶訂單號
retOrd.setResult_code(map.get("result_code"));//業務結果
retOrd.setReturn_code(map.get("return_code"));//返回狀態碼
retOrd.setSign(map.get("sign"));//簽名
retOrd.setSub_mch_id(map.get("sub_mch_id"));//子商戶號
retOrd.setTime_end(map.get("time_end"));//支付完成時間
retOrd.setTotal_fee(map.get("total_fee"));//總金額
retOrd.setTrade_type(map.get("trade_type"));//交易型別
retOrd.setTransaction_id(map.get("transaction_id"));//微信支付訂單號
//TODO 對資料庫的操作
System.out.println("==============支付非同步處理==========");
response.getWriter().write(setXML("SUCCESS", "")); //告訴微信伺服器,我收到資訊了,不要在呼叫回撥action了
System.out.println("-------------"+setXML("SUCCESS", ""));
}
return mapping.findForward(null);
}
public static String setXML(String return_code, String return_msg) {
return "<xml><return_code><![CDATA[" + return_code
+ "]]></return_code><return_msg><![CDATA[" + return_msg
+ "]]></return_msg></xml>";
}
}