今天把微擎的分销系统整合到独立开发的影院模块,进行了多项的测试,并且把测试的结果写起来:
过程是这样的,用户在独立开发的影院系统里进行下单,支付成功在回调的时候,调用分销数据的写入:
1:分销中心必须为开启状态;
2:分销的等级必须开启
在这顺便讨论下问题,如有三级分销A->B->C->D
如果开启的为三级,那么ABC都会获取对应的返佣规则(对于D来说,1级=C;2级=B;3级=A);
假设佣金的规则为:1级10%;2级8%;3级5%;
D用户购买了100元的产品
A获取5元;B获取8元;C获取10元
由于订单是独立在影院系统的,所以需要同步写入一份订单数据到微擎的三级分销order即可!
附上一个扩展类库
直接调用get_shop_sysset()方法,并且带上需要的参数
class IPanYing{
/**
* 判断公众号数据是否对应,因为一个用户可以有多个公众号!权限判断!
* @param unknown $uniacid
* @param unknown $uid
* @return boolean
*/
private function get_uni_account_user($uniacid,$uid){
$sql=”SELECT * FROM `”.$this->pre.”uni_account_users` WHERE `uniacid`='”.(int)$uniacid.”‘ AND `uid`='”.(int)$uid.”‘”;
$data = $this->pdo->query($sql);
$data = $data->fetch(PDO::FETCH_ASSOC);
if (!empty($data)){
return true;
} else {
return false;
}
}
/**
* 获取当前公众号的plugins
* @param unknown $appid
* @return unknown
*/
private function get_ewei_shop_sysset($appid){
$sql = “SELECT plugins FROM `”.$this->pre.”ewei_shop_sysset` WHERE `uniacid` = ‘”.(int)$appid.”‘”;
$data = $this->pdo->query($sql);
$data = $data->fetch(PDO::FETCH_ASSOC);
return $data[‘plugins’];
}
/**
* 查看商家是否开启了公众号模块状
* @param unknown $appid
* @param unknown $uid
*/
private function get_rule($appid){
$sql = “SELECT * FROM `”.$this->pre.”rule` WHERE `uniacid` = ‘”.(int)$appid.”‘ AND `module`=’cover'”;
$data = $this->pdo->query($sql);
return $data->fetch(PDO::FETCH_ASSOC);
}
private $openid; #-记录当前的用户ID
/**
*
* @param unknown $appid #-公众号唯一ID
* @param unknown $uid #-商家的唯一ID
* @param unknown $openid #-发起订单的用户ID,私有成员不同
* @param unknown $money #-金额
* @param unknown $orders #-订单数据
*/
function get_shop_sysset($appid,$uid,$openid,$money,$orders){
if ($this->get_uni_account_user($appid, $uid)){ #-判断是否合法,即根据用户ID再判断公众号
$status = $this->get_rule($appid); #-判断三级分销是否已经为启用的状态
$this->openid= $openid; //获取当前的用户OPENID;
if ($status[‘status’]==1 || $status[‘status’]==’1′){ #-如果有打开分销系统
$plugins = unserialize($this->get_ewei_shop_sysset($appid)); #-提取分销的数据
$level = $plugins[‘commission’][‘level’];
$temp_agentid = $this->getagentid($appid); #-获取临时的上级ID,因为要写入订单数据的
$this->setOrder($orders, $money, $appid, $temp_agentid); #-写入一份订单数据
$order_id = $this->pdo->lastInsertId(); #-获取当前的订单ID
$commission = array();
if ($level>0){ #-如果大于0表示开启了佣金
$default_money = 100; #-测试的时候使用的默认金额,否则使用$money
for ($i=1;$i<=$level;$i++){ #-最大的次数字
$text = ‘commission’.$i; #-获取需要循环提取的字段
$temp_data = $plugins[‘commission’][$text]*0.01; #-提取对应字段值的VALUE并且转化成百分比
$commission[$i] = intval($default_money*$temp_data); #-获取完整的佣金数据,只保留整数
#-如果需要小数后两位使用round()方法
}
for ($o=1;$o<=3;$o++){
if (isset($commission[$o]) && !empty($commission[$o])){
} else {
$commission[$o]=’0.00′;
}
}
$this->setOrderGoods($appid, $order_id, $money, ‘电影票level=’.$level,$commission);
} else {
for ($o=1;$o<=3;$o++){
$commission[$o]=’0.00′;
}
$this->setOrderGoods($appid, $order_id, $money, ‘电影票level=’.$level,$commission);
}
} else {
}
}
}
private function setOrderGoods($appid,$order_id,$price,$optionname,$commission){
$sql = “INSERT INTO `”.$this->pre.”ewei_shop_order_goods`
SET `uniacid` = ‘”.(int)$appid.”‘,
`orderid` = ‘”.(int)$order_id.”‘,
`goodsid` = ‘0’,
`price` = ‘”.$price.”‘,
`total` = ‘1’,
`optionid` = ‘0’,
`createtime` = ‘”.time().”‘,
`optionname` = ‘”.$optionname.”‘,
`commission1` = ‘”.$this->orderCommission($commission[1]).”‘,
`applytime1` = ‘0’,
`checktime1` = ‘0’,
`paytime1` = ‘”.time().”‘,
`invalidtime1` = ‘0’,
`deletetime1` = ‘0’,
`status1` =’0′,
`content1` =’NULL’,
`commission2` = ‘”.$this->orderCommission($commission[2]).”‘,
`applytime2` = ‘0’,
`checktime2` = ‘0’,
`paytime2` = ‘”.time().”‘,
`invalidtime2` = ‘0’,
`deletetime2` = ‘0’,
`status2` =’0′,
`content2` =’NULL’,
`commission3` = ‘”.$this->orderCommission($commission[3]).”‘,
`applytime3` = ‘0’,
`checktime3` = ‘0’,
`paytime3` = ‘”.time().”‘,
`invalidtime3` = ‘0’,
`deletetime3` = ‘0’,
`status3` =’0′,
`content3` =’NULL’,
`realprice` = ‘”.$price.”‘”;
$this->pdo->exec($sql);
}
/**
* 根据金额进行序列化
* @param unknown $money
* @return unknown
*/
private function orderCommission($money){
$arr[‘default’]=”$money”;
$text = serialize($arr);
return $text;
}
/**
* 写入订单数据
* @param unknown $order
* @param unknown $money
* @param unknown $appid
* @param unknown $agentid
*/
private function setOrder($order,$money,$appid,$agentid){
$sql=”INSERT INTO `”.$this->pre.”ewei_shop_order`
SET `uniacid`='”.(int)$appid.”‘,
`openid` = ‘”.$this->openid.”‘,
`agentid` = ‘”.(int)$agentid.”‘,
`ordersn` = ‘”.$order[‘out_trade_no’].”‘,
`price` = ‘”.$money.”‘,
`goodsprice` = ‘”.$money.”‘,
`discountprice` = ‘0.00’,
`status` =’3′,
`paytype` = ’21’,
`addressid` = ‘”.(int)$this->getAdders($appid).”‘,
`dispatchprice` = ‘0.00’,
`dispatchid` = ‘0’,
`createtime` = ‘”.time().”‘,
`dispatchtype` =’0′,
`carrier` =’a:0:{}’,
`refundid` =’0′,
`iscomment` =’0′,
`creditadd` =’0′,
`deleted` =’0′,
`userdeleted` = ‘0’,
`finishtime` = ‘0’,
`paytime` ='”.time().”‘,
`sendtime` =’0′,
`fetchtime` =’0’,
`cash` = ‘0’,
`canceltime` =’NULL’,
`cancelpaytime` =’0′,
`refundtime` =’0′,
`isverify` = ‘0’,
`verified` =’0′,
`verifytime` =’0′,
`verifystoreid` =’0′,
`deductprice` =’0.00′,
`deductcredit` =’0′,
`deductcredit2` = ‘0.00’,
`deductenough` =’0.00′”;
$this->pdo->exec($sql);
}
/**
* 根据公众号ID和用户OPENID获取订单地址ID
* @param unknown $appid
* @return unknown
*/
private function getAdders($appid){
$sql = “SELECT id FROM `”.$this->pre.”ewei_shop_member_address` WHERE `uniacid`='”.(int)$appid.”‘ AND `openid` = ‘”.$this->openid.”‘”;
$data = $this->pdo->query($sql);
$data = $data->fetch(PDO::FETCH_ASSOC);
return $data[‘id’];
}
/**
* 根据公众号唯一ID和用户的唯一OPENID,提取出上一级
* @param unknown $appid
* @return unknown
*/
private function getagentid($appid){
$sql = “SELECT agentid FROM `”.$this->pre.”ewei_shop_member`
WHERE `uniacid` = ‘”.(int)$appid.”‘ AND `openid` = ‘”.$this->openid.”‘”;
$data = $this->pdo->query($sql);
$data = $data->fetch(PDO::FETCH_ASSOC);
return $data[‘agentid’];
}
}
关于作者