qq_38077190 2018-07-21 09:06 采纳率: 0%
浏览 5036
已结题

用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;
    }

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

  • 写回答

4条回答

  • 小虫快跑 2018-07-21 09:12
    关注

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

    评论

报告相同问题?

悬赏问题

  • ¥15 sqlite 附加(attach database)加密数据库时,返回26是什么原因呢?
  • ¥88 找成都本地经验丰富懂小程序开发的技术大咖
  • ¥15 如何处理复杂数据表格的除法运算
  • ¥15 如何用stc8h1k08的片子做485数据透传的功能?(关键词-串口)
  • ¥15 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
  • ¥200 uniapp长期运行卡死问题解决
  • ¥15 latex怎么处理论文引理引用参考文献
  • ¥15 请教:如何用postman调用本地虚拟机区块链接上的合约?
  • ¥15 为什么使用javacv转封装rtsp为rtmp时出现如下问题:[h264 @ 000000004faf7500]no frame?
  • ¥15 乘性高斯噪声在深度学习网络中的应用