微信服务商分账思路剖析、设计流程及源码实现
好久不见,文章很长时间没有更新了,一致追求于文章的质量输出,为了避免大家再次遇坑,特此记录一下分享给大家「微信服务商分账
」
需求背景
在服务商多商户运营下,需要在业务方「门店」这侧平摊给品牌「分公司或经销商」一定金额入账,以此作为基准,需要多商户底座来支撑需求实现,目前文章是在服务商模式实现分账逻辑
前期准备
新商户号入驻流程 1、申请商户号绑定到服务商特约商户下 2、商户号绑定小程序appId 3、小程序管理员登录后台进行同意商户号绑定
实现步骤
extra:在公司业务中,可能会分为两种模式:直连商户和服务商商户模式,在直连商户中不需要设置 subMchId 其他信息,所以它取值字段为 mchId,当然它的支付证书和密钥也应该用门店的,这时候在 PC 后台仅仅设置商户号和比例信息就不能满足需求了,这取决于公司的业务范围;服务商商户中进行下单和分账都需要设置 subMchId,但它的证书和密钥不需要使用门店商户的,服务商下所有特约商户统一使用服务商后台的证书和密钥即可。
流程分析
以上流程图涉及到的只是分账发起前的一些前置工作,也是必备工作
以上流程图,是如何运用分账记录进行实时的请求分账,以及分账前后的预处理工作流程分解
实现过程中问题点
源码
<binarywang.version>4.1.0</binarywang.version> <dependency> <groupId>com.github.binarywang</groupId> <artifactId>weixin-java-pay</artifactId> <version>${binarywang.version}</version> </dependency>
/** * @Author vnjohn * @since 2022/10/24 */ @Data @EqualsAndHashCode(callSuper = true) public class StoreCommissionRecordDTO extends BaseDTO implements Serializable { private static final long serialVersionUID = 4170369961010123978L; /** * 品牌ID */ private Long brandId; /** * 门店ID */ private Long storeId; /** * 门店商户号 */ private String mchId; /** * 订单编号 */ private String orderNo; /** * 当前分账金额 */ private BigDecimal commission; /** * 状态:0-冻结中、1-已结算/可提现、2-已失效),默认0 * @see BuCommissionStatusEnum */ private Integer status; /** * 分账执行次数 */ private Integer callNum; /** * 订单支付时间 */ private LocalDateTime orderPayTime; /** * 支付交易号:更新时传的是退款交易号,新增是支付交易号 */ private String outTransactionId; /** * 部分退款,出现记录多次分账情况 * 扩展字段:{"outTransactionId":xx,"commission":1} * outTransactionId:退款交易号 * commission:当次退款金额 */ private String extInfo; /** * 分账占比 */ private Integer commissionPercent; /** * 退款金额:单位分 */ private Long refundAmount; /** * 分账后交易后的订单号 */ private String profitSharingOrderNo; }
源码部分分享到此处,其他代码由于涉及隐私问题,无法贴出,有问题可以私信或留言 代码不重要,重要是流程和思路能够梳理清楚,代码至简,书写好的风格相信每个人都不一样,TODO
码农的成果
总结
网上资料也很多,该业务实现,杂七杂八的涉及也很多,也感谢各位博主的付出,贴出此文方案和自身的理解也是为了让各位大佬能够更快的熟悉和切入,避免将时间花费在无效的用处上
更多技术文章可以查看:
上一篇:
微信小程序ssm电影院售票系统app
下一篇:
教务信息管理系统的设计与实现