当前位置: 首页 > wzjs >正文

自己做代练网站美橙网站建设经典案例

自己做代练网站,美橙网站建设经典案例,wordpress加载速度太慢,雄安 网站建设【springbootvue3的前后端分离项目实现支付宝的沙箱支付】 以下是基于SpringBoot Vue前后端分离项目实现支付宝沙箱支付的完整解决方案&#xff0c;包含关键代码和调试技巧 一、项目架构设计 二、后端实现&#xff08;SpringBoot&#xff09; 1. 添加依赖 <!-- pom.xml…

【springboot+vue3的前后端分离项目实现支付宝的沙箱支付】

以下是基于SpringBoot + Vue前后端分离项目实现支付宝沙箱支付的完整解决方案,包含关键代码和调试技巧

一、项目架构设计

在这里插入图片描述

二、后端实现(SpringBoot)

1. 添加依赖

<!-- pom.xml -->
<dependency><groupId>com.alipay.sdk</groupId><artifactId>alipay-easysdk</artifactId><version>2.3.0</version>
</dependency>

2. 配置参数类

@Data
@Configuration
@ConfigurationProperties(prefix = "alipay")
public class AlipayConfig {private String appId;          // 沙箱APPIDprivate String appPrivateKey;  // 应用私钥private String alipayPublicKey;// 支付宝公钥private String notifyUrl;      // 异步通知地址private String returnUrl;      // 同步跳转地址private String gatewayUrl;     // 沙箱环境网关
}

3. 支付服务核心代码

@Service
public class AlipayService {@Autowiredprivate AlipayConfig config;public String createOrder(String orderNo, BigDecimal amount, String subject) {try {Config options = getOptions();Factory factory = new Factory(options);AlipayTradePagePayResponse response = factory.Payment().Page().pay(subject, orderNo, amount.toString(), config.getReturnUrl(), config.getNotifyUrl());return response.getBody();} catch (Exception e) {throw new RuntimeException("支付宝下单失败", e);}}private Config getOptions() {Config options = new Config();options.protocol = "https";options.gatewayHost = "openapi.alipaydev.com"; // 沙箱环境options.signType = "RSA2";options.appId = config.getAppId();options.merchantPrivateKey = config.getAppPrivateKey();options.alipayPublicKey = config.getAlipayPublicKey();return options;}
}

4.支付控制器

@RestController
@RequestMapping("/api/pay")
public class PaymentController {@Autowiredprivate AlipayService alipayService;@PostMapping("/alipay")public String createPayment(@RequestBody PaymentRequest request) {// 生成商户订单号(需保证唯一性)String orderNo = "T" + System.currentTimeMillis() + UUID.randomUUID().toString().substring(0, 8);return alipayService.createOrder(orderNo, request.getAmount(), request.getSubject());}@PostMapping("/notify") // 支付宝异步通知public String paymentNotify(HttpServletRequest request) {Map<String, String> params = convertParams(request);try {// 验签和业务处理boolean signVerified = Factory.Payment.Common().verifyNotify(params);if(signVerified) {// 处理订单逻辑String tradeStatus = params.get("trade_status");if("TRADE_SUCCESS".equals(tradeStatus)) {orderService.handlePaymentSuccess(params.get("out_trade_no"));return "success";}}} catch (Exception e) {log.error("支付宝回调处理异常", e);}return "failure";}
}

三、前端实现(Vue3)

1. 支付页面组件

<template><div><button @click="handlePay">立即支付</button><div v-html="paymentForm" v-if="paymentForm"></div></div>
</template><script setup>
import { ref } from 'vue';
import axios from 'axios';const paymentForm = ref('');const handlePay = async () => {if(this.goodsData.goodNumber< 1){this.$message.error("商品库存不足")}else {this.$request.get('/aliPay/pay?subject='+this.goodsData.name+'&totalAmount='+this.goodsData.price).then(res =>{const divForm = document.getElementsByTagName('div')if(divForm.length){document.body.removeChild(divForm[0])}const div = document.createElement("div");div.innerHTML = res.data document.body.appendChild(div)document.forms[0].submit()})}
};
</script>

2. 支付结果轮询

// 在支付后页面增加轮询
const checkPayment = (orderNo) => {const timer = setInterval(async () => {const res = await axios.get(`/api/orders/${orderNo}/status`);if(res.data.paid) {clearInterval(timer);alert('支付成功');}}, 3000);
}

四、沙箱环境配置

1. 测试账号准备

登录支付宝开放平台沙箱

获取:

沙箱APPID(如:20210031234)
获取应用私钥和支付宝公钥
卖家账号(沙箱版支付宝账号)

下载支付宝沙箱钱包APP,模拟扫码支付使用

2. 配置文件

#支付宝
alipay:# 沙箱中的应用idappId: 2021000148685142# 应用私钥appPrivateKey: 自己的私钥# 支付宝公钥alipayPublicKey: 自己的公钥# TODO 调用支付宝支付接口后产生的回调,需要内网穿透notifyUrl: http://localhost:9090/aliPay/notify# 支付成功后的页面跳转,设置成你项目中的成功支付界面(可不填)returnUrl: http://localhost:8080/# 支付宝网关地址GATEWAY_URL: https://openapi-sandbox.dl.alipaydev.com/gateway.do# 格式FORMAT: JSON# 编码字符格式CHARSET: utf-8# 签名方式SIGN_TYPE: RSA2

五.支付中断处理

// 增加交易查询接口
@GetMapping("/orders/{orderNo}/status")
public PaymentStatus checkPayment(@PathVariable String orderNo) {AlipayTradeQueryResponse response = factory.Payment().Common().query(orderNo);return new PaymentStatus(response.getTradeStatus());
}

通过以上实现,可完成从沙箱测试到生产上线的全流程。测试时建议使用沙箱提供的各种异常场景验证系统健壮性。
标签:支付宝沙箱支付


文章转载自:

http://n1YxedXn.cwcdr.cn
http://gd4YxQ0b.cwcdr.cn
http://E3E4bvGm.cwcdr.cn
http://Ej63MoQX.cwcdr.cn
http://6xPlQsiu.cwcdr.cn
http://2i0dkZUa.cwcdr.cn
http://IFg3foJW.cwcdr.cn
http://MJc7mIah.cwcdr.cn
http://K25E005N.cwcdr.cn
http://dORCTJ3A.cwcdr.cn
http://m6tWRJyW.cwcdr.cn
http://piFkwhRB.cwcdr.cn
http://7gv5pxIU.cwcdr.cn
http://TXAHf6JF.cwcdr.cn
http://quLJQtX1.cwcdr.cn
http://lvhDPaTA.cwcdr.cn
http://91X0jKWj.cwcdr.cn
http://RIu8a2rQ.cwcdr.cn
http://Jr20zkoa.cwcdr.cn
http://SzqRBlCG.cwcdr.cn
http://sDlFahlq.cwcdr.cn
http://6uSntIlh.cwcdr.cn
http://0dYp6Inv.cwcdr.cn
http://kgcmbd0j.cwcdr.cn
http://P4mVM16y.cwcdr.cn
http://eFIoxbMX.cwcdr.cn
http://eicI75Xt.cwcdr.cn
http://iXJvv0bx.cwcdr.cn
http://nFOwbWGj.cwcdr.cn
http://kpTUzIjn.cwcdr.cn
http://www.dtcms.com/wzjs/759101.html

相关文章:

  • 用wex5可以做网站吗贵州省建设执业资格促进会网站
  • 广州达美网站建设公司海兴网站建设
  • 抚州城乡建设厅网站商标自助查询系统官网
  • 苏州公司网站建设服务自己怎么制作微信小程序
  • 协会网站信息平台建设企业建站用什么主机
  • 南京的网站制作公司多少钱要交税
  • 哈尔滨展览设计公司已矣seo排名点击软件
  • 网站的用户体验贵阳市房地产交易平台上线
  • 1号店网站网页特效濮阳网站怎么做seo
  • 杭州高端网建新站seo优化快速上排名
  • 凤山网站seovs2008不能新建网站
  • 海洋网站建设公司网站图片轮播怎么做的
  • 如何拥有一个自己的网站贵州企业网站建设公司
  • 手机网站图片切换特效广告代运营
  • 外汇自动跟单网站开发微信产品展示小程序
  • wordpress网站模版城市建设局网站
  • 注册域名之后如何做网站linux服务器WordPress建站教程
  • 桂城网站建设网站开发亮点
  • 表白网站建设源码怎么查看网站是否降权
  • 棠下手机网站建设电话广告设计专业简历
  • 有哪个网站做ic新乡建设企业网站
  • 做分销微商城网站如何开科技软件
  • 宁波p2p网站建设企业网络营销策划
  • php网站开发工资多少服务器上网站建设
  • 网站里怎样添加关键词河北建设厅网站初始密码
  • 网站制作哪家做的好青岛做网站大公司有哪些
  • 设计简单的网站做非法网站判什么邢
  • 手机在线做ppt的网站有哪些问题哪个浏览器任何网站都可以访问
  • 网站的建设运营收费是哪些app服务器搭建教程
  • 中国银行门户网站长春网站优化公司