继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

【九月打卡】第8天 Java支付全家桶 企业级各类支付手段一站式解决方案(5-5)

慕仔9208797
关注TA
已关注
手记 60
粉丝 1
获赞 7

课程名称:Java支付全家桶 企业级各类支付手段一站式解决方案

主讲老师:神思者

课程内容:

今天课程学习的主要知识点内容包括:
编写后端Controller类的的接口方法,使用 Swagger 调试后端接口。

课程收获:

1、编写后端Controller类的的接口方法,其主要代码如下:

    @Login
    @PostMapping("/nativeAppPayOrder")
    @ApiModelProperty("小程序付款")
    public R nativeAppPayOrder(@RequestBody PayOrderForm form, @RequestHeader HashMap<String, String> header) {
        ValidatorUtils.validateEntity(form);
        String token = header.get("token");
        long userId = Convert.toLong(jwtUtils.getClaimByToken(token).getSubject());
        long orderId = form.getOrderId();

        OrderEntity order = orderService.getOne(
                Wrappers.<OrderEntity>lambdaQuery()
                        .eq(OrderEntity::getId, orderId)
                        .eq(OrderEntity::getUserId, userId)
                        .last("limit 1")
        );
        if (null == order) {
            return R.error("不是有效订单");
        }
        String amount = Convert.toStr(order.getAmount().multiply(new BigDecimal(100)).intValue());

        // 其他校验
        // 验证购物券是否有效
        // 验证团购活动是否有效

        // 向微信平台发送请求,创建支付订单
        try {
            String code = IdUtil.fastSimpleUUID();
            WXPay wxPay = new WXPay(myWXPayConfig);
            Map<String ,String> map = new HashMap<>();
            map.put("out_trade_no", code);
            map.put("total_fee", amount);
            map.put("attach", "附加数据-xx分店");
            map.put("body", "订单备注-NATIVE支付测试");
            map.put("nonce_str", WXPayUtil.generateNonceStr());
            map.put("spbill_create_ip", "127.0.0.1");
            map.put("notify_url", "https://haiten.virs.top/renren-fast/app/wx/recievePayMessage");
            map.put("trade_type", "NATIVE");
            Map<String, String> result = wxPay.unifiedOrder(map);
            String prepayId = result.get("prepay_id");
            if (null != prepayId && 0 != prepayId.length()) {
                order.setCode(code);
                order.setPrepayId(prepayId);
                orderService.updateById(order);

                String codeUrl = result.get("code_url");
                return R.ok().put("codeUrl", codeUrl);
            } else {
                return R.error("微信支付模块故障");
            }
        } catch (Exception e) {
            e.printStackTrace();
            return R.error("微信支付模块故障");
        }
    }

关键点:
(1)Native 支付不需要传 openid 字段;
(2)支付方式传参的时候,需要改成 NATIVE,需要注意的是这里只能填大写的 NATIVE,不能填小写或驼峰形式;
(3)关于数字签名,xwPay的方法里面以及该封装了数据签名的实现,所以不需要额外做数据签名,如果需要手工数据签名,则应该使用 WXPayUtil.generateSignatrue(map, key) 方法生成;
(4)注意需要保存接口返回的微信支付id: prepay_id;
(5)提取接口放回里面的 code_url,后续用于生成二维码图片返回给前端;

2、使用 Swagger 调试后端接口
关键点:
(1)Swagger 页面的路径:http://localhost:8080/renren-fast/swagger-ui.html
(2)先使用 Swagger 调用登录接口,获取返回的 token,并保存到页面顶端的 Authorize 处,让 Swagger 记住令牌;
(3)调试后端的 Native 支付订单接口;

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP