大海话语 2021-12-14 20:15 采纳率: 87.6%
浏览 31
已结题

支付宝支付后的回调 业务层和控制层不能是有返回的吧?

网上下载了些示例,但是有些问题。。
它下面这种回调是不是写错了呀?支付宝支付成功后的回调,回调是无返回的,它这里有一个String返回呢。
下面是控制层

@ResponseBody 
@RequestMapping("/notify") 
public String notify(HttpServletRequest request, HttpServletResponse response) {
 return alipayViewService.notify(request, response); 
}

service层

/**
     * @Function: App支付成功 支付宝异步通知回调
     */

    public String notify(HttpServletRequest request, HttpServletResponse response) {
        Map<String, String> params = new HashMap<String, String>();
        //从支付宝回调的request域中取
        Map<String, String[]> requestParams = request.getParameterMap();
        for (Iterator<String> iter = requestParams.keySet().iterator(); iter.hasNext(); ) {
            String name = iter.next();
            String[] values = requestParams.get(name);
            String valueStr = "";
            for (int i = 0; i < values.length; i++) {
                valueStr = (i == values.length - 1) ? valueStr + values[i] : valueStr + values[i] + ",";
            }
            // 乱码解决,这段代码在出现乱码时使用。如果mysign和sign不相等也可以使用这段代码转化
            try {
                valueStr = new String(valueStr.getBytes("ISO-8859-1"), "gbk");
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            }
            params.put(name, valueStr);
        }
        //商品订单号
        String out_trade_no = request.getParameter("out_trade_no");// 商户订单号
        // 当前交易状态
        String tradeStatus = request.getParameter("trade_status"); //交易状态
        // 支付金额
        String totalAmount = request.getParameter("total_amount"); //交易状态
        // 支付时间
        String payDate = request.getParameter("gmt_payment"); //交易状态

        // 3.签名验证(对支付宝返回的数据验证,确定是支付宝返回的)
        boolean signVerified = false;
        try {
            //3.1调用SDK验证签名
            signVerified = AlipaySignature.rsaCheckV1(params, publicKey, "utf-8", "RSA2");
        } catch (AlipayApiException e) {
            e.printStackTrace();
        }

        //返回状态存入redis中
        // 对验签进行处理
        if (signVerified) {
            //验签通过
            if (tradeStatus.equals("TRADE_SUCCESS")) {
                //支付成功后的业务处理
                Order order = orderMapper.getOrderInfo(Long.valueOf(out_trade_no));
                if (!Util.isEmpty(order)) {
                    order.setStatus(CalculatStaticConstant.CHECK_ONE);
                    order.setCompleteTime(DateUtil.currentDate());
                    orderMapper.updateOrder(order);
                    /* 添加支付信息 */
                    OrderPayEntity orderPay = new OrderPayEntity();
                    GOrder.setId(Long.valueOf(IdUtils.getPrimaryKey()));
                    orderPay.setOrderId(order.getId());
                    orderPay.setUserId(order.getUserId());
                    orderPay.setPayPrice(Double.valueOf(totalAmount));
                    orderPay.setPayType(PayTypeEnum.ALI_PAY.intKey());
                    orderPay.setStatus(CalculatStaticConstant.CHECK_ONE);
                    orderPay.setPayTime(payDate);
                    orderMapper.saveOrderPay(orderPay);
                    RedisUtil.set("ali" + out_trade_no, tradeStatus, 300);
                    return "success";
                } else {
                    //验签不通过
                    System.err.println("验签失败");
                    return "failure";
                }
                return "failure";
            }
        }
    }

且,这个Service层,又是要(HttpServletRequest request, HttpServletResponse response) 它是微服务的一种吧?不然怎么会在Service层 要一个http这些呢?

  • 写回答

1条回答 默认 最新

  • 未聞花名丶 2021-12-14 20:51
    关注

    这个业务层返回的是业务逻辑有没有问题,成功或者失败,并不是支付宝的返回结果。
    http这个问题不知道什么意思?可以传request和response到业务层,但是一般不推荐 ,最好是controller处理好丢service

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 12月22日
  • 已采纳回答 12月14日
  • 修改了问题 12月14日
  • 修改了问题 12月14日
  • 展开全部

悬赏问题

  • ¥15 对于squad数据集的基于bert模型的微调
  • ¥15 为什么我运行这个网络会出现以下报错?CRNN神经网络
  • ¥20 steam下载游戏占用内存
  • ¥15 CST保存项目时失败
  • ¥15 树莓派5怎么用camera module 3啊
  • ¥20 java在应用程序里获取不到扬声器设备
  • ¥15 echarts动画效果的问题,请帮我添加一个动画。不要机器人回答。
  • ¥15 Attention is all you need 的代码运行
  • ¥15 一个服务器已经有一个系统了如果用usb再装一个系统,原来的系统会被覆盖掉吗
  • ¥15 使用esm_msa1_t12_100M_UR50S蛋白质语言模型进行零样本预测时,终端显示出了sequence handled的进度条,但是并不出结果就自动终止回到命令提示行了是怎么回事: