超简单的对接第三方API的微信支付(jsapi)。

我们从头开始:

1.首先导入依赖文件

        <!--wx-pay-sdk 目前我用的版本是 3.8.0-->
        <dependency>
            <groupId>com.github.binarywang</groupId>
            <artifactId>wx-java-pay-spring-boot-starter</artifactId>
            <version>${wx.java.version}</version>
        </dependency>

2.Controller层

  @PostMapping("/submitTradeRecord")
    @ApiOperation(value = "提交订单")
    public BeanResult<ReturnWxMpPayVO> submitTradeRecord(@RequestBody @Valid SubmitMemberVO vo) {
        ReturnWxMpPayVO result = userMemberPackageService.setUserMemberPackageMapper(vo.getConsumerUserId(),vo.getMid());
        return BeanResult.success(result);
    }

3.serviceImpl层

//上面大家可以写自己的代码逻辑
  

//调用微信统一下单接口
        WxPayUnifiedOrderRequest wxPayUnifiedOrderRequest = WxPayUnifiedOrderRequest.newBuilder()
                //用户openid
                .openid(userInfoMapper.selectById(consumerUserId).getOpenid()) 
                //自己设置规则的订单号
                .outTradeNo(info.getTradeNo())
                //支付金额(微信支付要用BigDecimal格式,这里用一个方法)
                .totalFee(WxPayUnifiedOrderRequest.yuanToFen
                    (info.getRealAmount().toString()))
                //订单描述(这里的名称最好自己设置)
                .body(info.getGoodsDescription()) 
                //微信支付方式
                .tradeType(WxPayConstants.TradeType.JSAPI)
                //用户ip地址
                .spbillCreateIp(InetAddress.getLoopbackAddress().getHostAddress())
                //通知回调地址(这里自己需要手写的)
                .notifyUrl(customizeProperties.getWxPayNotifyUrl())
                .build();
        log.info("微信统一下单请求参数组装完成: {}", wxPayUnifiedOrderRequest);
        WxPayUnifiedOrderResult wxPayUnifiedOrderResult;
        try {
            wxPayUnifiedOrderResult = wxPayService.unifiedOrder(wxPayUnifiedOrderRequest);
            log.info("微信统一下单接口调用完成: {}", wxPayUnifiedOrderResult);
        } catch (Exception e) {
            log.error("微信统一下单接口调用失败: {}", e.getMessage(), e);
            throw CustomizeServiceException.throwMsgException("微信统一下单接口调用失败");
        }

        //计算签名 给前端使用
        Map<String, String> paySignInfo = new HashMap<>();
        String timeStamp = String.valueOf(System.currentTimeMillis() / 1000);
        String nonceStr = String.valueOf(System.currentTimeMillis());
        paySignInfo.put("appId", customizeProperties.getWxPayAppId());
        paySignInfo.put("nonceStr", nonceStr);
        paySignInfo.put("timeStamp", timeStamp);
        paySignInfo.put("signType", "MD5");
        paySignInfo.put("package", "prepay_id=" + wxPayUnifiedOrderResult.getPrepayId());
        String paySign = SignUtils.createSign(paySignInfo, WxPayConstants.SignType.MD5, customizeProperties.getWxPayMchKey(), new String[0]);
        //组装返回数据
        vo.setAppId(customizeProperties.getWxPayAppId());
        vo.setTimeStamp(timeStamp);
        vo.setNonceStr(nonceStr);
        vo.setPrepayId(wxPayUnifiedOrderResult.getPrepayId());
        vo.setSignType(WxPayConstants.SignType.MD5);
        vo.setPaySign(paySign);


//下面大家可以写自己的代码逻辑
        return vo;

4.回调地址方法

 接下来的订单成功修改订单状态的逻辑 ,关闭订单的逻辑  我就不贴出来了 就靠你们自己写辣!

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值