• 注册

微擎人人商城消费场景中赠送上级分销商游戏机会

标题说的可能有点拗口,今天分享的内容是在微擎人人商城的插件游戏系统的消费场景中,给下单购买者的上级分销商一次游戏机会,比如赠送一次轮盘抽奖、刮刮卡抽奖等。

先看最终效果图

需求及分析

人人商城的游戏系统有三种类型:大转盘、刮刮卡、九宫格,应用场景也有三种:消费场景、签到场景、活动场景。

今天主要说的是消费场景,默认情况下,假定 A 购买消费满指定金额后,将会获得一次游戏机会(三种游戏其一)。我们今天有个需求是:当A获得一次游戏机会时,同时赠送给A的上级分销商一次机会。

赠送的判断条件有几个:

1、是否开启上级分销商赠送;(这是一个新增的开关,将在下文讲解)

2、商城是否开启了分销系统及内购是否计入分销;

3、消费的商品是否开启了分销功能;

4、上级是否为正常状态的分销商(已审核的分销商)。

这4个条件可按实际需要开发。

功能开发

功能开发主要是针对需求的开发:赠送次数、发送通知。

1、前端新增一个开关 pay_parentagent

用于判断是否开启上级分销商赠送,为1时表示赠送,为0时表示不赠送(也是默认方式)。

打开模板设置文件

/addons/ewei_shopv2/plugin/lottery/template/web_v3/post/basic.html

1.1 新增开关的HTML

搜索 {if $item['task_type']==1} ,在 {/if} 前添加如下代码段

<div class="row">
	<div class="col-sm-12 col-xs-12" style="margin-top:10px;">
		<label class="radio-inline">
			<input type="radio" name="pay_parentagent" value="0" {if $item['task_data']['pay_parentagent']==0}checked{/if} /> 禁用
		</label>
		<label class="radio-inline">
			<input type="radio" name="pay_parentagent" value="1" {if $item['task_data']['pay_parentagent']==1}checked{/if} /> 启用
		</label>
		<span class="help-block">是否开启赠送直属上级分销商抽奖次数</span>
	</div>
</div>

1.2 新增开关的Javascript

在文件下方的javascript代码段中搜索 if(task_type==1){ 并在其结尾的分号“;”前添加如下代码段,注意引号和格式

+'<div class="row"><div class="col-sm-12 col-xs-12" style="margin-top:10px;"><label class="radio-inline"><input type="radio" name="pay_parentagent" value="0" /> 禁用</label><label class="radio-inline"><input type="radio" name="pay_parentagent" value="1" /> 启用</label><span class="help-block">是否开启赠送直属上级分销商抽奖次数</span></div></div>'

1.3 保存以上设置数据

打开文件

/addons/ewei_shopv2/plugin/lottery/core/web/index.php

搜索 if( $_GPC["task_type"] == 1 ) 并在 $data["task_data"] 内部添加 pay_parentagent 数据,修改后如下

$data["task_data"] = array( "pay_money" => floatval($pay_money), "pay_num" => intval($pay_num), "pay_type" => intval($pay_type), "pay_parentagent" => $_GPC["pay_parentagent"] );

2、后台新增处理函数 getLotteryForParentAgent()

打开如下文件

/addons/ewei_shopv2/plugin/lottery/core/model.php

在最后一个 } 大括号前,新增处理函数

	/*
	 * Y:新增 下单者上级分销商获得一次抽奖机会 写入次数并推送消息
	 * 参数 $openid下单者,$type活动场景(1消费,2签到,3任务,4其他),$data, $orderID订单ID
	 */
	public function getLotteryForParentAgent($openid, $type, $data, $orderID=0){
		global $_W;
		
		$set = p('commission')->getSet();
		
		//是否开启赠送直属上级分销商游戏次数
		$item = pdo_fetch("SELECT * FROM " . tablename("ewei_shop_lottery") . " WHERE task_type =:task_type and uniacid=:uniacid and is_delete=0 limit 1", array( ":task_type" => $type, ":uniacid" => $_W["uniacid"] ));
		$type = intval($item["lottery_type"]);
		$reward = unserialize($item["task_data"]);
		if( $reward['pay_parentagent'] != 1 ){
			return;
		}
		
		//系统分销是否开启   内购 $set['selfbuy']
		if( empty($set['level']) ){
			return;
		}
		
		/*
		//订单商品不参与分销,如果一个订单包含多个商品,且商品中有参与和不参与分销的情况,不知道具体需求,因此这里先不判断
		if( !empty($orderID) && $orderID!=0 ){
			$goods_info = pdo_fetchall('SELECT goodsid,nocommission FROM ' . tablename('ewei_shop_order_goods') . ' WHERE orderid=:orderid limit 1', array(':orderid' => $orderID));
			if ( empty($goods_info) || nocommission==1 ) {
				return;
			}
		}
		*/
		
		//Y:读取购买者的信息
		$member = m('member')->getMember($openid);
		if (empty($member)) {
			return;
		}
		
		//Y:判断购买者的直属上级是否为正常状态的分销商
		$parent = m('member')->getMember($member['agentid']);
		if( empty($parent) || ($parent['isagent'] != 1) || ($parent['status'] != 1) ){
			return;
		}
		
		//Y: 调用 getLottery() 为上级分销商写入游戏次数(如抽奖)
		$res = p('lottery')->getLottery($parent['openid'], $type, $data);
		//Y: 推送消息
		if( $res ){
			p('lottery')->getLotteryList($parent['openid'], array('lottery_id' => $res));
		}
	}

至此,需求的功能是实现了,接下来我们还要在订单完成的部分添加调用上述功能的代码。

功能调用

我们先来说说上述代码调用方法,有两种写法,选择哪种要依据具体调用位置。

//YangJunwei:消费成功后,赠送给上级分销商游戏次数(比如转盘抽奖)
p('lottery')->getLotteryForParentAgent($item['openid'], 1, array('money' => $item['price'], 'paytype' => 2), $item['id']);

//YangJunwei:消费成功后,赠送给上级分销商游戏次数(比如转盘抽奖)
p('lottery')->getLotteryForParentAgent($_W['openid'], 1, array('money' => $order['price'], 'paytype' => 2), $order['id']);

注:代码添加位置,请直接搜索 “getLottery” 函数,对应位置添加上述调用代码即可,比如以下示例:

if (p('lottery')){
	//Y:赠送给购买者
	$res = p('lottery')->getLottery($item['openid'], 1, array('money' => $item['price'], 'paytype' => 2));
	if ($res) {
		p('lottery')->getLotteryList($item['openid'], array('lottery_id' => $res));
	}
	
	//YangJunwei:消费成功后,赠送给上级分销商游戏次数(比如转盘抽奖)
	p('lottery')->getLotteryForParentAgent($item['openid'], 1, array('money' => $item['price'], 'paytype' => 2), $item['id']);
}

接下来要说说调用功能的地方的几个类型,下边老杨一一分享,具体调用不再赘述。

涉及文件列表,可能还有其他情况需要调用,自行按上述方法添加即可。

//系统后台确认完成
/addons/ewei_shopv2/core/web/order/op.php

//手机商城确认完成
/addons/ewei_shopv2/core/mobile/order/op.php

//手机商家管理中心确认完成
/addons/ewei_shopv2/plugin/mmanage/core/mobile/order/op.php
/addons/ewei_shopv2/plugin/app/core/mobile/mmanage/order.php

//付款后 afterPayResult()
/addons/ewei_shopv2/core/model/order.php

涉及相关函数

finish()

大概如此吧,记录太细了,写的头晕!各位拜拜,我要接单了!

发表评论 

我还是想用邮箱注册

登录

忘记密码 ?

用第三方帐号快捷登录

已有账户?前往登录吧~

注册