用restful写微信支付,统一下单成功,返回的支付信息正确,前端支付成功,回调接口显示签名失败。

下面是统一下单设置参数的代码

 public WxPayUnifiedOrderResult createOrder(YsUser ysUser, YsOrder order, String attach, HttpServletRequest request) throws WxPayException {
        LocalDateTime now = LocalDateTime.now();
        WxPayUnifiedOrderRequest payRequest = new WxPayUnifiedOrderRequest();
        payRequest.setDeviceInfo("WEB");
        payRequest.setBody("壹送便利店微信商城订单");
        payRequest.setOutTradeNo(order.getOrderId());
        payRequest.setTotalFee(BaseWxPayRequest.yuanToFen("" + order.getPayPrice()));
        payRequest.setAttach(attach);
        payRequest.setSpbillCreateIp(IPUtils.getIpAddress(request));
        payRequest.setTimeStart("" + now.getYear() + String.format("%02d", now.getMonth().getValue()) +
                String.format("%02d",now.getDayOfMonth()) + String.format("%02d", now.getHour()) +
                String.format("%02d", now.getMinute()) + String.format("%02d", now.getSecond()));
        LocalDateTime expireTime = now.plusMinutes(10);
        payRequest.setTimeExpire("" + expireTime.getYear() + String.format("%02d", expireTime.getMonth().getValue()) +
                String.format("%02d",expireTime.getDayOfMonth()) + String.format("%02d", expireTime.getHour()) +
                String.format("%02d", expireTime.getMinute()) + String.format("%02d", expireTime.getSecond()));
        payRequest.setNotifyUrl("http://" + Constants.DOMAIN + "/payments/weixin/notify/");
        payRequest.setTradeType(WxPayConstants.TradeType.JSAPI);
        payRequest.setOpenid(ysUser.getOpenid());
        return wxPayService.unifiedOrder(payRequest);
    }

下面是回调接口的代码

 @PostMapping("/weixin/notify")
    public WxPayNotifyResponse wepayNotify(@RequestBody String xmlData) throws WxPayException {
        this.logger.info("开始回调了嘛");
        WxPayOrderNotifyResult payResult = wxPayService.parseOrderNotifyResult(xmlData);
        if (payResult != null && !StringUtils.isEmpty(payResult.getOutTradeNo())) {
            //订单状态确认
            this.logger.info("开始处理结果了嘛");
            WxPayOrderQueryResult confirmResult = wxPayService.queryOrder(null, payResult.getOutTradeNo());
            if (!StringUtils.isEmpty(confirmResult.getOutTradeNo()) &&
                    confirmResult.getOutTradeNo().equals(payResult.getOutTradeNo())) {
                YsOrder order = orderService.findByOrderId(payResult.getOutTradeNo());
                this.logger.info("找到订单了嘛");
                order.setPayType(Constants.ONLINE_PAY);
                order.setPayStatus(Constants.PAY_ORDER);
                order.setPayTime(new Date());
                orderService.pay(order);
                ylyService.print(order);
            }
        }
        WxPayNotifyResponse response = new WxPayNotifyResponse();
        response.setReturnCode(Constants.WEPAY_NOTIFY_SUCCESS);
        return response;
    }

下面是后台日志输出的回调结果
图片说明

打包成apk再试试 ,有时候直接运行不好使

please check your key. I think it has been expired

1.确定回调的域名是公网的还是内网的?只有公网的域名才能回调成功
2. 在检查回调的签名接口跟微信支付所用版本是否一致
3. 最后检查签名规则是否符合

打包成apk再试试 ,有时候直接运行不好操作,还有在检查回调的签名接口跟微信支付所用版本是否一致,最后检查签名规则是否符合