这里一般个人是没有的,我们用不到
内网穿透工具临时获取到临时域名(可用可不用,拓展一下也好)
安装客户端,在相应目录打开cmd窗口,输入以下代码
可以看到这里的请求地址变了,这就是内网穿透工具的作用
微信支付相关配置,这里可以配置,也可以不配置,因为我们也用不到,想写上的同学们,可以写上,这里给大家提供了
application-dev.yml
javawechat: appid: //这里写自己的appid secret: //这里写自己的密钥 mchid: 1561414331 mchSerialNo: 4B3B3DC35414AD50B1B755BAF8DE9CC7CF407606 privateKeyFilePath: D:\apiclient_key.pem apiV3Key: CZBK51236435wxpay435434323FFDuv3 weChatPayCertFilePath: D:\wechatpay_166D96F876F45C7D07CE98952A96EC980368ACFC.pem notifyUrl: https://www.weixin.qq.com/wxpay/pay.php refundNotifyUrl: https://www.weixin.qq.com/wxpay/pay.php
application.yml
javawechat: appid: ${sky.wechat.appid} secret: ${sky.wechat.secret} mchid: ${sky.wechat.mchid} mchSerialNo: ${sky.wechat.mchSerialNo} privateKeyFilePath: ${sky.wechat.privateKeyFilePath} apiV3Key: ${sky.wechat.apiV3Key} weChatPayCertFilePath: ${sky.wechat.weChatPayCertFilePath} notifyUrl: ${sky.wechat.notifyUrl} refundNotifyUrl: ${sky.wechat.refundNotifyUrl}
导入这部分我就略过了,毕竟代码都是一样的
这里需要修改一下wx小程序里的代码
大家可以跟我一样设置,提供好了代码
javascriptif (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 }); }
然后就是在OrderServiceImpl中,修改一下payment方法,按照我得修改,也可直接复制,这里可以支付成功立即修改数据库订单状态,但是我觉得代码冗余了,下边的代码我注释起来也给了详细注释,所有在OrderController中修改了,下边会说到!
java
/**
* 订单支付
*
* @param ordersPaymentDTO
* @return
*/
public OrderPaymentVO payment(OrdersPaymentDTO ordersPaymentDTO) throws Exception {
// 当前登录用户id
Long userId = BaseContext.getCurrentId();
User user = userMapper.getById(userId);
//调用微信支付接口,生成预支付交易单
// JSONObject jsonObject = weChatPayUtil.pay(
// ordersPaymentDTO.getOrderNumber(), //商户订单号
// new BigDecimal(0.01), //支付金额,单位 元
// "苍穹外卖订单", //商品描述
// user.getOpenid() //微信用户的openid
// );
//
// if (jsonObject.getString("code") != null && jsonObject.getString("code").equals("ORDERPAID")) {
// throw new OrderBusinessException("该订单已支付");
// }
JSONObject jsonObject = new JSONObject();
jsonObject.put("code","ORDERPAID");
OrderPaymentVO vo = jsonObject.toJavaObject(OrderPaymentVO.class);
vo.setPackageStr(jsonObject.getString("package"));
//这是取消的第一种,但是感觉这里修改的确是多余了,所以我选择直接在controller中调用paySuccess修改
// 伪支付成功后的数据库订单状态更新,没有通过paySuccess这个接口更新注意一下!
// 根据订单号查询当前用户的订单
// Orders ordersDB = orderMapper.getByNumberAndUserId(ordersPaymentDTO.getOrderNumber(), userId);
//
// // 根据订单id更新订单的状态、支付方式、支付状态、结账时间
// Orders orders = Orders.builder()
// .id(ordersDB.getId())
// .status(Orders.TO_BE_CONFIRMED) // 订单状态,待接单
// .payStatus(Orders.PAID) // 支付状态,已支付
// .checkoutTime(LocalDateTime.now()) // 更新支付时间
// .build();
//
// orderMapper.update(orders);
return vo;
}
直接在OrderController中,修改一下即可
java/** * 订单支付 * * @param ordersPaymentDTO * @return */ @PutMapping("/payment") @ApiOperation("订单支付") public Result<OrderPaymentVO> payment(@RequestBody OrdersPaymentDTO ordersPaymentDTO) throws Exception { log.info("订单支付:{}", ordersPaymentDTO); OrderPaymentVO orderPaymentVO = orderService.payment(ordersPaymentDTO); log.info("生成预支付交易单:{}", orderPaymentVO); //获取订单号,修改数据库中的订单状态 String orderNumber = ordersPaymentDTO.getOrderNumber(); orderService.paySuccess(orderNumber); return Result.success(orderPaymentVO); }