对应教程视频:B站视频教程

pom.xml依赖:

<!-- 支付宝支付jar包 -->
<dependency><groupId>com.alipay.sdk</groupId><artifactId>alipay-sdk-java</artifactId><version>3.1.0</version>
</dependency>

AliPayUtil.java代码:

package com.yjq.programmer.util;import com.alibaba.fastjson.JSON;
import com.alipay.api.AlipayApiException;
import com.alipay.api.AlipayClient;
import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.request.AlipayTradePagePayRequest;
import com.yjq.programmer.config.AliPayConfig;
import com.yjq.programmer.domain.AliPayBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;/*** @author 杨杨吖* @QQ 823208782* @WX yjqi12345678* @create 2021-11-07 10:23*//*** 支付宝支付工具类*/
@Component
public class AliPayUtil {@Autowiredprivate AliPayConfig alipayConfig;/*** 支付接口* @param alipayBean* @return* @throws AlipayApiException*/public String pay(AliPayBean alipayBean) throws AlipayApiException {// 1、获得初始化的AlipayClientString serverUrl = alipayConfig.getGatewayUrl();String appId = alipayConfig.getAppId();String privateKey = alipayConfig.getPrivateKey();String format = "JSON";String charset = alipayConfig.getCharset();String alipayPublicKey = alipayConfig.getPublicKey();String signType = alipayConfig.getSignType();String returnUrl = alipayConfig.getReturnUrl();String notifyUrl = alipayConfig.getNotifyUrl();AlipayClient alipayClient = new DefaultAlipayClient(serverUrl, appId, privateKey, format, charset, alipayPublicKey, signType);// 2、设置请求参数AlipayTradePagePayRequest alipayRequest = new AlipayTradePagePayRequest();// 页面跳转同步通知页面路径alipayRequest.setReturnUrl(returnUrl);// 服务器异步通知页面路径alipayRequest.setNotifyUrl(notifyUrl);// 封装参数alipayRequest.setBizContent(JSON.toJSONString(alipayBean));// 3、请求支付宝进行付款,并获取支付结果String result = alipayClient.pageExecute(alipayRequest).getBody();// 返回付款信息return result;}
}

AliPayConfig.java代码:

package com.yjq.programmer.config;import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Component;/*** @author 杨杨吖* @QQ 823208782* @WX yjqi12345678* @create 2021-11-07 10:25*/
@Configuration
@Component
public class AliPayConfig {/*** 应用ID,您的APPID,收款账号既是您的APPID对应支付宝账号*/private String appId = "2016110300790563";/*** 商户私钥,您的PKCS8格式RSA2私钥*/private String privateKey = "MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCCsWvZktzLxZhB8yFUp0f98s3uPegxu0p95sYwwSurm9FrCqn8jEJaR92git/i19QsODjE4KFY85O+AVrcZEDJoqubf8Pc5tCGcaCI1Ho+OD2LHW31cmDj29tlLHi2SlsL9EynSD/LL2DsG1Ufj12/TkuWPVAzjwsf/NJwiKV9mTIX/I88RvCJV2tqX8vT8V5LuHvI27vmGeKTgioExymrv6GQlhM1aHv3w2GMShp/n5wY1S0bhgMLL5zzO3FJSOKrOBPTYh0sCLAhvcD7vDXDH3ruBVq+jbtqXkQMdHww1nmaTz/t06uqNEoofGYCKfZWSQgXnPwEQBpqdSEs8Nl/AgMBAAECggEAbYbY9pbwuUkYR7TFKxeh6r3wPQfersbiL88WK0fIHGJSR93BBahZ9yUhJGkeJhJwerqHQN9r+IrxNxwVlHvkG9da789MSrWY7gMN4X4IEFq7oPmB7F/1uR/Ipup1I3f/A26ySsLuy44iMNzbIr7YdvnbuMYbj4oCbcVIawzpe+6ThkSERg+kaqZbg9DsAjLEkUFLRLE37R2F5BgdM4Gc5Dsw6e7ZuRc1fyBwI4bbdC11oxpLTOkFQFL9aAR1iyKvaPhbV7fswYbMBmJXDTplfDLXufcZPbm7MgfbV1sIhipjf6HpNOB3Qc0WI3iWwBNrb5EGD6PbqAtZyLDBPOVz+QKBgQC4s3Xnt18XoQXqHU5cgg+XCZSkP6z5z/NB3rmvCfThFz1mMEhscw3YruvL2ohXxB0cqoI0eiH2LFMG2tw3g4aDavOLx4H2o+VjcT3rFHoePmTTXv/H+R8roE0IMOKpVQ8Mc65EEBHaZtbLAD2vEZpdv8CjBSx9hCVVC3ISF25otQKBgQC1JMfvT5ofKGUqKoqgz3+0sqd8nfkx5Q3BmeS02nhEXgLW65KThfJnez9MB+0V3f4lxJnRTwYGwh7RFL3bViAkFcO1ETwM9rW73n9tkmuAjY0OPQGiPfxnMUgmGUyR7cov8j7t/cCRUREx/GUXxAOngheDxXsZ8pSX8bPhs2ed4wKBgBwAmU+YLYKXlx33c3ny/goYGcENJlx5epfx/JTdHZNCwrxLda97gg3n9zfg2er0gLVn5HWwTpXUAoJ3jAuelTY3cNUwWjPahVyePpT1dc5AB2lEbeMTkfY7R3KGdtbVXoK0xybqiMpj7Qy57KAuOwkbmUkd77DX6BEMuy6i/spBAoGBAKAI+sqmnRdh7N6v7wHb0IuoOuiR+JLoNpsQh0pwqUhddkzCmyDSejKKZIWbiw6CrgJYCz0sf7qAzhESLhoVoRfAUsMpktAxNqXgENyRO4C7jh9CLqtT8CaLF57xQwC6AKMTdh10ziiUYoiy3+17M29OM9ArLHLkKfuDgtSoV6bZAoGATIOCxQrqrZFVe4zLCnzcAFHFQvqxeNKdeLo7fMfQhU5MnDn9TVmzHhVtNg0SfdNA4WwbVX2Per019M/UcKSjJc5uYJ8G5BZaBZ7ZNJ1JAG1TtOi0m4zAFJJG3SznJVgKOFCDeMc7shMpE2FnTXBJx39LCweTnz8PsF4T4A2/GLY=";/*** 支付宝公钥,*/private String publicKey = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAhdqk8i1YrbG/6bxhrSRI7IcoezOAb+fMzc4XypuM3mFV8VWs4VgurDj2latDcmcWs2vvs3abgfLrWKjiHJPnnLZ6+/gzKkcJnQqikWRUQIQH/miAPoroDE4G31U3SGyfG53c+84b3H9zCzvGDbHBOda4dxjHUqi0oOGrTA8ETtJGfJ0j73cBhlmCjJLjzMZLV25pXUTI6drGuPls6I/FnlFhnPNOP8qav9S4syadYtYpJe2SzEr6eRla0Gfz9VXXKCFWCZTm1Y6WHI2685nc/2uPpSf42izFw0DPjf0/Lhtx7SmnQaFbd55pnsL07d77/pdLzTFUQWM7CGDiT/TjHwIDAQAB";/*** 服务器异步通知页面路径需http://格式的完整路径,不能加?id=123这类自定义参数*/private String notifyUrl = "http://localhost:8080/user/order";/*** 页面跳转同步通知页面路径 需http://格式的完整路径,不能加?id=123这类自定义参数*/private String returnUrl = "http://localhost:8080/user/order";/*** 签名方式*/private String signType = "RSA2";/*** 字符编码格式*/private String charset = "UTF-8";/*** 支付宝网关*/private String gatewayUrl = "https://openapi.alipaydev.com/gateway.do";/*** 支付宝网关*/private String logPath;public String getAppId() {return appId;}public void setAppId(String appId) {this.appId = appId;}public String getPrivateKey() {return privateKey;}public void setPrivateKey(String privateKey) {this.privateKey = privateKey;}public String getPublicKey() {return publicKey;}public void setPublicKey(String publicKey) {this.publicKey = publicKey;}public String getNotifyUrl() {return notifyUrl;}public void setNotifyUrl(String notifyUrl) {this.notifyUrl = notifyUrl;}public String getReturnUrl() {return returnUrl;}public void setReturnUrl(String returnUrl) {this.returnUrl = returnUrl;}public String getSignType() {return signType;}public void setSignType(String signType) {this.signType = signType;}public String getCharset() {return charset;}public void setCharset(String charset) {this.charset = charset;}public String getGatewayUrl() {return gatewayUrl;}public void setGatewayUrl(String gatewayUrl) {this.gatewayUrl = gatewayUrl;}public String getLogPath() {return logPath;}public void setLogPath(String logPath) {this.logPath = logPath;}
}

AliPayBean.java代码:

package com.yjq.programmer.domain;/*** @author 杨杨吖* @QQ 823208782* @WX yjqi12345678* @create 2021-11-07 10:34*/
/*** 支付实体对象* 根据支付宝接口协议,其中的属性名,必须使用下划线,不能修改*/
public class AliPayBean {/*** 商户订单号,必填**/private String out_trade_no;/*** 订单名称,必填*/private String subject;/*** 付款金额,必填* 根据支付宝接口协议,必须使用下划线*/private String total_amount;/*** 商品描述,可空*/private String body;/*** 超时时间参数*/private String timeout_express= "5m";/*** 产品编号*/private String product_code= "FAST_INSTANT_TRADE_PAY";public String getOut_trade_no() {return out_trade_no;}public void setOut_trade_no(String out_trade_no) {this.out_trade_no = out_trade_no;}public String getSubject() {return subject;}public void setSubject(String subject) {this.subject = subject;}public String getTotal_amount() {return total_amount;}public void setTotal_amount(String total_amount) {this.total_amount = total_amount;}public String getBody() {return body;}public void setBody(String body) {this.body = body;}public String getTimeout_express() {return timeout_express;}public void setTimeout_express(String timeout_express) {this.timeout_express = timeout_express;}public String getProduct_code() {return product_code;}public void setProduct_code(String product_code) {this.product_code = product_code;}
}

前端Vue支付页面展示代码:

// 添加之前先删除一下,如果单页面,页面不刷新,添加进去的内容会一直保留在页面中,二次调用form表单会出错
const divForm = document.getElementsByTagName('div');
if (divForm.length) {document.body.removeChild(divForm[0]);
}
const div = document.createElement('div');
div.innerHTML = resp.data; // data就是接口返回的form 表单字符串
document.body.appendChild(div);
//document.forms[0].setAttribute('target', '_blank');// 新开窗口跳转
document.forms[0].submit();

前端Vue支付回调代码:

if (_this.$route.query && _this.$route.query.out_trade_no){// 支付回调console.log("进入回调...");console.log("交易号:"+ _this.$route.query.out_trade_no);_this.$ajax.post(process.env.VUE_APP_SERVER + "/web/pay/success", {tradeNo:  _this.$route.query.out_trade_no}).then((response)=>{let resp = response.data;if(resp.code === 0){_this.$message.success(resp.msg);}else{_this.$message.error(resp.msg);}});
}

沙箱支付宝支付 前后端分离项目 实战相关推荐

  1. 视频教程-Python+Vue+Django前后端分离项目实战-Python

    Python+Vue+Django前后端分离项目实战 教学风格独特,以学员视角出发设计课程,难易适度,重点突出,架构清晰,将实战经验融合到教学中.讲授技术同时传递方法.得到广大学员的高度认可. 王进 ...

  2. 视频教程-Vue、Spring Boot开发小而完整的Web前后端分离项目实战-Java

    Vue.Spring Boot开发小而完整的Web前后端分离项目实战 3年多.net开发经验:5年的java后端开发经验,熟悉行.net,java流行技术,拥有多个.net,java web企业级应; ...

  3. 基于SpringBoot+SpringCloud+Vue前后端分离项目实战 --开篇

    本文目录 前言 做项目的三大好处 强强联手(天狗组合) 专栏作者简介 专栏的优势 后端规划 1. SpringBoot 和 SpringCloud 的选择 2. Mybatis 和 MybatisPl ...

  4. (一)专题介绍:移动端安卓手机改造成linux服务器linux服务器中安装软件、部署前后端分离项目实战

    快捷目录 前言 一.涉及到的相关技术简介 二.具体实现过程及踩坑杂谈 1.安卓手机改造成linux系统实现方案 2.改造后的手机Linux中软件的安装 3.手机Linux中安装MySQL5.7踩坑实录 ...

  5. 前后端分离项目实战(vue2.0 + SSM)

    介绍 前端:vue.js.elementUI.axios.vue-router 后端:SSM(Spring+SpringMVC+MyBatis) 数据库:MySql 运行界面 后端 登录界面 首页以及 ...

  6. springboot web项目_Vue、Spring Boot开发小而完整的Web前后端分离项目实战12

    第12讲 tabs选项卡制作讲解 1.1.tabs选项卡组件: 1. tabs 组件 2.常用属性: value :选中选项卡的name type :选项卡风格 可选择 card / border-c ...

  7. vue项目开发实战案例_Vue、Spring Boot开发小而完整的Web前后端分离项目实战02

    第02讲 前端项目工具安装及环境搭建 1.1.开发工具:visual studio code 1.1.visual studio code 官网下载地址 https://code.visualstud ...

  8. Spring boot+Vue前后端分离项目实战——学生管理系统【三】后端

    就不一段一段的贴代码了,讲一下代码结构,之后会将代码放在GitHub,将代码拉到自己电脑后对照学习 代码地址 https://github.com/SAGE-likeWu/student_manage ...

  9. Win10环境前后端分离项目基于Vue.js+Tornado+Python3实现微信(wechat)扫码支付流程

    在生活具有广泛性.高效性.使用方便性的支付方式是扫码支付,扫码的优点在于推广成本低,上至钓鱼台国宾馆,下至发廊地摊都能用,打印出来就完事了,而相比其他支付方式,现金的找零及假钞问题,信用卡的办理门槛. ...

最新文章

  1. 今天安装VisualSVN 不小心删掉了安装目录,再次安装 修改 移除提示UninstallWMISchemaExecute (0x8004401e) when updating VisualSV
  2. Android EventBus 的使用
  3. BZOJ2741 【FOTILE模拟赛】L
  4. python难嘛-为什么说python入门很简单,但是在你这很难?
  5. java安装了为什么运行不了_安装jdk后运行javac可以运行,为什么不能运行java?...
  6. 无法解析的外部符号 __imp____glutInitWithExit@12
  7. 从2018年12月起陆续将博客搬至博客园(cnblogs)
  8. GAE 随机获取实体
  9. java spring源码_spring源码分析-spring中的bean
  10. bootstrap你让前端小狮子们又喜又恨
  11. Java 方法的重载与重写
  12. BottomNavigationView取消水波纹动画
  13. 与微软中国梁念坚先生商榷
  14. 记录学习Android基础的心得07:硬件控制P2
  15. 牛客寒假算法基础集训营1
  16. Spring 事务源码(6)—createTransactionIfNecessary处理事务属性并尝试创建事务【两万字】
  17. 用 Amazon Web Services 进行云计算,第 3 部分:用 EC2 根据需要提供服务器
  18. 【Lesson 3】 小调音阶及小调和弦
  19. Java使用数组几个数字比较大小进行排序
  20. sa-token使用简单使用

热门文章

  1. shell读取键盘输入
  2. 01-小程序UI组件库
  3. R语言使用ggplot2绘制直方图
  4. IE浏览器版本测试方法
  5. NOI2010超级钢琴
  6. arm鲲鹏服务器和x86区别
  7. Oracle 11gR2新特性--延迟段创建(Deferred Segment Creation)和exp不能导出空表
  8. 软件测试就是找茬的?那些年和开发小哥的“爱恨情仇”
  9. Nginx服务器读取不到文件的转换方法
  10. ZYNQ开发(三)Linux Vi/Vim编译器