关注微信公众号:怒码少年,回复关键词【电子书】可以免费获取计算机相关电子书
问题描述
苍穹项目day08中使用的微信小程序使用用户主体是无法开启微信支付功能的,但是又不想项目烂尾,这里可以帮你解决!!
解决办法
使用代码模拟,直接修改数据库中表的数据。具体步骤如下:
- 后端在/OrderController.java中注释掉原来的订单支付的/payment控制方法,改成:
@PutMapping("/payment")
@ApiOperation("订单支付")
public Result<String> payment(@RequestBody OrdersPaymentDTO ordersPaymentDTO) throws Exception {
log.info("订单支付:{}", ordersPaymentDTO);
orderService.paySuccess(ordersPaymentDTO.getOrderNumber());
return Result.success();
}
paySuccess方法用于微信后台检查成功,前端用户确认支付之后修改数据库的数据(例如把订单状态改为待接单,把支付状态设置为已支付,设置好结账时间),这里我们不请求微信后台了,直接修改数据。
- 前端在pages\pay\index.js中搜索wx.requestPayment,把这个方法注释起来(大概在225行左右)。再把下方的
uni.redirectTo({url: '/pages/success/index?orderId=' + _this.orderId });
这行代码开启(没有的话自己加上去)。(这里的前端是用户端的小程序,不是管理端的web页面!!)
修改后的前端这部分代码是
if (res.code === 1) {
//这个方法全部注释掉
// wx.requestPayment({
// nonceStr: res.data.nonceStr,
// package: res.data.packageStr,
// paySign: res.data.paySign,
// timeStamp: res.data.timeStamp,
// signType: res.data.signType,
// success:function(res){
// wx.showModal({
// title: '提示',
// content: '支付成功',
// success:function(){
// uni.redirectTo({url: '/pages/success/index?orderId=' + _this.orderId });
// }
// })
// console.log('支付成功!')
// }
// })
//这行代码一定要有!!直接重定向,不使用微信支付
uni.redirectTo({url: '/pages/success/index?orderId=' + _this.orderId });
} else {
wx.showModal({
title: '提示',
content: res.msg
})
- 觉得有用的话可以可以帮忙点个赞吧,谢谢大家!!有问题请私信博主,欢迎大家和我讨论项目
联系作者
csdn不怎么看,大家还有什么问题的可以私信微信公众号:怒码少年。我们后台联系,尽我所能!😁😁
原因分析
首先来看微信小程序的支付时序图:
这个图看上去复杂,其实微信后台的作用本质上就是保证数据传输时候的数据的安全性(所以才需要数字签名这些等等)和最后调用微信支付扣除用户的钱。真正操作订单的是商户系统,也就是我们的Java后端。
所以我们这里就直接不扣钱了! 直接后台修改数据(模拟微信后台扣款成功了)
效果展示
1. 前端准备好购物车之后点击去支付
前端跳转至
此时数据库orders表中多了一条为支付的订单数据:(注意看各个字段的值)
2. 前端点击确认支付
前端跳转至支付成功的页面
此时数据库orders表中的对应的订单数据的订单状态/支付状态/结账时间发生了变化,说明操作成功了!!
END
觉得有用的伙计们点个赞吧!👍,感谢你看到这里,祝你生活顺利and代码永不报错(报了也马上可以解决!)。
这里放一个我的微信公众号怒码少年,就是记录一下成长过程和一些技术学习成果,欢迎大家关注!