public String aliPay(String amount,Map<String,Object> body){ //實例化客戶端 AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do", alipay_appId, alipay_private_key , "json", charset, alipay_public_key, "RSA2"); //實例化具體API對應的request類,類名稱和接口名稱對應,當前調用接口名稱:alipay.trade.app.pay AlipayTradeAppPayRequest request = new AlipayTradeAppPayRequest(); //SDK已經封裝掉了公共參數,這裏只須要傳入業務參數。如下方法爲sdk的model入參方式(model和biz_content同時存在的狀況下取biz_content)。 AlipayTradeAppPayModel model = new AlipayTradeAppPayModel(); model.setPassbackParams(URLEncoder.encode(body.toString()));; //描述信息 添加附加數據 model.setSubject("魅格"); //商品標題 model.setOutTradeNo(new SimpleDateFormat("yyyyMMddHHmmss").format(new Date())+(int)(Math.random()*90000+10000)); //商家訂單編號 model.setTimeoutExpress("30m"); //超時關閉該訂單時間 model.setTotalAmount(amount); //訂單總金額 model.setProductCode("QUICK_MSECURITY_PAY"); //銷售產品碼,商家和支付寶簽約的產品碼,爲固定值QUICK_MSECURITY_PAY request.setBizModel(model); request.setNotifyUrl(alipay_notify_url); //回調地址 String orderStr = ""; try { //這裏和普通的接口調用不一樣,使用的是sdkExecute AlipayTradeAppPayResponse response = alipayClient.sdkExecute(request); orderStr = response.getBody(); System.out.println(orderStr);//就是orderString 能夠直接給客戶端請求,無需再作處理。 } catch (AlipayApiException e) { e.printStackTrace(); } return orderStr; }
文檔地址json
回調獲取支付結果api
Map requestParams = getRequest().getParameterMap();服務器
public String aliPay_notify(Map requestParams){ System.out.println("支付寶支付結果通知"+requestParams.toString()); //獲取支付寶POST過來反饋信息 Map<String,String> params = new HashMap<String,String>(); 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] + ","; } //亂碼解決,這段代碼在出現亂碼時使用。 //valueStr = new String(valueStr.getBytes("ISO-8859-1"), "utf-8"); params.put(name, valueStr); } //切記alipaypublickey是支付寶的公鑰,請去open.alipay.com對應應用下查看。 //boolean AlipaySignature.rsaCheckV1(Map<String, String> params, String publicKey, String charset, String sign_type) try {
//驗證簽名 boolean flag = AlipaySignature.rsaCheckV1(params, alipay_public_key, charset, "RSA2"); if(flag){ if("TRADE_SUCCESS".equals(params.get("trade_status"))){ //付款金額 String amount = params.get("buyer_pay_amount"); //商戶訂單號 String out_trade_no = params.get("out_trade_no"); //支付寶交易號 String trade_no = params.get("trade_no"); //附加數據 String passback_params = URLDecoder.decode(params.get("passback_params")); } } } catch (AlipayApiException e) { // TODO Auto-generated catch block e.printStackTrace(); }
return "success"; }
系統錯誤,請售後再試(ALI40247)app
集成支付寶後一直報這個錯,後來折騰了很久發現,添加的附加數據,裏面有特殊符號,包含特殊符號的參數要用URLEncode編碼dom