1.我在applicaiton.yml创建了两个appid,一个是用于授权,一个用于支付,然后分别赋值
wechat:
mpAuthrizeAppId: wxd898fcb01713c658 #测试账号 用于授权
mpAppId: wxd898fcb01713c658 #正式账号 用于支付
2.其次,你需要将生成商户订单这里openid硬编码为借用的openid,不要从数据库里取,因为前端生成订单的时候他传过来的openid是你测试账号生成的openid,所以它是不能支付的,会告诉你数据库中没有该openid...
@Override
public PayResponse create(OrderDTO orderDTO) {
PayRequest payRequest = new PayRequest();
//硬编码为借用的openid
payRequest.setOpenid("oTgZpwcc3Xw-aUxIC56kZ1e5Msh0");
payRequest.setOrderId(orderDTO.getOrderId());
payRequest.setOrderAmount(orderDTO.getOrderAmount().doubleValue());
payRequest.setOrderName("微信订单测试");
payRequest.setPayTypeEnum(BestPayTypeEnum.WXPAY_H5);
log.info("【微信支付】生成商户订单request={}", payRequest);
PayResponse payResponse = bestPayService.pay(payRequest);
log.info("【微信支付】返回预付单信息response={}", payResponse);
return payResponse;
}
需要对returnUrl进行解码
map.put("returnUrl", URLDecoder.decode(returnUrl));
我抓包看了下,前端传过来的orderId,这个I是大写的,老师带我们写的是小写,改一下就好了
在前端config/index.js配置,后面的openid就是借用的openid,老师会根据你的openid转发到你申请时填写的链接从而跳转
wechatPayUrl: 'http://proxy.springboot.cn/pay?openid=oTgZpwcc3Xw-aUxIC56kZ1e5Msh0'
然后这时候你还会报错,因为在前端代码里,它也传了授权得到的openid,这时候链接就成了http://proxy.springboot.cn/pay?openid=oTgZpwcc3Xw-aUxIC56kZ1e5Msh0?openid=oTgZpwcc3Xw-aUxIC56kZ1e5Msh0&openid=12312414&returnUrl=sell.com,解决办法就是去掉前端代码里的orderid,找到src目录下的payment/index.vue,然后删掉圈住的
当你创建订单时会发现,orderDetail集合,也就是items中的productId为null,为了大家方便,一个快速解决问题的方法,还是刚才那个目录,将原先的代码写死,具体为啥没传过去不知道