发起支付时访问sell.springboot.cn/sell/pay 支付页面提示 404 null

来源:8-4 动态注入参数发起支付

vcfriend

2018-04-27

师兄,你修改支付授信息后,发起支付时,页面错误提示已经由"数据库无此openid" 变成了404了. 这也是什么原因啊,视频中没有提到会遇见这个情况呀.

http://sell.springboot.cn/sell/pay?openid=oTgZpwamm7pDqG5Yrd4uFltzpLn8&orderId=1524818056286254206&returnUrl=http://sell.com/#/order/1524818056286254206

以上是我的配置截图

//img.mukewang.com/szimg/5ae307b20001575108770638.jpg

//img.mukewang.com/szimg/5ae307b20001225010290686.jpg

//img.mukewang.com/szimg/5ae307b20001cc7f08770638.jpg

//img.mukewang.com/szimg/5ae307b30001bdc006340467.jpg

@Controller
//@RequestMapping("/pay") //错误在此,多一层路径,导致访问 http://xsell.natapp1.cc/pay  出现404
public class PayController {
    @Autowired
    private OrderService orderService;

    @Autowired
    private PayService payService;

    /**
     * 微信支付帐号借用
     * 前端支付地址调用回调
     * @param openid 师兄干货处获取的openid
     * @param orderId 订单id
     * @param returnUrl 支付完返回地址
     * @param map 后端支付页面动态参数
     * @return 用户支付页面调用
     */
    @GetMapping("/pay")
    public ModelAndView index(@RequestParam("openid") String openid,
                              @RequestParam("orderId") String orderId,
                              @RequestParam("returnUrl") String returnUrl,
                              Map<String, Object> map) {
        return create(orderId, returnUrl, map);
    }

    @GetMapping("/pay/create")
    public ModelAndView create(@RequestParam("orderId") String orderId,
                               @RequestParam("returnUrl") String returnUrl,
                               Map<String, Object> map) {
        //1. 查询订单
        OrderDTO one = orderService.findOne(orderId);
        if (one == null) {
            throw new SellExecption(ResultTypeInfoEnum.ORDER_NOT_EXIST);
        }
        //2.发起支付
        PayResponse payResponse = payService.create(one);
        map.put("payResponse", payResponse);
        map.put("returnUrl", returnUrl);

        return new ModelAndView("pay/create", map);
    }
}


写回答

3回答

廖师兄

2018-04-27

你访问会转发到这个地址   http://xsell.natapp1.cc/pay  

你访问它看看,页面上显示什么

1
2
慕粉3770036
回复
vcfriend
你好,请问数据库无此openid是怎么解决的呢
2018-11-22
共2条回复

vcfriend

提问者

2018-04-28

关于支付成功后, 返回订单状态页面时,报404的错误提示.

需要用到 URLEncoder.encode(returnUrl, "UTF-8"), 把 returnUrl 用 UTF-8 编码一下

@Controller
@Slf4j
//@RequestMapping("/pay") //错误在此,多一层路径,导致访问 http://xsell.natapp1.cc/pay  出现404
public class PayController {
    @Autowired
    private OrderService orderService;

    @Autowired
    private PayService payService;

    /**
     * 微信支付帐号借用
     * 前端支付地址调用回调
     * @param openid 师兄干货处获取的openid
     * @param orderId 订单id
     * @param returnUrl 支付完返回地址
     * @param map 后端支付页面动态参数
     * @return 用户支付页面调用
     */
    @GetMapping("/pay")
    public ModelAndView index(@RequestParam("openid") String openid,
                              @RequestParam("orderId") String orderId,
                              @RequestParam("returnUrl") String returnUrl,
                              Map<String, Object> map) {
        return create(orderId, returnUrl, map);
    }

    @GetMapping("/pay/create")
    public ModelAndView create(@RequestParam("orderId") String orderId,
                               @RequestParam("returnUrl") String returnUrl,
                               Map<String, Object> map) {
        //1. 查询订单
        OrderDTO one = orderService.findOne(orderId);
        if (one == null) {
            throw new SellExecption(ResultTypeInfoEnum.ORDER_NOT_EXIST);
        }
        //2.创建预支付订单
        PayResponse payResponse = payService.create(one);
        map.put("payResponse", payResponse);
        //用这个还不行地址返回时会带有 http://sell.springboot.cn/sell/前缀 ,且报404错误
        //map.put("returnUrl", URLEncoder.encode(returnUrl));
        try {
            String decode = URLEncoder.encode(returnUrl, "UTF-8");
            map.put("returnUrl", decode);
        } catch (UnsupportedEncodingException e) {
            log.error("[支付订单] 解析返回地址错误, returnUrl={}", returnUrl);
            e.printStackTrace();
        }

        //3.生成JSAPI页面调用的支付参数并签名,返回给微信端让用户向微信支付系统发起支付和确认支付.
        return new ModelAndView("pay/create", map);
    }
}


0
1
JasonXiang
你好,你有碰到过点了支付以后,请求里面,发起支付的那个URL: http://sell.springboot.cn/sell/pay?openid=oTgZpwcDx4xfGs9XtQeMmN0miMbw&orderId=undefined&returnUrl=http%3A%2F%2Fsell.com%2F%23%2Forder%2Fundefined, orderId=undefined?
2018-05-03
共1条回复

vcfriend

提问者

2018-04-28

404错误找到了,访问路径多写了一层pay

@Controller
//@RequestMapping("/pay") //错误在此,多一层路径,导致访问 http://xsell.natapp1.cc/pay  出现404
public class PayController {
    @Autowired
    private OrderService orderService;
 
    @Autowired
    private PayService payService;
 
    /**
     * 微信支付帐号借用
     * 前端支付地址调用回调
     * @param openid 师兄干货处获取的openid
     * @param orderId 订单id
     * @param returnUrl 支付完返回地址
     * @param map 后端支付页面动态参数
     * @return 用户支付页面调用
     */
    @GetMapping("/pay")
    public ModelAndView index(@RequestParam("openid") String openid,
                              @RequestParam("orderId") String orderId,
                              @RequestParam("returnUrl") String returnUrl,
                              Map<String, Object> map) {
        return create(orderId, returnUrl, map);
    }
 
    @GetMapping("/pay/create")
    public ModelAndView create(@RequestParam("orderId") String orderId,
                               @RequestParam("returnUrl") String returnUrl,
                               Map<String, Object> map) {
        //1. 查询订单
        OrderDTO one = orderService.findOne(orderId);
        if (one == null) {
            throw new SellExecption(ResultTypeInfoEnum.ORDER_NOT_EXIST);
        }
        //2.发起支付
        PayResponse payResponse = payService.create(one);
        map.put("payResponse", payResponse);
        map.put("returnUrl", returnUrl);
 
        return new ModelAndView("pay/create", map);
    }
}


关于发起支付时,访问pay.html页面空白, 没有提示错误信息, 就是不能发起支付时, 可参考:

http://coding.imooc.com/learn/questiondetail/28679.html

0
0

Spring Boot双版本(1.5/2.1) 打造企业级微信点餐系统

从0到1开发中小型企业级Java应用,并学会迭代重构技巧

6410 学习 · 5247 问题

查看课程