1. 程式人生 > >微信支付--非同步處理支付結果

微信支付--非同步處理支付結果

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>";
}
}