赞
踩
导入依赖:
<dependency> <groupId>com.alipay.sdk</groupId> <artifactId>alipay-sdk-java</artifactId> <version>4.33.1.ALL</version> </dependency>
1、支付宝H5支付
public void payH5(HttpServletRequest request, HttpServletResponse response,String orderSn) throws Exception{ AlipayConfig alipayConfig = new AlipayConfig(); //设置网关地址 alipayConfig.setServerUrl("https://openapi.alipay.com/gateway.do"); //设置应用ID alipayConfig.setAppId(""); //设置应用私钥 alipayConfig.setPrivateKey(APP_PRIVATE_KEY); //设置请求格式,固定值json alipayConfig.setFormat("json"); //设置字符集 alipayConfig.setCharset("UTF-8"); //设置签名类型 alipayConfig.setSignType("RSA2"); //设置应用公钥证书路径,项目路径 alipayConfig.setAppCertPath("src/main/resources/appCertPublicKey_2021003135656021.crt"); //设置支付宝公钥证书路径 alipayConfig.setAlipayPublicCertPath("src/main/resources/alipayCertPublicKey_RSA2.crt"); //设置支付宝根证书路径 alipayConfig.setRootCertPath("src/main/resources/alipayRootCert.crt"); //构造client AlipayClient alipayClient = new DefaultAlipayClient(alipayConfig); // Orders orders=ordersMapper.findByOrderSn(orderSn); JSONObject bizContent = new JSONObject(); bizContent.put("out_trade_no", orderSn); bizContent.put("subject", "orderId"); bizContent.put("product_code", "QUICK_WAP_WAY"); bizContent.put("total_amount", "0.01"); // 请求响应返回对象:AlipayTradeWapPayResponse AlipayTradeWapPayRequest alipayRequest = new AlipayTradeWapPayRequest();//创建API对应的request //跳转链接 alipayRequest.setReturnUrl("http://domain.com/CallBack/return_url.jsp"); //回调地址 alipayRequest.setNotifyUrl("http://********/ali/pay/call");//在公共参数中设置回跳和通知地址 alipayRequest.setBizContent(bizContent.toString());//填充业务参数 String form=""; try { form = alipayClient.pageExecute(alipayRequest).getBody(); //调用SDK生成表单 } catch (AlipayApiException e) { e.printStackTrace(); } response.setContentType("text/html;charset=" + "UTF-8"); response.getWriter().write(form);//直接将完整的表单html输出到页面 System.out.println("-----------------------------"+form); response.getWriter().flush(); response.getWriter().close(); }
2、支付宝回调
public String call(HttpServletRequest request, HttpServletResponse response) throws Exception { Map<String, String> params = convertRequestParamsToMap(request); // 将异步通知中收到的待验证所有参数都存放到map中 String paramsJson = JSONUtil.toJsonStr(params); logger.info("支付宝回调参数,{}", paramsJson); try { // 调用SDK验证签名,注意这里是支付宝公钥(*既不是私钥,也不是应用公钥) boolean signVerified = AlipaySignature.rsaCertCheckV1(params, "src/main/resources/alipayCertPublicKey_RSA2.crt", "UTF-8", "RSA2"); if (signVerified) { logger.info("支付宝回调签名认证成功"); //验签通过 获取交易状态 String tradeStatus = params.get("trade_status"); //只有交易通知状态为TRADE_SUCCESS或TRADE_FINISHED时,支付宝才会认定为买家付款成功。 if (tradeStatus.equals("TRADE_SUCCESS") ||tradeStatus.equals("TRADE_FINISHED")) { System.out.println("********************************处理业务逻辑**************************************************************"); //TODO 处理自身业务逻辑 cn.hutool.json.JSONObject jsonObject = JSONUtil.parseObj(paramsJson); String bankOrderNo = jsonObject.get("trade_no").toString(); String orderSn = jsonObject.get("out_trade_no").toString(); String amount = jsonObject.get("total_amount").toString(); // String id = jsonObject.get("subject").toString(); // Integer orderId = Integer.parseInt(id); // System.out.println("主订单ID----"+orderId); System.out.println(orderSn); //TODO 操作自身业务逻辑 // 如果签名验证正确,立即返回success,后续业务另起线程单独处理 // 业务处理失败,可查看日志进行补偿,跟支付宝已经没多大关系。 System.out.println("************************************************处理业务逻辑结束********************************************"); return "success"; }else { return "failure"; } } else { logger.info("支付宝回调签名认证失败,signVerified=false, paramsJson:{}", paramsJson); return "failure"; } } catch (AlipayApiException e) { logger.error("支付宝回调签名认证失败,paramsJson:{},errorMsg:{}", paramsJson, e.getMessage()); return "failure"; } }
3、支付宝证书退款
@GetMapping("/refoundMoney") public Result refoundMoney(@RequestParam String orderSn) throws AlipayApiException, JDOMException, IOException { //获得初始化的AlipayClient // AlipayClient alipayClient = new DefaultAlipayClient(AlipayConfigs.gatewayUrl, AlipayConfigs.APP_ID, // AlipayConfigs.APP_PRIVATE_KEY, "json", AlipayConfigs.CHARSET, AlipayConfigs.ALIPAY_PUBLIC_KEY, AlipayConfigs.sign_type); AlipayConfig alipayConfig = new AlipayConfig(); //设置网关地址 alipayConfig.setServerUrl("https://openapi.alipay.com/gateway.do"); //设置应用ID alipayConfig.setAppId(""); //设置应用私钥 alipayConfig.setPrivateKey(APP_PRIVATE_KEY); //设置请求格式,固定值json alipayConfig.setFormat("json"); //设置字符集 alipayConfig.setCharset("UTF-8"); //设置签名类型 alipayConfig.setSignType("RSA2"); //设置应用公钥证书路径 alipayConfig.setAppCertPath("src/main/resources/appCertPublicKey_2021003135656021.crt"); // alipayConfig.setAppCertPath("/home/cert/appCertPublicKey_2021003135656021.crt"); //设置支付宝公钥证书路径 alipayConfig.setAlipayPublicCertPath("src/main/resources/alipayCertPublicKey_RSA2.crt"); // alipayConfig.setAlipayPublicCertPath("/home/cert/alipayCertPublicKey_RSA2.crt"); //设置支付宝根证书路径 // alipayConfig.setRootCertPath("/home/cert/alipayRootCert.crt"); alipayConfig.setRootCertPath("src/main/resources/alipayRootCert.crt"); //构造client AlipayClient alipayClient = new DefaultAlipayClient(alipayConfig); // Refund refunds=refundMapper.findBySn(refundSn); AlipayTradeRefundRequest request = new AlipayTradeRefundRequest(); Orders orders=orderMapper.findByOrderSn(orderSn); JSONObject bizContent = new JSONObject(); bizContent.put("out_trade_no", orderSn); //都使用商户订单号,不适用支付宝的(不知道为什么使用支付宝的会错) bizContent.put("refund_amount", orders.getPayAmount()); bizContent.put("refund_reason", "买错了我要退钱"); request.setBizContent(bizContent.toString()); AlipayTradeRefundResponse response = alipayClient.certificateExecute(request); if(response.isSuccess()){ System.out.println("调用成功------返回参数:"+response.getBody()); JSONObject jsonObject= JSON.parseObject(response.getBody()); System.out.println("--------------------------------------------map"+jsonObject); JSONObject jsonObject1= (JSONObject) jsonObject.get("alipay_trade_refund_response"); System.out.println("------------------------------------"+jsonObject1); String tradeNo=jsonObject1.getString("trade_no"); System.out.println("-------------------------------trade_no"+tradeNo); // System.out.println("--------------------------------------------"+map.get("alipay_trade_refund_response")); return Result.success(); } else { // System.out.println("调用失败"); return Result.fail("退款失败"); } }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。