springboot集成微信支付服务商版之付款码支付

本文档详细介绍了如何在SpringBoot项目中集成微信支付服务商版的付款码支付功能,包括引入依赖、配置参数、创建配置类及工具类的实现,帮助开发者快速理解和实践。
摘要由CSDN通过智能技术生成

springboot集成微信支付服务商版之付款码支付


一、说明:
通过引入依赖实现微信支付,是非常方便的;
但是官方的SDK没有服务商版,以下是在原SDK的基础上封装了服务商版,共勉;

二、开发步骤
1.在pom.xml中引入依赖

<dependency>
  <groupId>com.github.wxpay</groupId>
  <artifactId>wxpay-sdk</artifactId>
  <version>0.0.3</version>
</dependency>

2.创建基础参数配置类,注意看每个参数的注释

/**
 * 服务商版
 */
public interface WXPayConfigUp {

    /**
     * 获取 服务商商户的APP ID
     *
     * @return App ID
     */
    public String getAppID();

    /**
     * 子商户公众账号AppID
     * 如果需要获取sub_openid,则此参数必传
     *
     * @return App ID
     */
    public String getSubAppID();

    /**
     * 获取 Mch ID
     *
     * @return Mch ID
     */
    public String getMchID();

    /**
     * 获取 Mch ID
     * 服务商平台创建的子商户号(必须是属于对应的服务商平台创建)
     * @return Mch ID
     */
    public String getSubMchID();

    /**
     * 获取 API 密钥
     * 服务商平台的API密钥
     * @return API密钥
     */
    public String getKey();

    /**
     * 获取商户证书内容
     *
     * @return 商户证书内容
     */
    public InputStream getCertStream();

    /**
     * HTTP(S) 连接超时时间,单位毫秒
     *
     * @return
     */
    public int getHttpConnectTimeoutMs();

    /**
     * HTTP(S) 读数据超时时间,单位毫秒
     *
     * @return
     */
    public int getHttpReadTimeoutMs();
    
}

3.基础参数配置类实现类

/**
 * 服务商版
 */
@Data
public class MyWechatpayUpConfig implements WXPayConfigUp {

    public String getAppID() {
        return null;
    }

    public String getSubAppID() {
        return null;
    }

    public String getMchID() {
        return null;
    }

    public String getSubMchID() {
        return null;
    }

    public String getKey() {
        return null;
    }

    public InputStream getCertStream() {
        return null;
    }

    public int getHttpConnectTimeoutMs() {
        return 0;
    }

    public int getHttpReadTimeoutMs() {
        return 0;
    }
}

4.工具类WXPayUp

    /**
     * 作用:提交刷卡支付<br>
     * 场景:刷卡支付
     * @param reqData 向wxpay post的请求数据
     * @return API返回数据
     * @throws Exception
     */
    public Map<String, String> microPay(Map<String, String> reqData) throws Exception {
        return this.microPay(reqData, this.config.getHttpConnectTimeoutMs(), this.config.getHttpReadTimeoutMs());
    }

    /**
     * 作用:提交刷卡支付<br>
     * 场景:刷卡支付
     * @param reqData 向wxpay post的请求数据
     * @param connectTimeoutMs 连接超时时间,单位是毫秒
     * @param readTimeoutMs 读超时时间,单位是毫秒
     * @return API返回数据
     * @throws Exception
     */
    public Map<String, String> microPay(Map<String, String> reqData, int connectTimeoutMs, int readTimeoutMs) throws Exception {
        String url;
        if (this.useSandbox) {
            url = WXPayConstants.SANDBOX_MICROPAY_URL;
        }
        else {
            url = WXPayConstants.MICROPAY_URL;
        }
        String respXml = this.requestWithoutCert(url, this.fillRequestData(reqData), connectTimeoutMs, readTimeoutMs);
        return this.processResponseXml(respXml);
    }


    /**
     * 服务商版
     * 向 Map 中添加 appid、mch_id、nonce_str、sign_type、sign <br>
     * 该函数适用于商户适用于统一下单等接口,不适用于红包、代金券接口
     *
     * @param reqData
     * @return
     * @throws Exception
     */
    public Map<String, String> fillRequestData(Map<String, String> reqData) throws Exception {
        reqData.put("appid", config.getAppID());
        reqData.put("sub_appid",config.getSubAppID());
        reqData.put("mch_id", config.getMchID());
        reqData.put("sub_mch_id",config.getSubMchID());
        reqData.put("nonce_str", WXPayUtil.generateNonceStr());
        if (WXPayConstants.SignType.MD5.equals(this.signType)) {
            reqData.put("sign_type", WXPayConstants.MD5);
        }
        else if (WXPayConstants.SignType.HMACSHA256.equals(this.signType)) {
            reqData.put("sign_type", WXPayConstants.HMACSHA256);
        }
        reqData.put("sign", WXPayUtil.generateSignature(reqData, config.getKey(), this.signType));
        return reqData;
    }

5.主体报文逻辑如下

    /**
     * 服务商版-付款码支付
     * @param
     */
    public void weChatPayMicroPay() throws Exception {
        //主要参数
        MyWechatpayUpConfig myWechatpayUpConfig = new MyWechatpayUpConfig();
        WXPayUp wxPayUp = new WXPayUp(myWechatpayUpConfig);
        //组装参数
        //组装参数
        Map<String,String> requestData = new HashMap<String, String>();
        requestData.put("body","你的标语");
        requestData.put("out_trade_no","商户系统内部订单号");
        requestData.put("total_fee","订单总金额,单位为分,只能为整数");
        requestData.put("spbill_create_ip","");
        requestData.put("auth_code","付款码");
        //发起支付
        Map<String, String>  mapBack = wxPayUp.microPay(requestData);
        if("SUCCESS".equals(mapBack.get("return_code"))){
            if("SUCCESS".equals(mapBack.get("result_code"))){
                //支付成功,处理业务


            }else{
                System.out.println("接口异常信息====="+mapBack.get("err_code_des"));
            }
        }else{
            System.out.println("通信异常信息====="+mapBack.get("return_msg"));
        }

    }

了解更多资讯,请关注此公众号!!!
在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot集成微信支付,你可以按照以下步骤进行操作: 1. 首先,你需要在微信商户平台注册账号并开通支付功能。获取到微信支付的商户号(mchId)、API密钥(apiKey)和应用ID(appId)等关键信息。 2. 在你的Spring Boot项目中添加相关依赖。你可以在项目的pom.xml文件中添加以下依赖信息: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>com.github.wxpay</groupId> <artifactId>wxpay-sdk</artifactId> <version>3.0.10</version> </dependency> ``` 3. 创建一个配置类,配置微信支付相关参数。在该配置类中,你需要使用上面获取到的商户号、API密钥等信息进行配置: ```java @Configuration public class WxPayConfig { @Value("${wxpay.appId}") private String appId; @Value("${wxpay.mchId}") private String mchId; @Value("${wxpay.apiKey}") private String apiKey; // 创建WxPayService Bean,并配置相关参数 @Bean public WxPayService wxPayService() { WxPayConfig wxPayConfig = new WxPayConfig(); wxPayConfig.setAppId(appId); wxPayConfig.setMchId(mchId); wxPayConfig.setMchKey(apiKey); wxPayConfig.setNotifyUrl("你的异步通知地址"); return new WxPayServiceImpl(wxPayConfig); } } ``` 4. 创建一个Controller处理支付请求。在该Controller中,你可以使用WxPayService来进行支付相关操作,例如生成支付订单、发起支付等。 ```java @RestController @RequestMapping("/pay") public class WxPayController { @Autowired private WxPayService wxPayService; @PostMapping("/createOrder") public String createOrder() { // 生成支付订单 WxPayUnifiedOrderRequest request = new WxPayUnifiedOrderRequest(); // 设置订单参数 // ... WxPayUnifiedOrderResult result = wxPayService.unifiedOrder(request); // 处理支付结果,返回给前端 // ... return "success"; } } ``` 这只是一个简单的示例,你可以根据实际需求进行更详细的配置和处理。同时,你还需要根据自己的业务逻辑来处理支付结果的异步通知和订单查询等操作。 希望以上信息对你有所帮助!如果你还有其他问题,请继续提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值