导入依赖:
<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("退款失败"); } }
原文地址:https://www.jb51.cc/wenti/3282072.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。