springboot+vue前后端分离项目-项目搭建14-支付宝付款
1. 进入支付宝开放平台https://open.alipay.com/,选择网页应用开发,一路设置下一步创建完成,创建后生成、设置密钥,控制台可以看到创建的应用和沙箱环境




2. 使用natapp创建公网访问地址,详见:https://www.cnblogs.com/xiexieyc/p/18312638
3. 配置SDK,找到依赖,放到自己项目的pom.xml中,刷新maven下载依赖,不报红





4. 配置支付宝接入的相关配置:
appId:支付宝开放平台沙箱环境里有
appPrivateKey:私钥,测试环境支付宝开放平台沙箱环境里有,正式环境用应用创建时生成的
alipayPublicKey:支付宝公钥,测试环境支付宝开放平台沙箱环境里有 ,正式环境用应用里生成的
notifyUrl:natapp生成的公网地址+alipay/notify(后台访问的路径)



5. 项目启动时加载配置,配置放到支付宝sdk的Factory里,其中gatewayHost取得是沙箱环境 支付宝网关地址中的一段
,


6. 创建AliPayController,一个是用于支付时生成支付页面,另一个是支付成功后接收支付宝的状态通知,使用上一步加载配置的支付宝sdk的Factory

Factory.Payment.Page()这个调用方法在官网sdk概述中有使用说明



AliPayController里引用了一个dto,AlipayGoods,用于支付宝生成支付页面时提交商品信息

AliPayController里引用了一个mapper,BookorderMapper,用于接收到付款成功的通知后更新数据库支付状态

7. 创建订单数据库表、实体类、订单Controller,订单页面(一开始订单名称都用order,报错sql语法错误,改成bookorder后解决,怀疑是order名称是关键字,总之不要用order命名)





<template> <div style="width: 100%; padding: 10px"> <!-- 搜索区--> <div style="margin: 10px 0"> <el-input v-model="search" placeholder="请输入订单编号" style="width: 20%" clearable></el-input> <el-button type="primary" style="margin-left: 10px" @click="load">查询</el-button> </div> <el-table :data="tableData" border stripe> <el-table-column prop="id" label="ID" sortable /> <el-table-column prop="orderName" label="订单名称" /> <el-table-column prop="orderNo" label="订单编号" /> <el-table-column prop="totalAmount" label="订单总价" /> <el-table-column prop="payAmount" label="实付款" /> <el-table-column prop="youhui" label="优惠" /> <el-table-column prop="yunfei" label="运费" /> <el-table-column prop="createTime" label="创建时间" /> <el-table-column prop="payTime" label="付款时间" /> <el-table-column prop="buyer" label="购买人" /> <el-table-column prop="state" label="支付状态" /> <div class="demo-image__preview"> </div> <el-table-column fixed="right" label="操作" min-width="120"> <template #default="scope"> <el-popconfirm title="确认删除吗?" @confirm="handleDelete(scope.row.id)"> <template #reference> <el-button link type="primary" size="small">删除</el-button> </template> </el-popconfirm> </template> </el-table-column> </el-table> <div style="margin: 10px 0"> <el-pagination v-model:current-page="currentPage" v-model:page-size="pageSize" :page-sizes="[10, 20, 50, 100]" layout="total, sizes, prev, pager, next, jumper" :total="total" @size-change="handleSizeChange" @current-change="handleCurrentChange" /> </div> </div> </template> <script> import request from "@/utils/request"; export default { name: 'Order', components: { }, data() { return { search: '', currentPage: 1, pageSize: 10, total: 0, tableData: [] } }, created() { console.log("==================11111111") this.load() }, methods: { load() { console.log("==================222222222") request.get("/bookorder", { params:{ pageNum: this.currentPage, pageSize: this.pageSize, search: this.search } }).then(res=>{ console.log(res) this.tableData = res.data.records this.total = res.data.total }) }, handleDelete(id) { request.delete("/bookorder/" + id).then(res => { if(res.code === '0'){ this.$message({ type: "success", message: "删除成功" }) }else { this.$message({ type: "error", message: "res.msg" }) } this.load() //删除后刷新表格数据 }) }, handleSizeChange() { //改变当前每页个数触发 this.load() }, handleCurrentChange() { //改变当前页码触发 this.load() } } } </script>
Book.vue里增加购买按钮



8.购买后请求BookorderController,存储订单,生成支付页面的请求url返回,再新开页面访问url,支付后接收支付成功的通知

9.测试,先下载沙箱版app,登录账号密码在沙箱应用里,

点击购买

新弹出扫描支付页面

用沙箱版app扫码付款后显示成功

页面查看订单状态已经更新

10. 优化支付状态显示



浙公网安备 33010602011771号