- 引入支付宝jar
<dependency> <groupId>com.pentahohub.nexus</groupId> <artifactId>alipay-sdk-java</artifactId> <version>20170324180803</version> </dependency> <dependency> <groupId>com.pentahohub.nexus</groupId> <artifactId>alipay-trade-sdk</artifactId> <version>20161215</version> </dependency> <dependency> <groupId>org.hamcrest</groupId> <artifactId>hamcrest-core</artifactId> <version>1.3</version> </dependency> <dependency> <groupId>commons-codec</groupId> <artifactId>commons-codec</artifactId> <version>1.10</version> </dependency> <dependency> <groupId>com.pentahohub.nexus</groupId> <artifactId>core</artifactId> <version>2.1</version> </dependency>
-
自定义配置类
public class AlipayConfig { // 应用ID,您的APPID,收款账号既是您的APPID对应支付宝账号 public static String APP_ID = ""; // 商户私钥,您的PKCS8格式RSA2私钥 public static String MERCHANT_PRIVATE_KEY = ""; // 支付宝公钥,查看地址:https://openhome.alipay.com/platform/keyManage.htm // 对应APPID下的支付宝公钥。 public static String ALIPAY_PUBLIC_KEY = ""; // 服务器异步通知页面路径 需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问 public static String NOTIFY_URL = ""; // 页面跳转同步通知页面路径 需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问 public static String RETURN_URL = ""; // 签名方式 public static String SIGN_TYPE = "RSA2"; // 字符编码格式 public static String CHARSET = "utf-8"; // 支付宝网关 public static String GATEWAYURL = "https://openapi.alipay.com/gateway.do"; // 商户支付宝唯一PID public static String PID = ""; }
-
增加controller
@Controller @RequestMapping("/alipay") public class AliPay { @GetMapping("/pay") public void pay(Model model,HttpServletResponse response) throws Exception { // 获得初始化的AlipayClient AlipayClient alipayClient = new DefaultAlipayClient(AlipayConfig.GATEWAYURL, AlipayConfig.APP_ID, AlipayConfig.MERCHANT_PRIVATE_KEY, "json", AlipayConfig.CHARSET, AlipayConfig.ALIPAY_PUBLIC_KEY, AlipayConfig.SIGN_TYPE); // 设置请求参数 AlipayTradePagePayRequest alipayRequest = new AlipayTradePagePayRequest(); alipayRequest.setReturnUrl(AlipayConfig.RETURN_URL); alipayRequest.setNotifyUrl(AlipayConfig.NOTIFY_URL); // 商户订单号,商户网站订单系统中唯一订单号,必填 String out_trade_no = UUID.randomUUID().toString(); // 付款金额,必填 String total_amount = ""; // 订单名称,必填 String subject = ""; // 商品描述,可空 String body = ""; alipayRequest.setBizContent("{\"out_trade_no\":\"" + out_trade_no + "\"," + "\"total_amount\":\"" + total_amount + "\"," + "\"subject\":\"" + subject + "\"," + "\"body\":\"" + body + "\"," + "\"product_code\":\"FAST_INSTANT_TRADE_PAY\"}"); // 请求 String result = alipayClient.pageExecute(alipayRequest).getBody(); // 输出 response.setContentType("text/html;charset=utf-8"); response.getWriter().write(result); response.getWriter().flush(); } }
-
异步接口验证SDK
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[]) 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); log.info("params:" + valueStr); } boolean signVerified = false; try { //切记ALIPAY_PUBLIC_KEY是支付宝的公钥,请去open.alipay.com对应应用下查看。 //调用SDK验证签名 signVerified = AlipaySignature.rsaCheckV1(params, AlipayConfig.ALIPAY_PUBLIC_KEY, AlipayConfig.CHARSET, AlipayConfig.SIGN_TYPE); } catch (AlipayApiException e) { e.printStackTrace(); } PrintWriter out = null; try { out = response.getWriter(); }catch (IOException e){ e.printStackTrace(); } log.info("signVerified=============>" + signVerified); if(signVerified){ //验签成功 String out_trade_no = request.getParameter("out_trade_no"); String trade_status = request.getParameter("trade_status"); if("TRADE_FINISHED".equals(trade_status)){ /* 判断该笔订单是否在商户网站已经做过处理,如果没有处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序 如果有做过处理,不执行商户的业务程序 注意: 退款日期超过可退款的期限后(如三个月可退款),支付宝系统发送该交易状态通知 */ }else if("TRADE_SUCCESS".equals(trade_status)){ //业务处理 } out.println("success"); }else{ out.println("fail"); }
-
完成
转载于:https://my.oschina.net/xpx/blog/1863944