背景
现在做的所有系统都是SAAS,哪怕客户要单商户、单业务,我都会按照多商户、SAAS架构设计。不图别的 就图一个扩展。
比如我之前发的网约巴士系统,几乎所有的都是SAAS,可以独立核算、财务独立:
其中用的最多的就是分账,核心业务逻辑就是:
统一下单支付是多一个参数,告诉微信,这个订单需要分账哦:
然后设置定时任务、或者手动,调用官方接口进行分账。具体业务可以参考官方文档。
分账普通直连分账接口文档https://pay.weixin.qq.com/wiki/doc/api/allocation.php?chapter=27_7&index=8
解决方案
这里关键的是业务逻辑,主要处理如下几个:
- 下单设置分账参数
- 手动(自动)分账
- 记录相关业务逻辑
这里主要贴出来,自动分账的核心业务:
//分账到企业,请先添加分账账户
$receiverslists =(new Receiver())->where(['status'=>'1'])->field('id,type,account,"分账给合作方" as description')->select();
$receivers = [];
foreach($receiverslists as $s=>$v){
$receivers[] = [
"type"=> $v['type'],
"account"=>$v['account'],
"amount"=>$amount,
"description"=> "分到合作伙伴"
];
}
//如果后台删除了,就分账到企业
if(!$receivers){
$receivers = [
"type"=> "MERCHANT_ID",
"account"=>'1439888888',
"amount"=>$amount,
"description"=> "分到合作伙伴"
];
}
$result = $Wechatpay->ProfitShare($out_order_no,$transaction_id,$receivers,$val['paymentaccount_id']);
// dump($result);
// exit;
if($result['return_code'] == 'SUCCESS') {
if($result['result_code'] == 'SUCCESS'){
$data = [
"mch_id" =>$result['mch_id'],
"appid" =>$result['appid'],
"order_id" =>$result['order_id'],
"receivers" =>$result['receivers'],
"receivers_status" => $result['status'],
'return_code' => $result['return_code'],
'result_code' => $result['result_code']
];
}else{
$data = [
"mch_id" =>$result['mch_id'],
"appid" =>$result['appid'],
"return_msg" => $result['err_code_des'],
'return_code' => $result['return_code'],
'result_code' => $result['result_code']
];
}
}else{
$data = [
'return_msg' => $result['return_msg'],
'return_code' => $result['return_code']
];
}
主要工作流程是:
- 增加分账方管理;
- 增加自动分账函数;
- 设置查询分账业务功能;
- 小程序增加分账明细;
最后的话
业务为主、技术为后盾.