基於Springmvc支付寶接口

@Controller
@RequestMapping(value="/aliapi")
public class AlipayApiController {
 
    private static Log log = LogFactory.getLog(AlipayApiController.class);
     
    @RequestMapping(value="/index")
    public String index(HttpServletRequest request,
            HttpServletResponse response){
                return "web/pay/fund";//付款的頁面。本頁面是爲了測試而使用的
    }
     
    @RequestMapping(value = "/deposit", method = RequestMethod.POST,produces = "application/json")  
    public String deposit(HttpServletRequest request,HttpServletResponse response,Model model) throws Exception { 
//        PrintWriter out = response.getWriter();
        String result = "";
        Date date = new Date();  
        // 支付類型  
        // 必填,不能修改  
        String payment_type = "1";  
        // 服務器異步通知頁面路徑  
        // 需http://格式的完整路徑,不能加?id=123這類自定義參數  
        String notify_url = "http://192.168.0.222:8080/live/aliapi/async";  
        // 頁面跳轉同步通知頁面路徑  
        // 需http://格式的完整路徑,不能加?id=123這類自定義參數,不能寫成http://localhost/  ;
        String return_url = "http://192.168.0.222:8080/live/aliapi/return_url";  
        // 商戶訂單號.  
        // 商戶網站訂單系統中唯一訂單號,必填  
        //String out_trade_no = date.getTime() + "";  
        // 訂單名稱  
        // 必填  
        String subject = "充值測試";  
        // 防釣魚時間戳  
        // 若要使用請調用類文件submit中的query_timestamp函數  
        String anti_phishing_key = "";  
        // 客戶端的IP地址  
        // 非局域網的外網IP地址,如:221.0.0.1  
        String exter_invoke_ip = "";  
           
           
        String total_fee = ServletRequestUtils.getStringParameter(request, "amount","");
         
        String body = ServletRequestUtils.getStringParameter(request, "body","test");
        //商品展示地址
        String show_url = ServletRequestUtils.getStringParameter(request, "show_url","http://www.elve.cn");
        //需以http://開頭的完整路徑,例如:http://www.xxx.com/myorder.html
 
         
         
         
        Map<String, String> sParaTemp = new HashMap<String, String>();
        sParaTemp.put("service""create_direct_pay_by_user");//接口服務----即時到賬
        sParaTemp.put("partner", AlipayConfig.partner);//支付寶PID
        sParaTemp.put("_input_charset", AlipayConfig.input_charset);//統一編碼
        sParaTemp.put("payment_type", payment_type);//支付類型
        sParaTemp.put("notify_url", notify_url);//異步通知頁面
        sParaTemp.put("return_url", return_url);//頁面跳轉同步通知頁面
        sParaTemp.put("seller_email", Constants.SELLER_EMAIL);//賣家支付寶賬號
        sParaTemp.put("out_trade_no", date.getTime()+payment_type);//商品訂單編號
        sParaTemp.put("subject", subject);//商品名稱
        sParaTemp.put("total_fee", total_fee);//價格
        sParaTemp.put("body", body);
        sParaTemp.put("show_url", show_url);
        sParaTemp.put("anti_phishing_key", anti_phishing_key);
        sParaTemp.put("exter_invoke_ip", exter_invoke_ip);
          
        //建立請求
        try {
            String sHtmlText = AlipaySubmit.buildRequest(sParaTemp,"post","確認");  
            Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd HH:mm:ss").create();
            String s = gson.toJson(sHtmlText);
            model.addAttribute("sHtmlText", s);
            request.setAttribute("sHtmlText", s);
            result = "{\"success\":true,\"msg\":\"跳轉成功\"}";
            StringUtil.writeToWeb(sHtmlText, "html", response);
            return null;
        catch (Exception e) {
            if(log.isErrorEnabled()){
                log.error("ddddddddddddddddddddd");
            }
            result = "{\"success\":false,\"msg\":\"跳轉失敗,請稍候再試!\"}";
            StringUtil.writeToWeb(result, "html", response);
            return null;
        }
    }  
    /**
     * 同步通知的頁面的Controller
     * @param request
     * @param response
     * @return
     */
    @RequestMapping(value="/return_url")
    public String Return_url(HttpServletRequest request,HttpServletResponse response){
        return "web/pay/success";
    }
    /**
     * 異步通知付款狀態的Controller
     * @param request
     * @param response
     * @return
     */
    @SuppressWarnings("rawtypes")
    @RequestMapping(value="/async",method = RequestMethod.GET)
    public String async(HttpServletRequest request,
            HttpServletResponse response){
         Map<String,String> params = new HashMap<String,String>();  
            Map requestParams = request.getParameterMap();  
            for (Iterator iter = requestParams.keySet().iterator(); iter.hasNext();) {  
                String name = (String) iter.next();  
                String[] values = (String[]) requestParams.get(name);  
                String valueStr = "";  
                for (int i = 0; i < values.length; i++) {  
                    valueStr = (i == values.length - 1) ? valueStr + values[i]: valueStr + values[i] + ",";  
                }  
                params.put(name, valueStr);  
            }  
            String tradeNo = request.getParameter("out_trade_no");  
            String tradeStatus = request.getParameter("trade_status");  
            //String notifyId = request.getParameter("notify_id");  
            if(AlipayNotify.verify(params)){//驗證成功  
                if(tradeStatus.equals("TRADE_FINISHED") || tradeStatus.equals("TRADE_SUCCESS")) {  
                    //要寫的邏輯。自己按自己的要求寫
                    log.error("ok.......");
                    System.out.println(">>>>>充值成功" + tradeNo);  
                }  
                return "web/pay/success";  
            }else{//驗證失敗  
                return "web/pay/fail";  
            }  
         
    }
}
發佈了9 篇原創文章 · 獲贊 8 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章