pom.xml

<!-- 支付宝支付 --><dependency><groupId>com.alipay.sdk</groupId><artifactId>alipay-sdk-java</artifactId><version>3.7.26.ALL</version></dependency>

controller层

package com.wen.controller;import com.alipay.api.AlipayApiException;
import com.wen.service.AlipayService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.web.bind.annotation.*;import java.util.HashMap;
import java.util.Map;/*** 支付宝* @data*/
@CrossOrigin
@RestController
@RequestMapping("/alipay")
public class AlipayController {@Autowired@Qualifier("alipayService")private AlipayService alipayService;/*** web 订单支付* @param outTradeNo 订单编号* @param totalAmount 订单价格* @param subject 商品名称* @return* @throws Exception*/@RequestMapping("/getPagePay")public Map<Object, Object> getPagePay(String outTradeNo,Integer totalAmount,String subject) throws Exception{System.out.println(outTradeNo+totalAmount+subject);String pay = alipayService.webPagePay(outTradeNo, totalAmount, subject);System.out.println(pay);Map<Object, Object> pays = new HashMap<>();pays.put("pay", pay);return pays;}/*** app 订单支付*//**** @param outTradeNo 订单编号* @param totalAmount 订单价格* @param subject 商品名称* @throws Exception*/@RequestMapping("/getAppPagePay")public void getAppPagePay( String outTradeNo ,Integer totalAmount,String subject) throws Exception{String pay = alipayService.appPagePay(outTradeNo, totalAmount, subject);System.out.println(pay);}/*** 交易查询* @param outTradeNo 订单编号* @throws Exception*/@PostMapping("/aipayQuery")public void alipayQuery(String outTradeNo) throws Exception{String query = alipayService.query(outTradeNo);System.out.println(query);}/*** 退款* @param outTradeNo 订单编号* @param outRequestNo  标识一次退款请求,同一笔交易多次退款需要保证唯一,如需部分退款,则此参数必传* @param refundAmount 订单金额* @param refundReason 退货原因* @throws AlipayApiException*/@GetMapping("alipayRefund")public void alipayRefund(@RequestParam("outTradeNo")String outTradeNo,@RequestParam(value = "outRequestNo", required = false)String outRequestNo,@RequestParam(value = "refundAmount", required = false)Integer refundAmount,String refundReason) throws AlipayApiException {String refund = alipayService.refund(outTradeNo, refundReason, refundAmount, outRequestNo);System.out.println(refund);return ;}/*** 退款查询@param outTradeNo 订单编号(唯一)@param outRequestNo 标识一次退款请求,同一笔交易多次退款需要保证唯一,如需部分退款,则此参数必传* @throws AlipayApiException*/@PostMapping("refundQuery")public void refundQuery(String outTradeNo,String outRequestNo) throws AlipayApiException{String refund = alipayService.refundQuery(outTradeNo, outRequestNo);System.out.println(refund);return ;}/*** 交易关闭* @throws AlipayApiException*/@PostMapping("alipayclose")public void alipayclose(String outTradeNo) throws AlipayApiException {String close = alipayService.close(outTradeNo);System.out.println(close);return ;}@RequestMapping("/errorOrder")public String errorOrder(){return "error";}@RequestMapping("/returnUrl")public String returnUrl(){return "return";}
}

AlipayConfig

package com.wen.config;import java.io.FileWriter;
import java.io.IOException;/*** 支付宝支付配置类*/
public class AlipayConfig {// 应用ID,您的APPID,收款账号既是您的APPID对应支付宝账号public static String APP_ID = "2021000117693332";// 商户私钥,您的PKCS8格式RSA2私钥public static String MERCHANT_PRIVATE_KEY = "MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCHObS89y6mHKVY1WpLenvlUEWhqXAb5zAFqm9LOsOUEmqsgezF05B5QDAy/I7exAiKaanu2ciikCodlBnY/B0JH90JC6MzzSihs2v2MY0wEeANLStP6bTjkCuSDLwObZxNTPEF0VBlqi4jzLSG2XJvkczI2strK8jI06tnAMUY1cS9CIe1ICmHLkd55ABwn4WDuoyQo589/Qm646KUmkcAeYfFo5EbaRZtvJlKcCuFQMWvlAOBRG1JJm5Tnfg3XJ41698+BNxQplbVr7XIxUoWnHqBffEJE5/HSuZUpcQv75SMbAa0DT3Lf6W3cEdIdSGznP+UMH9e9NizgCVrwlmzAgMBAAECggEAYcejXmSqUakzEro3Q17NCfLydsRLcZHJUr97/H0AgSiUBCtqp12lAVgdwjCHqqM7vcJMA49tGcd+/KZjzlf3MurcbLcCiumVsN9JeNs5yYGTblO0FvPaPha4usIElbZCqE6zlc5WAT1+YZqbC0tfCTf3SWGUZ+lgJX+RWEjhPGP/MJrDsazEz1JVXnCuNwVrWpdP4IdnmA5EX8UGwIHhxOlZ46JB4maj4g9h9YQftbfgX4aopJtwuAoXJmti7toy1UzguSnP/MvxOaMIQebUh9f9y3roUOaFLSOt2R/xJX3rRMJrWkdj+qytdMYGiLg1FgHRWWBC53CE2OcMfk5GOQKBgQDWiBT8lkZj7Vssgkw7kfUK7aez0tBCmOax/Ba9JDLZLflRyVPF0IMiJQvFqbEu2s3OvEciVaYqaffxyZRKDmzRRer3otm/LGAIKV79sOG1htn7a3+9B0ieetqeJ61eu3rsSlzhexSlM3zG0++niEJFEyZWTHEYIwZomCqa4PIVpQKBgQChXTlm2TRO9EFFoPWKXd8AXRw9BYEptLznPxZUXOTEV+esRR7Q3o/PlAxuEEnBPPpRsVGkr+NbkU5UsMogzUt50A//f9d6TZAxEmcbIV0hbazTPh2wC6yfjgxAWV2pncEerd13lEMz+rhen85f7+qzn6zitXuKZH+1pq6LQ6MCdwKBgEB7yOsfdGsG5lfblnR1a9VsF/N6U3UhJn6rSl5x6gLTydQmktKr2S7DOeWhGwv9Ys1YVH1ihz7KeWeo8rTL3zOMM5NZ1N+cxATQAqh4qW956D2lU1ELRm20ec/+FyOZcNpjg8WWzF7XuhK9k5Sk5V6D4gsgkQHzTTLVQkEpijqtAoGAZoK0zrO52VauiK9ijY5o9vAv2kw+6+HYCAg6BUomQt2dXgFjPEnHjpV8+Ab88/frBi7hsP/ULf23h3HwVrpU8oPNRgFPQHE54xLP0Zp2caAdJO3XKlmgRpSVD+Q17mU7pGPLyAW2U7U5n1NiZewibA5KZJPqcda6kwna5LoJOq0CgYEAkHX6ATn51uUZoeO26STyfMvX1LXzN02i3uDm2rOLJ/eTYCctowXLO9gjygxrbvPERG/hObaz1oVw/NJ8ymzhqF3voJxoY0KlIs6vLLaZfW76pZMQ4mWz10v6lJMiWxpa5kVpF26UKdAgyTyY+SU4rVjXBL3xMmagDNkor1gFmNc=";// 支付宝公钥,查看地址:https://openhome.alipay.com/platform/keyManage.htm 对应APPID下的支付宝公钥。public static String ALIPAY_PUBLIC_KEY = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApevJdSI5y9p9fX8x6WxZwQFLWdvTVF1zmo4TxJnG/0KnwOg2XtdAQwsWf2eQMpHdvd1LG+H+5ztpN3YDymt9DkzVbVkqqwEvcoS8tl/8tCknbs80t18FIMcOJe/nFBvBty/MB6wfdU2mM+e04j3d0VtLXq9h/4r/PCIEkTp3QKRuJfjLPCJUF3FLIo25IvoFxSqXrtBVh6PjA7CSsSvIHQdoUTZ4CXfHJFMUnwD0tKILHf4iy/f7e0+wzC7t6/n2K7Fc01WQv/omyQCscvaG1XXMaJ34jj8POjYApc5tYKDSII5vNx4B0PoCPGOCjtY+uvd6KryFSRg2ZX95gvUtjQIDAQAB";// 服务器异步通知页面路径  需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问public static String notify_url = "http://www.jiuxiangheni.com";// 页面跳转同步通知页面路径 需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问public static String return_url = "http://www.tangyuxi.cn";// 签名方式public static String SIGN_TYPE = "RSA2";// 字符编码格式public static String CHARSET = "utf-8";// 支付宝网关public static String GATEWAYURL = "https://openapi.alipaydev.com/gateway.do";// 支付宝网关public static String LOG_PATH = "D:\\";//↑↑↑↑↑↑↑↑↑↑请在这里配置您的基本信息↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑/*** 写日志,方便测试(看网站需求,也可以改成把记录存入数据库)** @param sWord 要写入日志里的文本内容*/public static void logResult(String sWord) {FileWriter writer = null;try {writer = new FileWriter(LOG_PATH + "alipay_log_" + System.currentTimeMillis() + ".txt");writer.write(sWord);} catch (Exception e) {e.printStackTrace();} finally {if (writer != null) {try {writer.close();} catch (IOException e) {e.printStackTrace();}}}}}

service

import com.alipay.api.AlipayApiException;/*** 支付接口*/
public interface AlipayService {/*** web端订单支付* @param outTradeNo    订单编号(唯一)* @param totalAmount   订单价格* @param subject       商品名称*/String webPagePay(String outTradeNo, Integer totalAmount, String subject) throws Exception;/*** app端订单支付* @param outTradeNo    订单编号* @param totalAmount   订单价格* @param subject       商品名称*/String appPagePay(String outTradeNo, Integer totalAmount, String subject) throws Exception;/*** 退款* @param outTradeNo    订单编号* @param refundReason  退款原因* @param refundAmount  退款金额* @param outRequestNo  标识一次退款请求,同一笔交易多次退款需要保证唯一,如需部分退款,则此参数必传*/String refund(String outTradeNo, String refundReason, Integer refundAmount, String outRequestNo) throws AlipayApiException;/*** 交易查询* @param outTradeNo 订单编号(唯一)*/String query(String outTradeNo) throws AlipayApiException;/*** 交易关闭* @param outTradeNo 订单编号(唯一)*/String close(String outTradeNo) throws AlipayApiException;/*** 退款查询* @param outTradeNo 订单编号(唯一)* @param outRequestNo 标识一次退款请求,同一笔交易多次退款需要保证唯一,如需部分退款,则此参数必传*/String refundQuery(String outTradeNo, String outRequestNo) throws AlipayApiException;
}

service实现类

package com.wen.service.impl;import com.alipay.api.AlipayApiException;
import com.alipay.api.AlipayClient;
import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.domain.AlipayTradeWapPayModel;import com.alipay.api.request.*;
import com.wen.config.AlipayConfig;
import com.wen.service.AlipayService;
import org.springframework.stereotype.Service;/*** 支付实现类*/@Service("alipayService")
public class AlipayServiceImpl implements AlipayService {/** 调取支付宝接口 web端支付*/DefaultAlipayClient alipayClient = new DefaultAlipayClient(AlipayConfig.GATEWAYURL, AlipayConfig.APP_ID, AlipayConfig.MERCHANT_PRIVATE_KEY, "json", AlipayConfig.CHARSET, AlipayConfig.ALIPAY_PUBLIC_KEY, AlipayConfig.SIGN_TYPE);/** 调取支付宝接口app端支付*/AlipayClient alipayClients = new DefaultAlipayClient(AlipayConfig.GATEWAYURL, AlipayConfig.APP_ID, AlipayConfig.MERCHANT_PRIVATE_KEY, "json", AlipayConfig.CHARSET, AlipayConfig.ALIPAY_PUBLIC_KEY, AlipayConfig.SIGN_TYPE);@Overridepublic String webPagePay(String outTradeNo, Integer totalAmount, String subject) throws Exception {AlipayTradePagePayRequest alipayRequest = new AlipayTradePagePayRequest();/** 同步通知,支付完成后,支付成功页面*/alipayRequest.setReturnUrl(AlipayConfig.return_url);/** 异步通知,支付完成后,需要进行的异步处理*/alipayRequest.setNotifyUrl(AlipayConfig.notify_url);alipayRequest.setBizContent("{\"out_trade_no\":\""+ outTradeNo +"\","+ "\"total_amount\":\""+ totalAmount +"\","+ "\"subject\":\""+ subject +"\","+ "\"body\":\"商品名称\","+ "\"timeout_express\":\"90m\","+ "\"product_code\":\"FAST_INSTANT_TRADE_PAY\"}");/**转换格式*/String result = alipayClient.pageExecute(alipayRequest).getBody().replace('\"','\'').replace('\n',' ');return result;}@Overridepublic String refund(String outTradeNo,String refundReason,Integer refundAmount,String outRequestNo) throws AlipayApiException {AlipayTradeRefundRequest alipayRequest = new AlipayTradeRefundRequest();/** 调取接口*/alipayRequest.setBizContent("{\"out_trade_no\":\""+ outTradeNo +"\","+ "\"refund_amount\":\""+ refundAmount +"\","+ "\"refund_reason\":\""+ refundReason +"\","+ "\"out_request_no\":\""+ outRequestNo +"\"}");String result = alipayClient.execute(alipayRequest).getBody();return result;}@Overridepublic String query(String outTradeNo) throws AlipayApiException {AlipayTradeQueryRequest alipayRequest = new AlipayTradeQueryRequest();/**请求接口*/alipayRequest.setBizContent("{\"out_trade_no\":\""+ outTradeNo +"\","+"\"trade_no\":\""+ "" +"\"}");/**转换格式*/String result = alipayClient.execute(alipayRequest).getBody();return result;}@Overridepublic String close(String outTradeNo) throws AlipayApiException {AlipayTradeCloseRequest alipayRequest = new AlipayTradeCloseRequest();alipayRequest.setBizContent("{\"out_trade_no\":\""+ outTradeNo +"\"," +"\"trade_no\":\""+ "" +"\"}");String result = alipayClient.execute(alipayRequest).getBody();return result;}@Overridepublic String refundQuery(String outTradeNo , String outRequestNo) throws AlipayApiException {AlipayTradeFastpayRefundQueryRequest alipayRequest = new AlipayTradeFastpayRefundQueryRequest();/** 请求接口*/alipayRequest.setBizContent("{\"out_trade_no\":\""+ outTradeNo +"\","+"\"out_request_no\":\""+ outRequestNo +"\"}");/** 格式转换*/String result = alipayClient.execute(alipayRequest).getBody();return result;}@Overridepublic String appPagePay(String outTradeNo, Integer totalAmount, String subject) throws Exception {AlipayTradeWapPayRequest alipayRequest=new AlipayTradeWapPayRequest();/** 同步通知,支付完成后,支付成功页面*/alipayRequest.setReturnUrl(AlipayConfig.return_url);/** 异步通知,支付完成后,需要进行的异步处理*/alipayRequest.setNotifyUrl(AlipayConfig.notify_url);/**销售产品码(固定)*/String productCode="QUICK_WAP_WAY";/** 进行赋值 */AlipayTradeWapPayModel wapPayModel=new AlipayTradeWapPayModel();wapPayModel.setOutTradeNo(outTradeNo);wapPayModel.setSubject(subject);wapPayModel.setTotalAmount(totalAmount.toString());wapPayModel.setBody("商品名称");wapPayModel.setTimeoutExpress("2m");wapPayModel.setProductCode(productCode);alipayRequest.setBizModel(wapPayModel);/** 格式转换*/String result = alipayClients.pageExecute(alipayRequest).getBody().replace('\"','\'').replace('\n',' ');return result;}}

前端发送接收代码

                         let params = new URLSearchParams();params.append('outTradeNo', orderid);params.append('totalAmount', resp.data.sum);params.append('subject', resp.data.name);axios.post("http://127.0.0.1:7000/alipay/getPagePay", params).then(function (resp) {$("#div").html(resp.data.pay);//div盒子});

这是和网上大哥做的,但是容易出现钓鱼网站的问题
第一种解决办法是删除缓存更换浏览器,但还是要看
第二种解决办法(我也没用过,老师教的):

//设置请求参数
AlipayTradePagePayRequest alipayRequest = new AlipayTradePagePayRequest();
//同步回调,如果本地调度只会走同步,这里的界面就是你付款后跳转的界面
alipayRequest.setReturnUrl(AlipayConfig.return_url);
//异步回调,没有服务器实际上我们用不到
alipayRequest.setNotifyUrl(AlipayConfig.notify_url);
//订单名称,必填
String subject=request.getParameter("Name");
//商户订单号,商户网站订单系统中唯一订单号,必填
String out_trade_no =request.getParameter("Order");
//付款金额,必填
ShopName String total_amount =request.getParameter("Money");
//商品描述,可空
String body ="购物测试";
// 该笔订单允许的最晚付款时间,逾期将关闭交易。取值范围:1m~15d。m-分钟,h-小时,d- 天,1c-当天(1c-当天的情况下,无论交易何时创建,都在0点关闭)。 该参数数值不接受小数点, 如 1.5h,可转换为 90m。
String timeout_express = "1c"; alipayRequest.setBizContent("{\"out_trade_no\":\"" + out_trade_no + "\"," + "\"total_amount\":\"" + total_amount + "\"," + "\"subject\":\"" + subject + "\"," + "\"body\":\"" + body + "\"," + "\"timeout_express\":\""+ timeout_express +"\"," + "\"product_code\":\"FAST_INSTANT_TRADE_PAY\"}");
/* //请求
String url = "";
try {url = alipayClient.pageExecute(alipayRequest).getBody(); //调用SDK生 成表单 } catch (AlipayApiException e) {    e.printStackTrace();        }response.setContentType("text/html;charset=" + AlipayConfig.CHARSET); return url;*/ //这两种方式都是可以的,就是上面那种可能很容易报错,看运气是否成功 //请求 String form = ""; try {form = alipayClient.pageExecute(alipayRequest).getBody(); //调用SDK生 成表单 } catch (AlipayApiException e) { e.printStackTrace(); }response.setContentType("text/html;charset=" + AlipayConfig.CHARSET); response.getWriter().write(form);//直接将完整的表单html输出到页面 response.getWriter().flush();response.getWriter().close(); return form;

springboot集成支付宝沙箱支付相关推荐

  1. SpringBoot集成支付宝沙箱手机网站支付详细流程和踩坑分享

    描述 本文主要讲解SpringBoot集成支付宝沙箱手机网站支付,即网页点击按钮发起支付,跳转到沙箱app付款 由于其他博客的流程大多笼统,有时候并不能找到正确的集成方式,本文尽可能详细的阐述付款,异 ...

  2. springboot整合支付宝沙箱支付

    springboot整合支付宝沙箱支付 1.简介 支付宝开发平台地址:https://open.alipay.com/develop/sandbox/app 对于学生来说,目前网上确实没有比较统一而且 ...

  3. Spring Boot 集成支付宝 沙箱支付

    1.沙箱环境简介&基础开发配置 1.进入支付宝官网,扫码进入,网址:https://open.alipay.com/platform/home.htm 2.找到开发服务进入下面的研发服务 3. ...

  4. Springboot实现支付宝沙箱支付功能

    我们在做开发时很多时候会涉及到支付功能,常见会对接支付宝和微信支付,本文将对JAVA对接支付宝进行详细的讲解. 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳 ...

  5. springboot 集成支付宝支付

    最简单的springboot集成支付宝 1 注册沙箱 沙箱是一个模拟环境登录,百度蚂蚁金服开放平台,支付宝扫码登录如下 然后沙箱需要注册一下,非常之简单,注册好以后进入到如下页面,选沙箱工具,然后下载 ...

  6. java后端实现集成支付宝APP支付(沙箱环境)

    沙箱环境集成支付宝APP支付后端实现 前言 获取支付宝相关信息 整体开发流程 1.获取核心参数 2.将支付宝SDK集成到项目中 3.后台使用支付宝SDK与支付宝进行交互逻辑 1.将支付宝公共信息参数写 ...

  7. 基于SpringBoot vue的电脑商城平台源码和论文含支付宝沙箱支付

    演示视频: 基于SpringBoot vue的电脑商城平台源码和论文含支付宝沙箱支付演示视频 支付宝沙箱: package com.java.controller;import java.util.* ...

  8. SpringBoot 集成第三方聚合支付 微信、支付宝

    SpringBoot 集成第三方聚合支付 1. 创建Spring Boot项目 2. 添加依赖 3. 配置支付宝.微信 4. 实现支付接口 5. 实现支付服务 6. 实现支付回调接口 7. 测试支付 ...

  9. SpringBoot+Vue整合支付宝沙箱支付

    SpringBoot+Vue2整合实现支付宝沙箱支付 原创不易,转载请注明!!原创不易,转载请注明!!原创不易,转载请注明!!原创不易,转载请注明!!原创不易,转载请注明!! 在进行电脑网站开发时我们 ...

最新文章

  1. git命令每次都要输入账号密码解决方法
  2. 旗帜鲜明地反对“码而优则仕”
  3. CodeChef--SEPT14小结
  4. easymock快速入门
  5. 提高 Java 代码质量
  6. Java final、static final 讲解
  7. 由CloudStack项目引起的ESXI嵌套虚拟化引起的二级虚拟机无法被访问
  8. java在线找错_平台配置及测试错误提示及解决方案
  9. c++11并发指南系列
  10. 自绘LISTVIEW的滚动条(Delphi实现)
  11. windows 启动c\windows\systen32\spool\DRIVERS\W32x86\3\ssnetmon. dll 时出现问题 找不到指定模块
  12. 计算机基础知识是几年级,[初中一年级]计算机基础知识ppt模版课件.ppt
  13. 微信公众号H5合成图片长按下载
  14. 服务器远程管理简介(ILO,BMC,RSA)
  15. Hadoop Steaming编程示例
  16. Android 录制手机内部声音(screen recorder)framework层问题分析
  17. tp6 SQL调试常用操作
  18. 2021年南非经济发展研究报告
  19. 数据挖掘数据预处理(验证性)
  20. studio3t连接mysql_Studio 3T 2019 强大的MongoDB数据库连接工具

热门文章

  1. kotlin 设计 logo集锦
  2. 汽车诊断之UDS入门-0x19(ReadDTCInformation)服务概述
  3. 使用BeautifulSoup对头条收藏的HTML数据进行分析
  4. 如何将html数据导入excel,怎么把lnternet网页数据导入excel?
  5. 发明专利的申请流程图
  6. 用JSP实现一个查询四、六级单词的网页
  7. 记录用友T+接口对接的心酸历程
  8. 计算机发展史(转贴)
  9. 卷二:C++图形编程第3篇 俄罗斯方块
  10. led钨丝灯项目笔记