微信小程序-支付封装【拿来即用】

本文档详细介绍了如何使用SpringBoot、Java和Fastjson等技术进行微信小程序支付的封装,包括创建订单、订单回调通知、查询订单和关闭订单的步骤。提供了XML和Java两种配置方式,并展示了核心工具类的使用方法及Controller中相关接口的实现。同时,提供了源码下载链接和作者的联系方式,以便进一步获取帮助。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

微信小程序-支付封装

原则

拿来即用,节省开发时间

介绍

创建订单(统一下单),订单回调通知,查询订单,关闭订单

技术

springboot,java,fastjson,okhttp,mysql

使用方法

依赖

<properties>
    <java.version>1.8</java.version>
    <skipTests>true</skipTests>
</properties>

<dependency>
    <groupId>com.squareup.okhttp3</groupId>
    <artifactId>okhttp</artifactId>
    <version>4.0.1</version>
</dependency>

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <optional>true</optional>
</dependency>

支付配置

有xml和java两种方式,选择一种即可
weixin:
  pay:
    appId: 
    mchId: 
    mchPayApiKey: 
    notifyUrl: 
@Component
public class WxPayConfig {

    public static String APP_ID = "";//appId

    public static String MCH_ID = "";//商户号

    public static String MCH_PAY_API_KEY = "";//商户号 - API密钥

    public static String NOTIFY_URL = "";//通知地址

    @Value("${weixin.pay.appId}")
    public void setAppId(String appId) {
        WxPayConfig.APP_ID = appId;
    }

    @Value("${weixin.pay.mchId}")
    public void setMchId(String mchId) {
        WxPayConfig.MCH_ID = mchId;
    }

    @Value("${weixin.pay.mchPayApiKey}")
    public void setMchPayApiKey(String mchPayApiKey) {
        WxPayConfig.MCH_PAY_API_KEY = mchPayApiKey;
    }

    @Value("${weixin.pay.notifyUrl}")
    public void setNotifyUrl(String notifyUrl) {
        WxPayConfig.NOTIFY_URL = notifyUrl;
    }
}

核心工具使用

//创建订单(统一下单)
WxPay.createOrder(openId, order, body, buyPrice, ipAddr);
//订单通知
WxPay.notify(request);
//订单查询
WxPay.queryOrder(outTradeNo);
//订单关闭
WxPay.closeOrder(outTradeNo);

Controller

/**
 * 微信支付
 */
@RestController
@Slf4j
@RequestMapping("/api/wxpay/v2")
public class WxPayController {

    //...省略业务代码

    /**
     * 创建订单(统一下单)
     *
     * @return
     */
    @PostMapping("/createOrder")
    @ApiModelProperty("统一下单")
    public Result unifiedorder(@Validated JsapiParamModel jsapiParamModel, HttpServletRequest request) {
        //...省略部分代码
        //创建订单号
        String order = WxPayUtil.createOrderNum();
        //创建订单
        WxPayResultModel<CreateOrderResultModel> wxPayResultModel = WxPay.createOrder(openId, order, body, buyPrice, WxPayUtil.getIpAddr(request));
        if (jsapiResultModel.getIsSuccess()) {
            //输入【业务代码】
            //返回小程序调起支付参数
            return ResultUtil.data(wxPayResultModel.getOther());
        } else {
            //返回失败提示
            return ResultUtil.error(wxPayResultModel.getMessage());
        }
    }

    /**
     * 查询订单
     * @param outTradeNo
     * @return
     */
    @GetMapping("/queryOrder/{outTradeNo}")
    public Result queryOrder(@PathVariable String outTradeNo) {
        //这里只需要查询数据库即可,无需调用查询接口
        return ResultUtil.success("查询结果");
    }

    /**
     * 关闭订单
     * @param outTradeNo
     * @return
     */
    @GetMapping("/closeOrder/{outTradeNo}")
    public Result closeOrder(@PathVariable String outTradeNo) {
        WxPayResultModel<CloseOrderResultModel> resultModel = WxPay.closeOrder(request);
        if(resultModel.getIsSuccess()){
            //输入【业务代码】
            return ResultUtil.success("关闭成功");
        }else{
            return ResultUtil.success(resultModel.getMessage());
        }
    }

    /**
     * 订单通知
     */
    @RequestMapping("/notify")
    public void notify(HttpServletRequest request, HttpServletResponse response) {
        log.info("微信支付通知-收到通知");
        String NOTIFY_FAIL = "<xml><return_code><![CDATA[FAIL]]></return_code><return_msg><![CDATA[%s]]></return_msg></xml>";

        //处理回调数据
        WxPayResultModel<OrderNotifyResultModel> resultModel = WxPay.notify(request);
        String result = (String) resultModel.getOther();
        if (resultModel.getIsSuccess()) {
            OrderNotifyResultModel orderNotifyResultModel = resultModel.getData();
            //校验金额,防止篡改
            PayOrderEntity payOrderEntity = payOrderService.findByOutTradeNo(orderNotifyResultModel.getOutTradeNo());
            if (payOrderEntity.getBuyPrice().intValue() == Integer.parseInt(orderNotifyResultModel.getTotalFee())) {
                //查询订单,查看最终处理结果
                WxPayResultModel<QueryOrderResultModel> queryOrderResultModelWxPayResultModel = WxPay.queryOrder(orderNotifyResultModel.getOutTradeNo());
                if (queryOrderResultModelWxPayResultModel.getIsSuccess()) {
                    QueryOrderResultModel queryOrderResultModel = queryOrderResultModelWxPayResultModel.getData();
                    //输入【业务代码】
                } else {
                    result = String.format(NOTIFY_FAIL, queryOrderResultModelWxPayResultModel.getMessage());
                }
            } else {
                result = String.format(NOTIFY_FAIL, "金额不相符");
            }
        }

        log.info("微信支付通知-处理结果:{}", result);
        WxPayUtil.outXml(response, result);
    }
}

源码

https://download.youkuaiyun.com/download/qq_17702967/85306457

源码主要清单

1.核心工具(wxpayv2)【核心】
2.业务代码,数据库表(module)【可参考】
3.实现思路(README.md)
4.联系方式,可一对一帮你解决支付相关问题(README.md)

博客

https://blog.youkuaiyun.com/qq_17702967/article/details/124622002

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

格子软件

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值