1.支付宝网页支付讲道理很简单,如果下载的sdk管用的话(没错,我使用下载的sdk,官方给出的JAVA版资源,sdk1.5,到了最终也没能把支付完成,可以吊起支付宝,但是一直提示ALI38173,头疼了老久),基本配置就不多少了,按照官方给出的配置流程,完成基本配置,如有不懂,可参考上篇支付宝支付之app支付(在我的文章中)。
2.配置完成后直接上核心代码
@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'> " + "<input type='hidden' name='biz_content' value='"+keyValues.get("biz_content")+"'/> " + "<input type='hidden' name='app_id' value='"+PayConfigUtils.getApp_id()+"'/> " + "<input type='hidden' name='version' value='1.0'/> " + "<input type='hidden' name='sign_type' value='RSA'/> " + "<input type='hidden' name='method' value='alipay.trade.wap.pay'/> " + "<input type='hidden' name='timestamp' value='"+current_time+"'/> " + "<input type='hidden' name='notify_url' value='"+keyValues.get("notify_url")+"'/> " + "<input type='hidden' name='return_url' value='"+keyValues.get("return_url")+"'/> " + "<input type='hidden' name='charset' value='utf-8'/> " + "<input type='hidden' name='sign' value='"+sign+"'/> " + "<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(" ",""); } /** * 拼接键值对 * * @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)!