先說明,支付是以前寫好的,調用的是支付寶舊的即時到帳接口,所也沒有去集成應用,退款調用的是無密即時到帳退款接口!!!數據庫
https://doc.open.alipay.com/支付寶文檔資料,螞蟻金服開發平臺。首先從開放平臺找到即時到帳接口資料,上面有demo能夠下載,下載demo,修改裏面的配置參數便可接通wep支付寶支付(公鑰查看支付寶和私鑰生成支付寶有生成工具提供)(ps:私鑰生成後須要在支付寶上面配置,放到一個地方去才生效)。具體代碼修改根據公司須要,支付回掉簽名錯誤問題,demo上面的valueStr不須要進行轉碼,直接註釋掉這一行就行。api
下一步生成二維碼(我用的是zxing.jar包生成),經過支付寶掃碼進行h5跳轉到demo裏面的掉起支付頁面,完成支付,回掉處理根據業務需求寫。若是在參數上面加入瀏覽器
sParaTemp.put("app_pay", "Y");//啓用該參數啓用APP錢包支付。(!!!)
這樣在瀏覽器上面wap支付的時候就能直接打開支付寶app。app
下面說退款,退款不要作什麼h5頁面跳轉,只須要後臺httpclient去請求支付寶無密退款接口便可,接口地址:https://mapi.alipay.com/gateway.do。工具
/** * 處理支付寶退款功能 * @param money 退款金額 * @param alipaycode 支付寶交易流水號 * @return * @throws DocumentException */ public boolean oldAlipayRefund(String money,String alipaycode) throws DocumentException{ boolean bl=false; Map resultMap=null; try { resultMap = AssemblyParameter(money, alipaycode); } catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block e.printStackTrace();return bl; } String result = HttpClientUtil.post(AlipayConfig.old_refund_url, null, resultMap); Document document = DocumentHelper.parseText(result); Element root =document.getRootElement(); List<Element> list =root.elements(); for(Element l:list){ if(l.getName().toLowerCase().equals("is_success")){ if(l.getText().equals("T")){ bl=true; } } } return bl; } /** * 拼裝支付寶支付接口所需參數, * @param money 退款金額 * @param alipaycode 支付寶支付完成返回流水號 * @return * @throws UnsupportedEncodingException */ public static Map AssemblyParameter(String money,String alipaycode) throws UnsupportedEncodingException{ SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); Map<String, String> sParaTemp = new HashMap<String, String>(); sParaTemp.put("service", AlipayConfig.oldrefundservice); sParaTemp.put("partner", AlipayConfig.partner); sParaTemp.put("_input_charset", AlipayConfig.input_charset); sParaTemp.put("sign_type", AlipayConfig.sign_type); //sParaTemp.put("notify_url", ""); sParaTemp.put("seller_email", AlipayConfig.seller_email); sParaTemp.put("seller_user_id", AlipayConfig.partner); sParaTemp.put("refund_date",DateUtil.normalDateTimeFormat());//退款時間 sParaTemp.put("batch_no", sdf.format(new Date())+System.currentTimeMillis()/1000);//退款號 sParaTemp.put("batch_num", "1");//退款筆數 sParaTemp.put("detail_data",new String((alipaycode+"^"+money+"^正常退款").getBytes("ISO-8859-1"), "utf-8"));//退款描述//alipaycode+"^"+money+"^"+"aaa" sParaTemp=AlipaySubmit.buildRequestPara(sParaTemp); sdf=null; //創建請求 //String sHtmlText = AlipaySubmit.buildRequest(sParaTemp,"get","確認"); return sParaTemp; }
這個地方有一點須要注意,detail_data,須要轉碼,否則一直是簽名錯誤。退款流水號是支付寶返回的一個流水號,支付完成的時候是須要保存數據庫的,退款須要用到這個流水號!!!post