Merge pull request 'feature/discount' (#21) from feature/discount into master

Reviewed-on: http://8.136.139.249:3000/wmtx/sdk/pulls/21
master
廖金灵 4 years ago
commit 0d0024609e

@ -74,7 +74,59 @@ class BaseController extends Controller
$valueDetailLogModel = new \Sdk\Model\ValueDetailLogModel();
if($d['pay_status'] == 0){
// 处理绑币平台币优先处理
// 折扣优先处理
if ($d['discount_amount'] > 0) { // 折扣金额大于0
$balance = M('user', 'tab_')->where(array(
'id' => $d['user_id'],
))->getField('balance');
$di = discountInfo($d['game_id']);
if (!$di || $di['status'] != 1 || $di['start_time'] > time() || $di['end_time'] < time()) {
$this->record_logs($d['discount_amount'] . "折扣失效,退还平台币" . serialize($di));
$createTime = time();
$depositId = M('deposit', "tab_")->add([
'order_number' => $data['trade_no'],
'pay_order_number' => 'PF_' . $data['out_trade_no'],
'user_id' => $d['user_id'],
'user_account' => $d['user_account'],
'user_nickname' => $d['user_nickname'],
'promote_id' => $d['promote_id'],
'promote_account' => $d['promote_account'],
'pay_amount' => $d['pay_amount'],
'pay_status' => 1,
'pay_way' => $d['pay_way'],
'pay_source' => 2, // 0官网 1推广后台 2移动端
'pay_ip' => $d['spend_ip'],
'create_time' => $createTime,
'payed_time' => time(),
'sdk_version' => $d['sdk_version'],
'check_sign' => get_check_sign($d['user_id'], $data['trade_no'], $d['pay_amount'], $createTime),
]);
$valueDetailLogModel->addLog($d['user_id'], 'PF_' . $data['out_trade_no'],
$balance, $d['pay_amount'], $balance + $d['pay_amount'], $valueDetailLogModel::BALANCE, "游戏支付时候折扣失效,增加到平台币", 2);
$user = M("user", "tab_");
$user->where("id=" . $d['user_id'])->setInc("balance", $d['pay_amount']);
$user->where("id=" . $d['user_id'])->setInc("cumulative", $d['pay_amount']);
//APP邀请好友消费奖励平台币
$this->inviteFriendAward($d['user_id'], $d['pay_amount'], 'PF_' . $data['out_trade_no']);
//充值奖励积分
$this->rechargeAwardPoint($d['user_id'], $d['pay_amount']);
// 当天累计充值
$this->payTodayTotal($d['pay_amount'], $d['pay_way']);
$data_save['pay_status'] = 0;
$data_save['order_number'] = $data['trade_no'];
$data_save['payed_time'] = time();
$data_save['pay_time'] = $data_save['payed_time'];
$map_s['pay_order_number'] = $data['out_trade_no'];
$r = $spend->where($map_s)->save($data_save);
return false;
}
}
// 处理绑币平台币
if ($d['deduction_amount'] > 0) {
$bind_balance = M('user_play', 'tab_')->where(array(
@ -120,7 +172,7 @@ class BaseController extends Controller
// 当天累计充值
$this->payTodayTotal($d['pay_amount'], $d['pay_way']);
$data_save['pay_status'] = 1;
$data_save['pay_status'] = 0;
$data_save['order_number'] = $data['trade_no'];
$data_save['payed_time'] = time();
$data_save['pay_time'] = $data_save['payed_time'];
@ -135,6 +187,7 @@ class BaseController extends Controller
$out_trade_no = "PF_" . date('Ymd') . date('His') . sp_random_string(4);
$request = $d;
$request['discount_amount'] = 0;
$request['pay_order_number'] = $out_trade_no;
$request['price'] = $bind_balance;
$request['deduction_amount'] = 0;
@ -186,9 +239,8 @@ class BaseController extends Controller
}
}
}
$data_save['pay_status'] = 1;
$data_save['order_number'] = $data['trade_no'];
$data_save['payed_time'] = time();
@ -196,6 +248,7 @@ class BaseController extends Controller
$map_s['pay_order_number'] = $data['out_trade_no'];
$r = $spend->where($map_s)->save($data_save);
// spend 记录传给通知cp 不直接读
$pay_data = $d;
$pay_data['pay_status'] = $data_save['pay_status'];
$pay_data['order_number'] = $data_save['order_number'];

@ -3216,3 +3216,23 @@ function post_async($url="'http://47.111.118.107:9501/game-event/recharge'", $da
return true;
}
function discountInfo($gameId, $time=0)
{
if (!$time) $time = time();
$baseGame = M('base_game', 'tab_')->where([
'android_game_id|ios_game_id' => $gameId
])->find();
if (!$baseGame) {
return false;
}
$discount = M('game_discount','tab_')->where([
'base_game_id' => $baseGame['id'],
'start_time' => ['elt', $time],
'end_time' => ['gt', $time],
'status' => 1,
])->find();
return $discount;
}

@ -404,4 +404,55 @@ function juheSmsCode($phone,$tpl_id,$key,$code) {
$return = json_decode(curl_post(C("JUHE_SMSURL"),$post),true);
return $return;
}
/**
* 获取用户折扣
* @param $game_id 游戏ID
* @param $promote_id 渠道ID
* @param $user_id 用户ID
* @return mixed
*/
function get_discount($gameId, $userId)
{
//获取折扣
$res = [
'discount' => 10,
'discount_type' => 0,
];
$baseGame = M('base_game', 'tab_')->where([
'android_game_id|ios_game_id' => $gameId
])->find();
if (!$baseGame) {
return $res;
}
$time = time();
$discount = M('game_discount','tab_')->where([
'base_game_id' => $baseGame['id'],
'start_time' => ['elt', $time],
'end_time' => ['gt', $time],
'status' => 1,
])->find();
if (!$discount) {
return $res;
}
$exists = M('spend','tab_')->where([
'user_id' => $userId,
'pay_status' => 1
])->where("(game_id={$baseGame['android_game_id']} or game_id={$baseGame['ios_game_id']})")->find();
if ($exists) {
$res = [
'discount' => $discount['second_rate'],
'discount_type' => 1,
];
} else {
$res = [
'discount' => $discount['first_rate'],
'discount_type' => 0,
];
}
return $res;
}

@ -551,7 +551,7 @@ class BaseController extends RestController
$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['cost'] = $param["cost"];//原价
$data_spned['deduction_amount'] = $param["deduction_amount"];// 抵扣价格
$data_spned['discount_amount'] = $param["discount_amount"];// 折扣价格
$data_spned['spend_time'] = NOW_TIME;
@ -569,7 +569,7 @@ class BaseController extends RestController
$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['pay_amount'] = round($param["price"] * $discount['discount']/10, 2);//实付金额
$data_spned['discount_type'] = $discount['discount_type'];
}else{//苹果支付不计入折扣
$data_spned['pay_amount'] = $param["price"];
@ -707,9 +707,9 @@ class BaseController extends RestController
public function add_spend($data,$type=0,$api_ver=2){
if ($data["price"] > 999999) {
if ($api_ver == 0) {
redirect(U('Spend/notice_v1',array('user_id'=>$ordercheck['user_id'],'game_id'=>$ordercheck['game_id'],'msg'=>'充值金额有误!')));exit;
redirect(U('Spend/notice_v1',array('user_id'=>$data['user_id'],'game_id'=>$data['game_id'],'msg'=>'充值金额有误!')));exit;
} else {
redirect(U('Spend/notice',array('user_id'=>$ordercheck['user_id'],'game_id'=>$ordercheck['game_id'],'msg'=>'充值金额有误!')));exit;
redirect(U('Spend/notice',array('user_id'=>$data['user_id'],'game_id'=>$data['game_id'],'msg'=>'充值金额有误!')));exit;
}
}
$spend = M("spend","tab_");
@ -804,7 +804,7 @@ class BaseController extends RestController
* @param $user_id 用户ID
* @return mixed
*/
protected function get_discount($game_id,$promote_id,$user_id){
protected function get_discount_old($game_id,$promote_id,$user_id){
//获取折扣
$map['game_id'] = $game_id;
$map['promote_id'] =-1;
@ -938,6 +938,7 @@ class BaseController extends RestController
$request['actual_amount'] = round($request['price'] - $discountAmount - $deductionAmount, 2).'';
$request['discount_amount'] = round($discountAmount, 2).'';
$request['deduction_amount'] = round($deductionAmount, 2).'';
$request['cost'] = $request['price'] - $deductionAmount;
$request['price'] = round($request['actual_amount'], 2).'';
return $request;
//$this->set_message(1089,"fail",$request['price']."新支付".$pay_amount);

@ -103,9 +103,17 @@ class ExchangeController extends BaseController{
$out_trade_no = $prefix.date('Ymd').date('His').sp_random_string(4);
if (C('PAY_TEST')) $out_trade_no = $out_trade_no."_test";
$request['pay_order_number'] = $out_trade_no;
$user_entity = get_user_entity($request['user_id']);
$game_name = isset($request['game_name']) ? $request['game_name'] : M('game', 'tab_')->where(['id' => $request['game_id']])->getField('game_name');
// 折扣
$request['discount'] = 10;
$discount = get_discount($request['game_id'], $request['user_id']);
if (isset($discount['discount']) && $discount['discount'] < 10) {
$request['discount'] = $discount['discount'];
}
M("pay_info", "tab_")->add([
'user_id' => $request['user_id'],
'game_id' => $request['game_id'],

@ -145,7 +145,7 @@ class FengHuoApi2Controller extends GetInfoBaseController{
$where['is_check'] = 1;
$data = M('spend','tab_')
->field('pay_order_number,promote_account,user_id,game_name,game_player_name,server_name,pay_time,cost,user_account')
->field('pay_order_number,promote_account,user_id,game_name,game_player_name,server_name,pay_time,cost,user_account,discount_amount,pay_amount')
->where($where)
->order($order)
->page($page, $row)

@ -148,7 +148,7 @@ class FengHuoApiController extends Controller{
$where['pay_status'] = array('neq',0);
$data = M('spend','tab_')
->field('pay_order_number,promote_account,user_id,game_name,game_player_name,server_name,pay_time,cost,user_account')
->field('pay_order_number,promote_account,user_id,game_name,game_player_name,server_name,pay_time,cost,user_account,discount_amount,pay_amount')
->where($where)
->order($order)
->page($page, $row)

@ -323,7 +323,7 @@ class PayH5Controller extends BaseController{
/**
*支付宝移动支付
*/
public function ali_pay($user_id,$game_id){
public function ali_pay($user_id, $game_id){
#获取SDK上POST方式传过来的数据 然后base64解密 然后将json字符串转化成数组
$request = $this->get_sdk_request($game_id);
$request['pay_status'] = 0;
@ -361,8 +361,17 @@ class PayH5Controller extends BaseController{
if ($check) {
echo json_encode(['code'=>1001,'msg'=> "请求发起失效,编号{$request['pay_order_number']},请选择其他支付方式或联系客服"]);exit;
}
$this->other_price($request);
$discount = get_discount($request['game_id'], $request['user_id']);
$discount = $discount['discount'];
$discountAmount = 0;
$request['discount'] = 10;
if ($discount < 10) {
$discountAmount = round($request['price'] - ($discount * $request['price'] / 10), 2);
$request['discount_amount'] = $discountAmount;
$request['discount'] = $discount;
}
$this->other_price($request, $discountAmount);
$pay_info = get_payment_config(self::ALI_PAY, $game, $request['user_id']);
if ($pay_info['code'] != 0) {
@ -641,39 +650,38 @@ class PayH5Controller extends BaseController{
$pay = new \Think\Pay($param['apitype'],C($param['config']));
break;
}
$discount = $this->get_discount($param['game_id'],$user['promote_id'],$param['user_id']);
$discount = $discount['discount'];
$param['callback'] = C('PAY_DOMAIN')."/sdk.php/Spend/paycallback/orderno/".$out_trade_no.'/game_id/'.$param['game_id']."/paytype/alipay";
$vo = new \Think\Pay\PayVo();
$vo->setBody("充值")
->setFee($param['price'])//支付金额
->setTitle($param['title'])
->setOrderNo($out_trade_no)
->setService($param['server'])
->setSignType($param['signtype'])
->setPayMethod("wap")
->setTable($table)
->setPayWay($param['payway'])
->setGameId($param['game_id'])
->setGameName(get_game_name($param['game_id']))
->setGameAppid($param['game_appid'])
->setServerId($param['server_id'])
->setGameplayerId($param['game_player_id'])
->setCallback($param['callback'])
->setNotifyUrl($param['notifyurl'])
->setGameplayerName($param['game_player_name'])
->setServerName($param['server_name'])
->setUserId($param['user_id'])
->setAccount($user['account'])
->setUserNickName($user['nickname'])
->setPromoteId($user['promote_id'])
->setPromoteName($user['promote_account'])
->setExtend($param['extend'])
->setSdkVersion($param['sdk_version'])
->setDiscount($discount)
->setSmallId($param['small_user_id'])
->setSmallAccount(get_user_account_by_id($param['small_user_id']));
->setFee($param['price'])
->setTitle($param['title'])
->setDiscount($param['discount_amount'])
->setOrderNo($out_trade_no)
->setService($param['server'])
->setSignType($param['signtype'])
->setPayMethod("wap")
->setTable($table)
->setPayWay($param['payway'])
->setGameId($param['game_id'])
->setGameName(get_game_name($param['game_id']))
->setGameAppid($param['game_appid'])
->setServerId($param['server_id'])
->setGameplayerId($param['game_player_id'])
->setCallback($param['callback'])
->setNotifyUrl($param['notifyurl'])
->setGameplayerName($param['game_player_name'])
->setServerName($param['server_name'])
->setUserId($param['user_id'])
->setAccount($user['account'])
->setUserNickName($user['nickname'])
->setPromoteId($user['promote_id'])
->setPromoteName($user['promote_account'])
->setExtend($param['extend'])
->setSdkVersion($param['sdk_version'])
->setSmallId($param['small_user_id'])
->setSmallAccount(get_user_account_by_id($param['small_user_id']));
if($param['is_uc']==1){
return $pay->buildRequestForm($vo,1);
}else{
@ -1195,8 +1203,24 @@ class PayH5Controller extends BaseController{
$request['pay_way'] = 0;
$request['spend_ip'] = get_client_ip();
$user_entity = get_user_entity($request['user_id']);
$discount_arr = $this->get_discount($request['game_id'], $user_entity['promote_id'], $request['user_id']);
$discount = $discount_arr['discount'];
if (isset($request['discount']) && $request['discount'] < 10) {
$discountInfo = discountInfo($request['game_id']);
if (!$discountInfo) {
redirect(U('Spend/notice',array('user_id'=>$user_id,'game_id'=>$game_id,'msg'=>urlencode('折扣无效,请重试!'), 'user_token' => $this->userToken)));exit;
}
}
$discount = get_discount($request['game_id'], $request['user_id']);
$discount = $discount['discount'];
$discountAmount = 0;
if ($discount < 10) {
$discountAmount = round($request['price'] - ($discount * $request['price'] / 10), 2);
$request['discount_amount'] = $discountAmount;
}
$request['actual_amount'] = round($request['price'] - $discountAmount, 2);
$request['discount_amount'] = $discountAmount;
$request['cost'] = $request['price'];
$request['price'] = $request['actual_amount'];
$user = M("user", "tab_");
//添加黑名单
$check_deposit_money = $this->check_deposit_money($user_entity);
@ -1461,15 +1485,17 @@ class PayH5Controller extends BaseController{
echo json_encode(['code'=>1001,'msg'=> "请求发起失效,编号{$request['pay_order_number']},请选择其他支付方式或联系客服"]);exit;
}
$table = $request['code'] == 1 ? "spend" : "deposit";
$prefix = $request['code'] == 1 ? "SP_" : "PF_";
//折扣
$user = get_user_entity($request['user_id']);
$discount = $this->get_discount($request['game_id'],$user['promote_id'],$request['user_id']);
$discount = get_discount($request['game_id'], $request['user_id']);
$discount = $discount['discount'];
$pay_amount = $discount * $request['price'] / 10;
$discountAmount = 0;
if ($discount < 10) {
$discountAmount = round($request['price'] - ($discount * $request['price'] / 10), 2);
$request['discount_amount'] = $discountAmount;
}
// 绑币平台币优先处理
$this->other_price($request);
$this->other_price($request, $discountAmount);
$pay_amount = $request['price'];
$pay_info = get_payment_config(self::WX_PAY, $game, $request['user_id']);

@ -522,18 +522,23 @@ class ShortcutController extends BaseController{
//折扣
$user = get_user_entity($request['user_id']);
$discount = $this->get_discount($request['game_id'],$user['promote_id'],$request['user_id']);
$discount = get_discount($request['game_id'], $request['user_id']);
$discount = $discount['discount'];
$pay_amount = $discount * $request['price'] / 10;
$discountAmount = 0;
if ($discount < 10) {
$discountAmount = round($request['price'] - ($discount * $request['price'] / 10), 2);
$request['discount_amount'] = $discountAmount;
}
$pay_amount = round($discount * $request['price'] / 10, 2);
if ($pay_amount < 0.01) {
echo json_encode(['code'=>0, 'msg'=> "充值金额有误."]);
exit;
}
if (!$is_platform) {
$this->other_price($request, $request['price']-$pay_amount);
$this->other_price($request, $discountAmount);
}
// 平台币充值
if ($is_platform) {
$request['code'] = 0;
@ -566,6 +571,7 @@ class ShortcutController extends BaseController{
$info['actual_amount'] = $request['actual_amount'];
$info['discount_amount'] = $request['discount_amount'];
$info['price'] = $request['price'];
$info['cost'] = $request['cost'];
$infosave = json_encode($info);
M('pay_info', 'tab_')->where([
'id' => $payInfo['id']

@ -72,11 +72,9 @@ class SpendController extends Controller {
'game_id' => $game_id
])->order("id desc")->find();
$request = json_decode($pay_info['info'], true);
/* $file = file_get_contents ( "./Application/Sdk/OrderNo/" . $user_id . "-" . $game_id . ".txt" );
$request = json_decode ( think_decrypt ( $file ), true ); */
$data = array(
'coin' => $request ['body'],
'price' => $request ['price'] + $request['deduction_amount'],
'price' => $request ['price'] + $request['deduction_amount'] + $request['discount_amount'],
'game_name' => $request ['game_name'],
'code' => $request ['code']
);
@ -87,32 +85,35 @@ class SpendController extends Controller {
'user_id' => $user_id,
'game_id' => $game_id
) )->getField ( 'bind_balance' );
// $data['price'] = 1;
$this->assign ( 'balance', $balance );
$this->assign ( 'bind_balance', $bind_balance );
$this->assign ( 'data', $data );
$this->assign ( 'game_id', $game_id );
$this->assign ( 'btncolor', isset($request['btncolor']) ? $request['btncolor'] : '' );
if ($balance + $bind_balance > $data['price']) {
$apply_money = $data['price'];
// 折扣
$discount = get_discount($game_id, $user_id);
$discount_amount = 0;
if ($discount['discount'] < 10) {
$discount_amount = round($data['price'] - $data['price'] * $discount['discount'] / 10, 2);
}
$this->assign('discount', $discount['discount']);
$this->assign('discount_amount', $discount_amount);
if ($balance + $bind_balance > $data['price'] - $discount_amount) {
$apply_money = $data['price'] - $discount_amount;
$this->assign ('pay_price', 0); // 是否第三方支付
} else {
$apply_money = $balance + $bind_balance;
$payPrice = round($data['price'] - $balance - $bind_balance, 2);
$payPrice = round($data['price'] - $discount_amount - $balance - $bind_balance, 2);
$this->assign ('pay_price', $payPrice ? $payPrice : 0);
}
/* $this->assign ( 'alipayurl', $ret[0]['payURL']);
header("Access-Control-Allow-Origin: *"); */
}
$data = $request;
//unset($data['md5_sign']);
unset($data['pay_order_number']);
unset($data['pay_status']);
unset($data['spend_ip']);
unset($data['pay_way']);
/* if ($request['sdk_version'] == 1) // android 没有 is_create_ordernumer苹果内购
unset($data['is_create_ordernumer']); */
$this->assign('apply_money',$apply_money); //适用平台金额
$this->assign('sdk_version', $request['sdk_version']);
$this->assign('small_json', json_encode(array(
@ -123,8 +124,7 @@ class SpendController extends Controller {
)));
$this->assign('user_token', $user_token);
$this->display();
$this->display();
}
public function pay_way_v1() {

@ -38,6 +38,9 @@
</div>
<div class="documents">
<div class="documents_box">
<if condition="$discount lt 10">
<div><span>折扣:{$discount}折</span> <span>-¥{$discount_amount}</span> </div>
</if>
<div><span>适用平台金额:</span> <span>-¥{$apply_money}</span> </div>
<div><span>还需支付:</span><span>¥{$pay_price}</span> </div>
</div>
@ -150,6 +153,9 @@
</div>
<div class="documents">
<div class="documents_box">
<if condition="$discount lt 10">
<div><span>折扣:{$discount}折</span> <span>-¥{$discount_amount}</span> </div>
</if>
<div><span>适用平台金额:</span> <span>-¥{$apply_money}</span> </div>
<div><span>还需支付:</span><span>¥{$pay_price}</span> </div>
</div>

@ -377,12 +377,17 @@ class Pay
$spend_data['selle_ratio'] = getGameSelleRatio($spend_data['promote_id'], $spend_data['game_id']);//$vo->getRatio();
$spend_data['pay_order_number'] = $vo->getOrderNo();
$spend_data['props_name'] = $vo->getTitle();
$spend_data['cost'] = $vo->getFee();
$discount = $vo->getDiscount() == 0 ? 10 : $vo->getDiscount(); //获取折扣
$price = $vo->getFee(); //获取原价
$pay_amount = $discount * $price / 10; //计算折扣后的价格
$vo->setFee($pay_amount);//构造表单 设置金额为折扣后的价格
$spend_data['pay_amount'] = $pay_amount;
$spend_data['cost'] = $param['cost'];
/*$price = $vo->getFee(); //获取原价
$discount = 10;
$pay_amount = $price;
if ($param['discount'] < 10) {
$discount = $param['discount'];
$pay_amount = round($discount * $price / 10, 2); //计算折扣后的价格
$spend_data['discount_amount'] = round($price - $pay_amount, 2);
}
$vo->setFee($pay_amount);//构造表单 设置金额为折扣后的价格*/
$spend_data['pay_amount'] = $param['actual_amount'];
$spend_data['pay_way'] = $vo->getPayWay();
$spend_data['pay_time'] = 0;
$spend_data['spend_time'] = NOW_TIME;

Loading…
Cancel
Save