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再试试 ,有时候直接运行不好使

    评论

报告相同问题?

悬赏问题

  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!