知识付费如何二开分销功能

395 篇文章 35 订阅

首先我们要知道什么是分销系统?

分销系统指通过互联网将供应商与经销商有机地联系在一起,为企业的业务经营及与贸易伙伴的合作提供了一种全新的模式。供应商、分支机构和经销商之间可以实现实时地提交业务单据、查询产品供应和库存状况、并获得市场、销售信息及客户支持,实现了供应商、分支机构与经销商之间端到端的供应链管理,有效地缩短了供销链。

知识付费的分销功能主要体现在专题课程及会员模块;用户购买专题课程、会员后会给用户的上级和上上级返佣。

那么分销系统是如何实现的呢?

知识付费系统中在用户进入系统时若是带有上级的信息,那么这个用户就是别的用户发展的下级,我们就需要记录该用户的上级信息。数据库用户表eb_user表中有字段spread_uid(推广员id),该字段记录的是用户的上级id。
首先确定什么时候执行分销功能?分销功能执行肯定是需要订单结束后,这样可以避免大多数用户退款后的佣金返还问题。

然后就是分销代码的书写了,知识付费分销分为人人分销和指定分销;人人分销是指系统中的所有用户均可参与分销活动,并且在下级用户购买后可以获得佣金。指定分销是指只有系统设置推广权限的用户才能在下级用户购买后获得佣金。因为知识付费的分销是二级分销,所有我们是直接写了一级返佣和二级返佣的方法,在执行完一级返佣后执行二级返佣,这是分销的最简单逻辑了。
以专题课程为例,在专题课程购买成功后执行返佣。(注:以下代码为部分代码,详细见知识付费https://gitee.com/ZhongBangKeJi/crmeb_zzff_class/tree/master

/**
 * //TODO 专题支付成功后
 * @param $orderId
 * @param $notify
 * @return bool
 */
public static function paySuccess($orderId)
{
    $order = self::where('order_id', $orderId)->where('type',0)->find();
    if(!$order) return false;
    User::bcInc($order['uid'], 'pay_count', 1, 'uid');
    $res = self::where('order_id', $orderId)->where('type',0)->update(['paid' => 1, 'pay_time' => time()]);
    try {
        //专题返佣
        User::backOrderBrokerage($order);
    } catch (\Throwable $e) {
    }
    StoreOrderStatus::status($order->id, 'pay_success', '用户付款成功');
    return false !== $res;
}
/**
 * 一级推广 专题
 * @param $orderInfo
 * @return bool
 */
public static function backOrderBrokerage($orderInfo)
{
    $userInfo = User::getUserInfo($orderInfo['uid']);
    if (!$userInfo || !$userInfo['spread_uid']) return true;
    $course_distribution_switch = SystemConfigService::get('course_distribution_switch');//课程分销开关
    if($course_distribution_switch==0) return true;
    $storeBrokerageStatu = SystemConfigService::get('store_brokerage_statu') ?: 1;//获取后台分销类型
    if ($storeBrokerageStatu == 1) {
        if (!User::be(['uid' => $userInfo['spread_uid'], 'is_promoter' => 1])) return true;
    }
    $brokerageRatio = bcdiv(SystemConfigService::get('store_brokerage_ratio'),100,2);
    if ($brokerageRatio <= 0) return true;
    $brokeragePrice = bcmul($orderInfo['pay_price'], $brokerageRatio, 2);
    if ($brokeragePrice <= 0) return true;
    $mark = '一级推广人' .$userInfo['nickname'] . '消费' . floatval($orderInfo['pay_price']) . '元购买专题,奖励推广佣金' . floatval($brokeragePrice);
    self::beginTrans();
    $res1 = UserBill::income('购买专题返佣', $userInfo['spread_uid'], 'now_money', 'brokerage', $brokeragePrice, $orderInfo['id'], 0, $mark);
    $res2 = self::bcInc($userInfo['spread_uid'], 'brokerage_price', $brokeragePrice, 'uid');
    $res = $res1 && $res2;
    self::checkTrans($res);
    if ($res) self::backOrderBrokerageTwo($orderInfo);
    return $res;
}
/**
 * 二级推广 专题
 * @param $orderInfo
 * @return bool
 */
public static function backOrderBrokerageTwo($orderInfo)
{
    $userInfo = User::getUserInfo($orderInfo['uid']);
    $userInfoTwo = User::getUserInfo($userInfo['spread_uid']);
    if (!$userInfoTwo || !$userInfoTwo['spread_uid']) return true;
    $course_distribution_switch = SystemConfigService::get('course_distribution_switch');//课程分销开关
    if($course_distribution_switch==0) return true;
    $storeBrokerageStatu = SystemConfigService::get('store_brokerage_statu') ?: 1;//获取后台分销类型
    if ($storeBrokerageStatu == 1) {
        if (!User::be(['uid' => $userInfoTwo['spread_uid'], 'is_promoter' => 1])) return true;
    }
    $brokerageRatio = bcdiv(SystemConfigService::get('store_brokerage_two'),100,2);
    if ($brokerageRatio <= 0) return true;
    $brokeragePrice = bcmul($orderInfo['pay_price'], $brokerageRatio, 2);
    if ($brokeragePrice <= 0) return true;
    $mark = '二级推广人' . $userInfo['nickname'] . '消费' . floatval($orderInfo['pay_price']) . '元购买专题,奖励推广佣金' . floatval($brokeragePrice);
    self::beginTrans();
    $res1 = UserBill::income('购买专题返佣', $userInfoTwo['spread_uid'], 'now_money', 'brokerage', $brokeragePrice, $orderInfo['id'], 0, $mark);
    $res2 = self::bcInc($userInfoTwo['spread_uid'], 'brokerage_price', $brokeragePrice, 'uid');
    $res = $res1 && $res2;
    self::checkTrans($res);
    return $res;
}

这样专题课程的二级分销就完成了,若是想再加第三级分销,我们一样的逻辑,获取二级的上级,然后判断返佣即可。
如果你觉得这篇文章对你有点用的话,麻烦请给我们的开源项目点点star: http://github.crmeb.net/u/defu 不胜感激 !

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值