该文章主要讲述支付宝账号、秘钥申请以后,接口对接部分,如要申请账号,请到官网https://www.alipay.com/
下面通过两部分来跟支付宝对接,第一部分是申请调用支付宝,前端页面发起请求,后台接口进行处理,生成一个form表单给页面,页面直接调用支付宝;第二部分是支付宝异步通知结果,后台接口直接接收。
请求接口:
public String aliPayRequest(OrderPay orderPay, HttpServletResponse response) { //调用支付宝请求 AlipayClient client = new DefaultAlipayClient(AlipayConfig.URL, AlipayConfig.APPID, AlipayConfig.RSA_PRIVATE_KEY, AlipayConfig.FORMAT, AlipayConfig.CHARSET, AlipayConfig.ALIPAY_PUBLIC_KEY,AlipayConfig.SIGNTYPE); AlipayTradeWapPayRequest alipay_request=new AlipayTradeWapPayRequest(); // 封装请求支付信息 alipay_request.setBizContent("{" + " \"out_trade_no\":\""+orderPay.getOrder_id()+"\"," + " \"total_amount\":\""+orderPay.getActual_amount()+"\"," + " \"subject\":\"门票\"," + " \"product_code\":\"QUICK_WAP_WAY\"" + " }");//填充业务参数 // 设置异步通知地址 alipay_request.setNotifyUrl(AlipayConfig.notify_url); // 设置同步地址 这个没有 alipay_request.setReturnUrl(AlipayConfig.return_url); log.info("调用支付宝请求:"+ JSON.toJSONString(alipay_request)); // form表单生产 String form = ""; try { // 调用SDK生成表单 form = client.pageExecute(alipay_request).getBody(); response.setContentType("text/html;charset=" + AlipayConfig.CHARSET); response.getWriter().write(form);//直接将完整的表单html输出到页面 response.getWriter().flush(); response.getWriter().close(); }catch(Exception e) { log.error(e.getMessage()); throw new CustomException(e.getMessage()); } return ""; }
异步回调接口:
@ResponseBody @RequestMapping(value = "/spotOrder/receiveFromAlipay") public void receiveFromAlipay(HttpServletRequest request, HttpServletResponse response) throws IOException { log.info("##################进入SpotOrderController的receiveFromAlipay方法####################"); String result = "fail"; BaseResult<OrderPay> baseResult = new BaseResult<OrderPay>(); try { 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[]) request