微信小程序后端java服务商分账实现

微信小程序后端java服务商分账实现

最近公司申请微信服务商,需要给第三方提供支付、分账功能。

商户调用服务商统一支付

首先,服务商小程序支付,基本与普通商户小程序支付一致

支付使用服务商统一下单接口:微信官方文档地址https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_sl_api.php?chapter=9_1
在这里插入图片描述
这里的商户号是服务商的商户号,小程序appid是商家的appid,子商户号是商家的商户号且商家是服务商的特约商户需要授权。
在这里插入图片描述
这两个openid建议使用sub_openid,商户小程序的唯一openid。

在这里插入图片描述最重要的参数,传Y才能进行分账。

服务商分账

服务商分账有两种接口:单次分账和多次分账
微信官方文档地址:https://pay.weixin.qq.com/wiki/doc/api/allocation_sl.php?chapter=25_1&index=1

多的不说直接上代码:
引入maven 依赖

<dependency>
            <groupId>org.jodd</groupId>
            <artifactId>jodd-core</artifactId>
            <version>5.1.5</version>
 </dependency>
 <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.55</version>
 </dependency>
 
<dependency>
            <groupId>com.github.binarywang</groupId>
            <artifactId>weixin-java-pay</artifactId>
            <version>3.8.0</version>
        </dependency>

分账请求类

package com.linli.pay.service.pay.req;
import lombok.Data;
@Data
public class WxSharingOrderRequest {
   
    /**
     * 服务商商户号
     */
    private String mch_id;

    /**
     * 子商户号
     */
    private String sub_mch_id;

    /**
     * 服务商appid
     */
    private String appid;

    /**
     * 子商户appid
     */
    private String sub_appid;

    /**
     * 随机字符串
     */
    private String nonce_str;

    /**
     * 签名
     */
    private String sign;
    /**
     * 签名类型(只支持HMAC-SHA256)
     */
    private String sign_type;

    /**
     * 微信订单号
     */
    private String transaction_id;

    /**
     * 商家订单号
     */
    private String out_trade_no;

    /**
     * 商户分账单号(同一个单号多次提交只算一次)
     */
    private String out_order_no;

    /**
     * 商户分账金额(小于等于订单金额*(1-手续费)*最大分账比例)
     */
    private Integer amount;

    /**
     * 分账接收方列表(单次分账不能即是支付商户又是接收商户,多次分账没有限制)
     */
    private String receivers;

}

分账返回类

package com.linli.pay.service.pay.resp;
import lombok.Data;

@Data
public class WxSharingOrderResp {
   

    //返回状态码,通信标识,SUCCESS/FAIL
    private String return_code;
    //返回信息,通信标识OK
    private String return_msg;
    //业务结果,交易标识,SUCCESS/FAIL
    private String result_code;
    //错误代码
    private String err_code;
    //错误代码描述
    private String err_code_des;
    //商户号
    private String mch_id;
    //子商户号
    private String sub_mch_id;
    //公众账号id
    private String appid;

    private String sub_appid;

    //随机字符串
    private String nonce_str;
    //签名
    private String sign;
    //微信支付订单号
    private String transaction_id;
    //商户分账单号(商户订单号)
    private String out_order_no;
    //商户分账单号
    private String order_id;

}

分账接收方

package com.linli.pay.service.pay.req;

import lombok.Data;

@Data
public class WxSharingReceiversVO {
   
    /**
     * 分账接收方类型
     */
    private String type;

    /**
     * 分账接收方帐号
     */
    private String account;

    /**
     * 分账金额
     */
    private Integer amount;

    /**
     * 分账描述
     */
    private String description;
}

application.yml配置类

wx:
  mini:
    keyPath: classpath:cert/apiclient_cert.p12 # 商户p12证书的位置,可以指定绝对路径,也可以指定类路径(以classpath:开头)
    busAppId: 
    busMchId: 
    busMchKey: 
    busSubAppId: 
    busSubMchId: 

在这里插入图片描述

package com.linli.pay.config.wx;

import com.github.binarywang.wxpay.config.WxPayConfig;
import com.github.binarywang.wxpay.service.WxPayService;
import com.github.binarywang.wxpay.service.impl.WxPayServiceImpl;
import lombok.Data;
import org.apache.commons.lang3.StringUtils;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;


@Data
@Configuration
@ConfigurationProperties(prefix = "wx.mini")
public class WxMiniPayProperties {
   

  /**
   * apiclient_cert.p12文件的绝对路径,或者如果放在项目中,请以classpath:开头指定
   */
  private String keyPath;

  /**
   * 服务商appid
   */
  private String busAppId;

  /**
   *服务商商户号
   */
  private String busMchId;

  /**
   * 服务商商户密钥
   */
  private String busMchKey;

  /**
   * 调起支付的小程序APPID
   */
  private String busSubAppId;

  /**
   * 微信支付子商户号
   */
  private String busSubMchId;


  @Bean(name = "wxBusMiniPayService")
  public WxPayService wxBusMiniPayService() {
   
    WxPayConfig payConfig = new WxPayConfig();
    payConfig.setAppId(StringUtils.trimToNull(this.busAppId));
    payConfig.setMchId(StringUtils.trimToNull(this.busMchId));
    payConfig.setMchKey(StringUtils.trimToNull(this.busMchKey));
    payConfig.setSubAppId(StringUtils.trimToNull(this.busSubAppId));
    payConfig.setSubMchId(StringUtils.trimToNull(this.busSubMchId));
    payConfig.setKeyPath(StringUtils.trimToNull(this.keyPath));

    // 可以指定是否使用沙箱环境
    payConfig.setUseSandboxEnv(false);

    WxPayService wxPayService = new WxPayServiceImpl();
    wxPayService.setConfig(payConfig);
    return wxPayService;
  }

}

service实现类

/**
     * 单次分账
     * @param data
     * @return
     */
    public WxSharingOrderResp oncePaySharing(WxSharingOrderRequest data)throws Exception
  • 8
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值