You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

808 lines
32 KiB
PHTML

5 years ago
<?php
namespace Sdk\Controller;
use Think\Controller\RestController;
use Org\XiguSDK\Xigu;
use Qiniu\json_decode;
5 years ago
class BaseController extends RestController{
5 years ago
// 不需要验证游戏签名的接口 A.B A==> 控制器 B==》方法
protected $noNeedGame = [
'Apple.apple_alipay_pay','Apple.apple_weixin_pay','User.get_alipay_zmxy_return',
'Apple.apple_platform_pay','Spend.notice','Apple.apple_union_pay','WapPay.wap_shortcut_pay',
'WapPay.shortcut_pay','WapPay.android_shortcut_pay','WapPay.wap_shortcut_pay','WapPay.wap_shortcut_pay',
5 years ago
'Apple.apple_weixin_pay','Ipa365','User.user_login','platform_coin_deduction','get_user_money',
5 years ago
'file_pay','pay','GameGiftPage','UserH', 'PayH5','init_sdk','sign_contract', 'Apple'
// 'test','Game.get_suspend',
5 years ago
5 years ago
];
// 不需要验证TOKEN的接口
protected $noNeedToken = [
'Changyan', 'Exchange', 'FengHuoApi', 'File', 'Game', 'GameGift', 'GameNotify', 'Info', 'ios-wap-Pay',
'Jpush', 'LoginNotify', 'Notice', 'OA', 'OTP', 'OTPServer', 'Pay', 'Payios', 'PointShop', 'Spend',
5 years ago
'User', 'WapPay', 'Wechat', 'XinJiApi', 'Notice', 'init_sdk', 'Apple.apple_alipay_pay','Apple.apple_weixin_pay','Apple'
// 'test',
5 years ago
];
5 years ago
protected $userId;
5 years ago
protected $userToken;
5 years ago
// 验证token得到的user H5页面使用
5 years ago
5 years ago
protected function _initialize(){
5 years ago
C(api('Config/lists'));
C(self::get_tool());
5 years ago
5 years ago
$c = CONTROLLER_NAME;
$a = ACTION_NAME;
5 years ago
$data = json_decode ( base64_decode ( file_get_contents ( "php://input" ) ), true );
5 years ago
if (!(in_array($c, $this->noNeedGame) || in_array($a, $this->noNeedGame) || in_array($c.".".$a, $this->noNeedGame))) {
// 解决在游戏中未退出的用户 user_token 不存在问题
$userToken = M('user', 'tab_')->where(['id' => $data['user_id']])->getField('user_token');
if (!$userToken) {
$str = $data['user_id'].NOW_TIME.sp_random_string(7);
5 years ago
$userToken = MD5($str);
M('user', 'tab_')->where(['id' => $data['user_id']])->save(['user_token' => $userToken]);
}
5 years ago
$this->userToken = $userToken;
5 years ago
/*
* if( !preg_match("/apple_alipay_pay/",GetCurUrl()) &&!preg_match("/apple_weixin_pay/",GetCurUrl()) &&!preg_match("/get_alipay_zmxy_return/",GetCurUrl()) &&!preg_match("/apple_platform_pay/",GetCurUrl()) &&!preg_match("/notice/",GetCurUrl()) &&!preg_match("/apple_union_pay/",GetCurUrl()) &&!preg_match("/test/",GetCurUrl()) &&!preg_match("/wap_shortcut_pay/",GetCurUrl()) &&!preg_match("/shortcut_pay/",GetCurUrl()) &&!preg_match("/android_shortcut_pay/",GetCurUrl()) &&!preg_match("/wap_shortcut_pay/",GetCurUrl()) &&!preg_match("/apple_weixin_pay/",GetCurUrl()) &&!preg_match("/Ipa365/",GetCurUrl()) &&!preg_match("/user_login/",GetCurUrl()) &&!preg_match("/platform_coin_deduction/",GetCurUrl()) ){
*/
// #判断数据是否为空
if (empty ( $data ) || empty ( $data ['game_id'] )) {
echo base64_encode ( json_encode ( array (
"status" => 10,
"return_msg" => "操作数据或游戏ID不能为空"
) ) );
exit ();
}
5 years ago
/* if (!$data['timestamp'] || !$data['nonce']) {
re_msg(10, "参数不足", $data);
} */
// pp($data);
5 years ago
$md5Sign = $data['md5_sign'];
unset($data['md5_sign']);
if (isset($data['openid'])) {
unset($data['openid']);
}
5 years ago
#获取游戏key
$game_data = M("game","tab_")->alias("g")->field("s.*")
->where(['g.apply_status'=>1,'g.id'=>$data['game_id']])
->join("left join tab_game_set s on s.game_id = g.id")
->find();
if(empty($game_data)){
$this->set_message(0,"fail","游戏不存在或未通过审核");
}
5 years ago
5 years ago
$md5_sign = $this->encrypt_md5($data,$game_data["access_key"]);//mengchuang DZQkkiz!@#9527
if($md5Sign !== $md5_sign){
$this->set_message(0,"fail","验签失败");
}
}
5 years ago
5 years ago
if (!(in_array($c, $this->noNeedToken) || in_array($a, $this->noNeedToken) || in_array($c.".".$a, $this->noNeedToken))) {
$userToken = I("request.user_token");
5 years ago
if (!$userToken) {
re_msg(11, "参数有误,请重新登入获取!");
5 years ago
}
5 years ago
5 years ago
$this->userId = M("user", "tab_")->where(['user_token' => $userToken])->getField("id");
5 years ago
$this->userToken = $userToken;
5 years ago
if (!$this->userId) {
5 years ago
re_msg(12, $userToken."Token失效");
5 years ago
}
5 years ago
5 years ago
}
5 years ago
5 years ago
}
/**
* 获取数据库中的配置列表
* @return array 配置数组
*/
public static function get_tool(){
$tools = M('tool', 'tab_')->where([])->field('type,name,config,status')->select();
$config = array();
foreach ($tools as $value) {
$config[$value['name']] = json_decode($value['config'], true);
$config[$value['name']]['status'] = $value['status'];
}
return $config;
}
5 years ago
/**
*设置接口提示信息
*@param int $status 提示状态
*@param string $return_code 提示代码
*@param string $return_msg 提示信息
*@return string base64加密后的json格式字符串
*@author 小纯洁
*/
public function set_message($status=0,$return_code="fail",$return_msg="操作失败"){
$msg = array(
"status" => $status,
"return_code" => $return_code,
"return_msg" => $return_msg
);
echo base64_encode(json_encode($msg));
exit();
}
/**
* 返回输出
* @param int $status 状态
* @param string $return_msg 错误信息
* @param array $data 返回数据
* author: xmy 280564871@qq.com
*/
public function new_set_message($status, $return_msg = 0, $data = [],$type=0)
{
if ($status == 1){
$status = 200;
}
$msg = array(
"code" => $status,
"msg" => $return_msg,
"data" => $data
);
if ($type == 1){
echo base64_encode(json_encode($msg,JSON_FORCE_OBJECT));
}elseif($type == 2){
echo base64_encode(json_encode($msg,true));
}elseif($type == 3) {
echo json_encode($msg);
5 years ago
}else{
echo base64_encode(json_encode($msg));
}
exit;
}
/**
*设置登录提示信息
*@param int $status 提示状态
*@param string $return_code 提示代码
*@param string $return_msg 提示信息
*@return string base64加密后的json格式字符串
*@author 小纯洁
*/
public function set_login_msg($uid,$token,$is_uc=0){
if($is_uc){
$res_msg = array(
"status" => 200,
"return_code" => "success",
"return_msg" => "登录成功",
"user_id" => $uid,
"token" => $token,
'is_uc'=>1,
);
}else{
$res_msg = array(
"status" => 200,
"return_code" => "success",
"return_msg" => "登录成功",
"user_id" => $uid,
"token" => $token,
);
}
//wite_text(json_encode($res_msg).'\n',dirname(__FILE__)."/res.txt");
echo base64_encode(json_encode($res_msg));
}
/**
*设置登录提示信息
*@param int $status 提示状态
*@param string $return_code 提示代码
*@param string $return_msg 提示信息
*@return string base64加密后的json格式字符串
*@author 小纯洁
*/
public function set_tr_login_msg($uid,$account,$token){
$res_msg = array(
"status" => 200,
"return_code" => "success",
"return_msg" => "登录成功",
"user_id" => $uid,
"account" =>$account,
"token" => $token,
);
echo base64_encode(json_encode($res_msg));
}
/**
*验证签名
*/
public function validation_sign($encrypt="",$md5_sign=""){
$signString = $this->arrSort($encrypt);
$md5Str = $this->encrypt_md5($signString,$key="");
if($md5Str === $md5_sign){
return true;
}
else{
return false;
}
}
/**
*对数据进行排序
*/
private function arrSort($para){
ksort($para);
reset($para);
return $para;
}
/**
*MD5验签加密
*/
public function encrypt_md5($param="",$key=""){
#对数组进行排序拼接
if(is_array($param)){
$md5Str = implode($this->arrSort($param));
}
else{
$md5Str = $param;
}
$md5 = md5($md5Str . $key);
return '' === $param ? 'false' : $md5;
}
public function sms_send($phone) {
$result = R('Common/Sms/send_sms_code',array($phone,10,false));
if($result['code']==200) {
$this->new_set_message(200,"验证码发送成功");
} else {
$this->new_set_message($result['code'], $result['msg']);
}
}
/**
* @函数或方法说明
* @发送拉黑短信提示
* @param $phone
* @param $user_account
*
* @author: 郭家屯
* @since: 2019/5/6 11:53
*/
public function send_block($phone,$user_account){
$result = R('Common/Sms/send_sms_block',array($phone,$user_account));
}
/**
*短信验证
*/
public function sms_verify($phone="" ,$code="",$type=2){
$result = R('Common/Sms/verify_sms_code',array($phone,$code,false));
if($result['code']==200) {
if($type==1){
$this->set_message(200,"success","正确");
}else{
return true;
}
} else {
switch ($result['code']) {
case 1021:{
$this->set_message(1010,"fail","验证码已失效,请重新获取");
};break;
case 1022:{
$this->set_message(1022,"fail","验证码不正确,请重新输入");
};break;
default:
$this->set_message($result['code'],"fail",$result['msg']);
}
}
}
/** *短信验证 */
public function sms_verify2($phone="" ,$code="",$type=2){
$result = R('Common/Sms/verify_sms_code',array($phone,$code,false));
if($result['code']==200) {
if($type==1) {
$this->new_set_message(200,"正确");
} else {
return true;
}
} else {
switch ($result['code']) {
case 1021:{
$this->new_set_message(1010,"验证码已失效,请重新获取");
5 years ago
};break;
case 1022:{
$this->new_set_message(1022,"验证码不正确,请重新输入");
5 years ago
};break;
default:
$this->new_set_message($result['code'],$result['msg']);
5 years ago
}
}
}
/**
* @函数或方法说明
* @检查平台币金额
* @param $user_id
*
* @author: 郭家屯
* @since: 2019/5/6 11:21
*/
public function check_deposit_money($user_entity=[]){
//充值平台币金额
$brush_map['user_id'] = $user_entity['id'];
$brush_map['pay_status'] = 1;
$brush_map['create_time'] = ['egt',$user_entity['check_time']];
$deposit_order = M('deposit','tab_')->where($brush_map)->field('id,order_number,user_id,pay_amount,check_sign,create_time')->select();
$deposit_amount = 0;
foreach ($deposit_order as $key=>$v){
$sign = get_check_sign($v['user_id'],$v['order_number'],$v['pay_amount'],$v['create_time']);
if($sign != $v['check_sign']){
return false;
}
$deposit_amount += $v['pay_amount'];
}
//发放平台币金额
$batch_map['user_id'] = $user_entity['id'];
$batch_map['status'] = 1;
$batch_map['create_time'] = ['egt',$user_entity['check_time']];
$batch_amount = M('provide_user','tab_')->where($batch_map)->sum('amount');
//积分兑换平台币
$point_map['user_id'] = $user_entity['id'];
$point_map['good_type'] = 3;
$point_map['create_time'] = ['egt',$user_entity['check_time']];
$point_ptb = M('point_shop_record','tab_')->where($point_map)->sum('number');
$point_ptb = $point_ptb ? $point_ptb : 0;
//分享获取平台币
$share_map['invite_id'] = $user_entity['id'];
$share_map['create_time'] = ['egt',$user_entity['check_time']];
$share_amount = M('share_record','tab_')->where($share_map)->sum('award_coin');
//消费平台币金额
$spend_map['user_id'] = $user_entity['id'];
$spend_map['pay_status'] = 1;
$spend_map['pay_way'] = 0;
$spend_map['pay_time'] = ['egt',$user_entity['check_time']];
$spend_amount = M('spend','tab_')->where($spend_map)->sum('pay_amount');
$check_money = floatval($user_entity['balance'])-floatval($share_amount)-floatval($point_ptb)-floatval($deposit_amount)-floatval($batch_amount)+floatval($spend_amount)-floatval($user_entity['check_money']);
return round((float)$check_money,2);
}
/**
* @函数或方法说明
* @检查绑币余额
* @param array $user_entity
*
* @author: 郭家屯
* @since: 2019/5/6 11:52
*/
public function check_bind_money($user_entity=[]){
//充值绑币金额
$brush_map['user_id'] = $user_entity['id'];
$brush_map['pay_status'] = 1;
$brush_map['create_time'] = ['egt',$user_entity['check_time']];
$bind_recharge_order = M('bind_recharge','tab_')->where($brush_map)->field('id,amount,order_number,user_id,real_amount,check_sign,create_time')->select();
$bind_recharge_amount = 0;
foreach ($bind_recharge_order as $key=>$v){
$sign = get_check_sign($v['user_id'],$v['order_number'],$v['amount'],$v['create_time']);
if($sign != $v['check_sign']){
return false;
}
$bind_recharge_amount += $v['real_amount'];
}
//发放绑币金额
$batch_map['user_id'] = $user_entity['id'];
$batch_map['status'] = 1;
$batch_map['create_time'] = ['egt',$user_entity['check_time']];
$batch_amount = M('provide','tab_')->where($batch_map)->sum('amount');
//消费返利
$rebate_map['user_id'] = $user_entity['id'];
$rebate_map['create_time'] = ['egt',$user_entity['check_time']];
$rebate_money = M("rebate_list","tab_")->where($rebate_map)->sum('ratio_amount');
//会长代充
$agent_map['user_id'] = $user_entity['id'];
$agent_map['pay_status'] = 1;
$agent_map['create_time'] = ['egt',$user_entity['check_time']];
$agent_amount = M('agent','tab_')->where($agent_map)->sum('amount');
//消费平台币金额
$spend_map['user_id'] = $user_entity['id'];
$spend_map['pay_status'] = 1;
$spend_map['pay_way'] = -1;
$spend_map['pay_time'] = ['egt',$user_entity['check_time']];
$spend_amount = M('spend','tab_')->where($spend_map)->sum('pay_amount');
//检查绑币金额
$check_map['user_id'] = $user_entity['id'];
$check_money = M('user_play','tab_')->where($check_map)->sum('check_money');
$sum_money = M('user_play','tab_')->where($check_map)->sum('bind_balance');
$check_money = floatval($sum_money)+floatval($spend_amount)-floatval($rebate_money)-floatval($bind_recharge_amount)-floatval($batch_amount)-floatval($agent_amount)-floatval($check_money);
return round((float)$check_money,2);
}
/**
*消费记录表 参数
*/
private function spend_param($param=array()){
$user_entity = get_user_entity($param['user_id']);
$data_spned['user_id'] = $param["user_id"];
$data_spned['user_account'] = $user_entity["account"];
$data_spned['user_nickname'] = $user_entity["nickname"];
$data_spned['game_id'] = $param["game_id"];
$data_spned['game_appid'] = $param["game_appid"];
$data_spned['game_name'] = get_game_name($param["game_id"]);
$data_spned['selle_ratio'] = get_game_selle_ratio($param["game_id"]);
$data_spned['server_id'] = $param["server_id"];
$data_spned['server_name'] = $param["server_name"];
$data_spned['game_player_id'] = $param["game_player_id"];
$data_spned['game_player_name'] = $param["game_player_name"];
$data_spned['promote_id'] = $user_entity["promote_id"];
$data_spned['promote_account'] = $user_entity["promote_account"];
$data_spned['order_number'] = $param["order_number"];
$data_spned['pay_order_number'] = $param["pay_order_number"];
$data_spned['props_name'] = $param["title"];
$data_spned['cost'] = $param["price"];//原价
$data_spned['deduction_amount'] = $param["deduction_amount"];// 抵扣价格
$data_spned['discount_amount'] = $param["discount_amount"];// 折扣价格
$data_spned['pay_time'] = NOW_TIME;
$data_spned['pay_status'] = $param["pay_status"];
$data_spned['pay_game_status'] = 0;
$data_spned['extend'] = $param['extend'];
$data_spned['pay_way'] = $param["pay_way"];
if($data_spned['pay_way'] != 7){
$discount = $this->get_discount($param['game_id'],$user_entity['promote_id'],$param['user_id']);
$data_spned['pay_amount'] = $param["price"] * $discount['discount']/10;//实付金额
$data_spned['discount_type'] = $discount['discount_type'];
}else{//苹果支付不计入折扣
$data_spned['pay_amount'] = $param["price"];
$data_spned['discount_type'] = 0;
}
if (isset($param['actual_amount']) && $param['actual_amount'])
$data_spned['pay_amount'] = $param['actual_amount']; // 实际支付价格
$data_spned['spend_ip'] = $param["spend_ip"];
$data_spned['sdk_version'] = $param["sdk_version"];
if($param['small_user_id'] != $param['user_id']) {
$data_spned['small_id'] = $param["small_user_id"];
$data_spned['small_account'] = get_user_account_by_id($param['small_user_id']);
}
5 years ago
if (isset($param["pay_url"])) {
$data_spned['pay_url'] = $param["pay_url"];
}
5 years ago
return $data_spned;
}
/**
*平台币充值记录表 参数
*/
private function deposit_param($param=array()){
$user_entity = get_user_entity($param['user_id']);
$data_deposit['order_number'] = $param["order_number"];
$data_deposit['pay_order_number'] = $param["pay_order_number"];
$data_deposit['user_id'] = $param["user_id"];
$data_deposit['user_account'] = $user_entity["account"];
$data_deposit['user_nickname'] = $user_entity["nickname"];
$data_deposit['promote_id'] = $user_entity["promote_id"];
$data_deposit['promote_account'] = $user_entity["promote_account"];
$data_deposit['pay_amount'] = $param["price"];
$data_deposit['cost'] = $param["price"];
$data_deposit['reality_amount'] = $param["price"];
$data_deposit['pay_status'] = $param["pay_status"];
$data_deposit['pay_source'] = 2;
$data_deposit['pay_way'] = $param["pay_way"];
$data_deposit['pay_ip'] = $param["spend_ip"];
$data_deposit['sdk_version'] = $param["sdk_version"];
5 years ago
if (isset($param["pay_url"])) {
$data_deposit['pay_url'] = $param["pay_url"];
}
5 years ago
$data_deposit['create_time'] = NOW_TIME;
return $data_deposit;
}
/**
*绑定平台币消费
*/
private function bind_spend_param($param = array()){
$user_entity = get_user_entity($param['user_id']);
$data_bind_spned['user_id'] = $param["user_id"];
$data_bind_spned['user_account'] = $user_entity["account"];
$data_bind_spned['user_nickname'] = $user_entity["nickname"];
$data_bind_spned['game_id'] = $param["game_id"];
$data_bind_spned['game_appid'] = $param["game_appid"];
$data_bind_spned['game_name'] = get_game_name($param["game_id"]);
$data_bind_spned['server_id'] = 0;
$data_bind_spned['server_name'] = $param["server_name"];
$data_bind_spned['game_player_name'] = $param["game_player_name"];
$data_bind_spned['promote_id'] = $user_entity["promote_id"];
$data_bind_spned['promote_account'] = $user_entity["promote_account"];
$data_bind_spned['order_number'] = $param["order_number"];
$data_bind_spned['pay_order_number'] = $param["pay_order_number"];
$data_bind_spned['props_name'] = $param["title"];
$data_bind_spned['cost'] = $param["price"];//原价
$data_bind_spned['pay_amount'] = $param["price"];
$data_bind_spned['pay_time'] = NOW_TIME;
$data_bind_spned['pay_status'] = $param["pay_status"];
$data_bind_spned['pay_game_status'] = 0;
$data_bind_spned['pay_way'] = 1;
$data_bind_spned['extend'] = $param['extend'];
$data_bind_spned['spend_ip'] = $param["spend_ip"];
$data_bind_spned['sdk_version'] = $param["sdk_version"];
return $data_bind_spned;
}
//用户登录记录
public function user_login_record($data,$type,$game_id,$game_name,$sdk_version){
$data=array(
'user_id'=>$data['id'],
'user_account'=>$data['account'],
'user_nickname'=>$data['nickname'],
'game_id'=>$game_id,
'game_name'=>$game_name,
'server_id'=>null,
'type'=>$type,
'server_name'=>null,
'login_time'=>NOW_TIME,
'login_ip'=>get_client_ip(),
'sdk_version'=>$sdk_version,
);
$uid =M('user_login_record','tab_')->add($data);
return $uid ? $uid : 0; //0-未知错误大于0登录记录成功
}
//判断game_id是否有值
public function updateLogin_($uid,$account,$user_fgame_id,$game_id,$game_name){
$model = M('User','tab_');
$data["id"] = $uid;
$data["login_time"] = NOW_TIME;
$data["login_ip"] = get_client_ip();
if($user_fgame_id){
$model->save($data);
}else{
$data['fgame_id']=$game_id;
$data['fgame_name']=$game_name;
$model->save($data);
}
}
/**
*消费表添加数据
*/
5 years ago
public function add_spend($data,$type=0,$api_ver=2){
5 years ago
$spend = M("spend","tab_");
$spend_data = $this->spend_param($data);
$ordercheck = $spend->where(array('pay_order_number'=>$spend_data["pay_order_number"]))->find();
if($ordercheck)
{
if($type==1){
5 years ago
if ($api_ver == 0) {
redirect(U('Spend/notice_v1',array('user_id'=>$ordercheck['user_id'],'game_id'=>$ordercheck['game_id'],'msg'=>'订单已经存在,请刷新充值页面重新下单!')));exit;
} else {
redirect(U('Spend/notice',array('user_id'=>$ordercheck['user_id'],'game_id'=>$ordercheck['game_id'],'msg'=>'订单已经存在,请刷新充值页面重新下单!')));exit;
}
5 years ago
}else{
$this->set_message(0,'fail',"订单已经存在,请刷新充值页面重新下单!");
}
}
// if(!is_check_apply_promote($spend_data['game_id'],$spend_data['promote_id'])){
// $spend_data['promote_id']=0;
// $spend_data['promote_account']="自然注册";
// }
$result = $spend->add($spend_data);
return $result;
}
/*
*平台币充值记录
*/
5 years ago
public function add_deposit($data, $type=0,$api_ver=2){
5 years ago
$deposit = M("deposit","tab_");
$deposit_data = $this->deposit_param($data);
$ordercheck = $deposit->where(array('pay_order_number'=>$deposit_data["pay_order_number"]))->find();
if($ordercheck) {
if ($type) {
5 years ago
if ($api_ver == 0) {
redirect(U('Spend/notice_v1',array('user_id'=>$ordercheck['user_id'],'game_id'=>$ordercheck['game_id'],'msg'=>'订单已经存在,请刷新充值页面重新下单!')));
exit;
} else {
redirect(U('Spend/notice',array('user_id'=>$ordercheck['user_id'],'game_id'=>$ordercheck['game_id'],'msg'=>'订单已经存在,请刷新充值页面重新下单!')));
exit;
}
5 years ago
} else {
$this->set_message(0,'fail',"订单已经存在,请刷新充值页面重新下单!");
}
}
// if(!is_check_apply_promote($deposit_data['game_id'],$deposit_data['promote_id'])){
// $deposit_data['promote_id']=0;
// $deposit_data['promote_account']="自然注册";
// }
$result = $deposit->add($deposit_data);
return $result;
}
/*
*绑定平台币消费记录
*/
public function add_bind_spned($data){
$bind_spned = M("BindSpend","tab_");
$data_bind_spned = $this->bind_spend_param($data);
$ordercheck = $bind_spned->where(array('pay_order_number'=>$data_bind_spned["pay_order_number"]))->find();
if($ordercheck)$this->set_message(0,'fail',"订单已经存在,请刷新充值页面重新下单!");
// if(!is_check_apply_promote($data_bind_spned['game_id'],$data_bind_spned['promote_id'])){
// $data_bind_spned['promote_id']=0;
// $data_bind_spned['promote_account']="自然注册";
// }
$result = $bind_spned->add($data_bind_spned);
return $result;
}
/**
*设置数据里游戏的图片
*/
public function set_game_icon($game_id=0){
$game = M("Game","tab_")->field('icon')->find($game_id);
$icon_url ="http://".$_SERVER['HTTP_HOST'].get_cover($game['icon'],"path");
return $icon_url;
}
/**
* 获取用户折扣
* @param $game_id 游戏ID
* @param $promote_id 渠道ID
* @param $user_id 用户ID
* @return mixed
*/
protected function get_discount($game_id,$promote_id,$user_id){
//获取折扣
$map['game_id'] = $game_id;
$map['promote_id'] =-1;
$map['status'] = 2;
$discount = M('Promote_welfare','tab_')->where($map)->find();
if(null==$discount){
$map['game_id'] = $game_id;
$map['promote_id'] = $promote_id == 0 ? 0 : -2;
$map['status'] = 2;
$discount = M('Promote_welfare','tab_')->where($map)->find();
}
$discount = discount_data($discount);
if(empty($discount)){
$res['discount'] = 10;
$res['discount_type'] = 0;//无折扣
return $res;
}
//判断用户是否为首冲
$where['game_id'] = $game_id;
$where['user_id'] = $user_id;
$where['pay_status'] = 1;
$data = M('bind_spend','tab_')->where($where)->find();
if(!empty($data) || !empty(M('spend','tab_')->where($where)->find())){
$res['discount'] = $discount['continue_discount'];//续冲
$res['discount_type'] = 2;
}else{
$res['discount'] = $discount['first_discount'];//首冲
$res['discount_type'] = 1;
}
return $res;
}
/**
*游戏返利
*$type 类型 1 非绑定平台币 2绑定平台币
*/
public function set_ratio($data,$type = 1){
$map['pay_order_number']=$data;
$map['pay_way'] = ($type==2) ? -1 : 0; // 判断支付类型
$spend=M("Spend","tab_")->where($map)->find();
$reb_map['game_id']=$spend['game_id'];
$time = time();
$reb_map['starttime'] = ['lt',$time];
$reb_map_str = "endtime > {$time} or endtime = 0";
switch ($spend['promote_id']) {
case 0:
$reb_map['promote_id'] = array('in','0,-1');
break;
default:
$reb_map['promote_id'] = array('in','1,-1');
break;
}
//如果是绑币则判断是否开启绑币返利
if($type == 2){$reb_map['bind_status'] = 1;}
$rebate=M("Rebate","tab_")->where($reb_map)->where($reb_map_str)->find();//
if (!empty($rebate)) {
if($rebate['money']>0 && $rebate['status']==1){
if($spend['pay_amount']>=$rebate['money']){
$this->compute($spend,$rebate);
}else{
return false;
}
}else{
$this->compute($spend,$rebate);
}
}else{
return false;
}
}
//计算返利
public function compute($spend,$rebate){
$user_map['user_id']=$spend['user_id'];
$user_map['game_id']=$spend['game_id'];
$bind_balance=$spend['pay_amount']*($rebate['ratio']/100);
$spend['ratio']=$rebate['ratio'];
$spend['ratio_amount']=$bind_balance;
M("rebate_list","tab_")->add($this->add_rebate_list($spend));
$re=M("UserPlay","tab_")->where($user_map)->setInc("bind_balance",$bind_balance);
return $re;
}
/**
*返利记录
*/
protected function add_rebate_list($data){
$add['pay_order_number']=$data['pay_order_number'];
$add['game_id']=$data['game_id'];
$add['game_name']=$data['game_name'];
$add['user_id']=$data['user_id'];
$add['user_name']=$data['user_account'];
$add['pay_amount']=$data['pay_amount'];
$add['ratio']=$data['ratio'];
$add['ratio_amount']=$data['ratio_amount'];
$add['promote_id']=$data['promote_id'];
$add['promote_name']=$data['promote_account'];
$add['create_time']=time();
return $add;
}
/**
* 优先扣除绑币 和平台 处理
* $request $discountAmount 折扣价格
*/
public function other_price(&$request, $discountAmount=0) {
// 优先扣除绑定币平台币
if ($request['code'] == '0') return $request; // 平台币充值 不做判断
$deductionAmount = 0;
$user_id = $request['user_id'];
$game_id = $request['game_id'];
$balance = M ('user', 'tab_')->where (array(
'id' => $user_id
))->getField('balance');
$bind_balance = M('user_play', 'tab_')->where(array(
'user_id' => $user_id,
'game_id' => $game_id
))->getField('bind_balance');
// 够抵扣的情况 不走这个接口
$deductionAmount = $bind_balance + $balance;
if ($deductionAmount > $request['price']) {
if ($request['sdk_version'] == 1)
$this->set_message(1089,"fail",$deductionAmount."平台币足够,请关闭支付页面重新支付".$pay_amount);
else {
redirect(U('Spend/notice',array('user_id'=>$user_id,'game_id'=>$game_id,'msg'=>"平台币足够,请关闭支付页面重新支付")));exit;
}
}
// 实际支付金额 = 支付总金额 - 折扣抵扣价格 - 绑币和平台币抵扣金额
$request['actual_amount'] = round($request['price'] - $discountAmount - $deductionAmount, 2).'';
$request['discount_amount'] = round($discountAmount, 2).'';
$request['deduction_amount'] = round($deductionAmount, 2).'';
$request['price'] = round($request['actual_amount'], 2).'';
return $request;
//$this->set_message(1089,"fail",$request['price']."新支付".$pay_amount);
}
}