1.支付寶網頁支付講道理很簡單,若是下載的sdk管用的話(沒錯,我使用下載的sdk,官方給出的JAVA版資源,sdk1.5,到了最終也沒能把支付完成,能夠吊起支付寶,可是一直提示ALI38173,頭疼了老久),基本配置就很少少了,按照官方給出的配置流程,完成基本配置,若有不懂,可參考上篇支付寶支付之app支付(在個人文章中)。php
2.配置完成後直接上核心代碼html
@RequestMapping(value = "/alipay/trade") public ResponseEntity<String> sendAlipay(HttpServletRequest request, HttpServletResponse httpResponse) throws Exception { HttpHeaders responseHeaders = new HttpHeaders(); responseHeaders.set("Content-Type", "application/json;charset=UTF-8"); String form1="<form id='alipaysubmit' name='alipaysubmit' action='https://openapi.alipay.com/gateway.do?charset=UTF-8' method='POST'><input type='hidden' name='biz_content' value='{\"productCode\":\"QUICK_WAP_PAY\",\"body\":\"支付寶公衆號充值\",\"subject\":\"夢想直播充值\",\"out_trade_no\":\"17021712041001000583\",\"total_amount\":\"0.01\",\"timeout_express\":\"1m\"}'/><input type='hidden' name='app_id' value='2016122004460499'/><input type='hidden' name='version' value='1.0'/><input type='hidden' name='format' value='json'/><input type='hidden' name='sign_type' value='RSA'/><input type='hidden' name='method' value='alipay.trade.wap.pay'/><input type='hidden' name='timestamp' value='2017-02-17 12:04:10'/><input type='hidden' name='alipay_sdk' value='alipay-sdk-php-20161101'/><input type='hidden' name='notify_url' value='http://api.dreamlive.tv/deposit/notify_alipay5'/><input type='hidden' name='return_url' value='http://api.dreamlive.tv/deposit/notify_alipay5'/><input type='hidden' name='charset' value='UTF-8'/><input type='hidden' name='sign' value='fQAs7/QIQqkWf/0Z7IM9mpHNygx8L5Y/fO5n80l8ueHMPOfsRVptZzHbUE+8gSunm1QTc1E3V1TW0+peA6gS580q3FQrq+b2fkcQf2uueTp/xDuI6V7rRcwiwRWNl0PksRQNrCvzHWl7Ll+QOlumGmgbHMNuGLxld+3Cv7ZP4Vw='/><input type='submit' value='ok' style='display:none;''></form><script>document.forms['alipaysubmit'].submit();</script>"; /** * 構造支付參數,form1爲示例表單結構,可直接使用 * */ String defort_pay_number="15224441122"; Map<String, String> keyValues = new HashMap<String, String>(); String current_time=Utils.getCurrentTime(); keyValues.put("app_id", PayConfigUtils.getApp_id()); keyValues.put("method", "alipay.trade.wap.pay"); keyValues.put("charset", "UTF-8"); keyValues.put("sign_type", "RSA"); keyValues.put("version", "1.0"); keyValues.put("timestamp", current_time); keyValues.put("biz_content", "{\"timeout_express\":\"30m\",\"product_code\":\"QUICK_MSECURITY_PAY\",\"total_amount\":\""+price+"\",\"subject\":\""+subject+"\",\"body\":\""+body+"\",\"out_trade_no\":\"" + defort_pay_number + "\"}"); keyValues.put("notify_url", PayConfigUtils.getWebUrl()+"alipay/notify"); keyValues.put("return_url", PayConfigUtils.getWebUrl()+"campaign/76/ddlist"); String sign=getSign(keyValues,PayConfigUtils.getPrivate_key()); httpResponse.setContentType("text/html;charset=utf-8"); String form2="<form id='alipaysubmit' name='alipaysubmit' action='https://openapi.alipay.com/gateway.do?charset=UTF-8' method='POST'>\n" + "<input type='hidden' name='biz_content' value='"+keyValues.get("biz_content")+"'/>\n" + "<input type='hidden' name='app_id' value='"+PayConfigUtils.getApp_id()+"'/>\n" + "<input type='hidden' name='version' value='1.0'/>\n" + "<input type='hidden' name='sign_type' value='RSA'/>\n" + "<input type='hidden' name='method' value='alipay.trade.wap.pay'/>\n" + "<input type='hidden' name='timestamp' value='"+current_time+"'/>\n" + "<input type='hidden' name='notify_url' value='"+keyValues.get("notify_url")+"'/>\n" + "<input type='hidden' name='return_url' value='"+keyValues.get("return_url")+"'/>\n" + "<input type='hidden' name='charset' value='utf-8'/>\n" + "<input type='hidden' name='sign' value='"+sign+"'/>\n" + "<input type='submit' value='ok' style='display:none;''></form><script>document.forms['alipaysubmit'].submit();</script>"; httpResponse.getWriter().write(form2);//直接將完整的表單html輸出到頁面 httpResponse.getWriter().flush(); /* String json=""; JSONObject result=new JSONObject(); json = ReturnJsonUtil.returnSuccessJsonString(result, "支付!"); return new ResponseEntity<String>(json, responseHeaders, HttpStatus.OK);*/ } public static String getSign(Map<String, String> map, String rsaKey) { List<String> keys = new ArrayList<String>(map.keySet()); // key排序 Collections.sort(keys); StringBuilder authInfo = new StringBuilder(); for (int i = 0; i < keys.size() - 1; i++) { String key = keys.get(i); String value = map.get(key); authInfo.append(buildKeyValue(key, value, false)); authInfo.append("&"); } String tailKey = keys.get(keys.size() - 1); String tailValue = map.get(tailKey); authInfo.append(buildKeyValue(tailKey, tailValue, false)); String oriSign = SignUtils.sign(authInfo.toString(), rsaKey); String encodedSign = ""; /* try { encodedSign = URLEncoder.encode(oriSign, "UTF-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); }*/ return oriSign.trim().replace("\n",""); } /** * 拼接鍵值對 * * @param key * @param value * @param isEncode * @return */ private static String buildKeyValue(String key, String value, boolean isEncode) { StringBuilder sb = new StringBuilder(); sb.append(key); sb.append("="); if (isEncode) { try { sb.append(URLEncoder.encode(value, "UTF-8")); } catch (UnsupportedEncodingException e) { sb.append(value); } } else { sb.append(value); } return sb.toString(); }
3.支付寶網頁支付能夠徹底由後臺完成,因此吊起支付寶的工做不須要前臺ajax獲取數據,上面代碼中的api直接請求便可,連接中傳入必要的參數(如支付id,等)(不要使用ajax)! java