|
|
<?php
|
|
|
namespace Sdk\Controller;
|
|
|
|
|
|
use Think\Controller;
|
|
|
use Common\Api\GameApi;
|
|
|
use Org\WeixinSDK\Weixin;
|
|
|
use Org\HeepaySDK\Heepay;
|
|
|
use Org\UcenterSDK\Ucservice;
|
|
|
|
|
|
class PayController extends BaseController
|
|
|
{
|
|
|
|
|
|
private function pay($param = array())
|
|
|
{
|
|
|
$table = $param['code'] == 1 ? "spend" : "deposit";
|
|
|
$prefix = $param['code'] == 1 ? "SP_" : "PF_";
|
|
|
$out_trade_no = $prefix . date('Ymd') . date('His') . sp_random_string(4);
|
|
|
$user = get_user_entity($param['user_id']);
|
|
|
switch ($param['apitype']) {
|
|
|
case 'swiftpass':
|
|
|
$pay = new \Think\Pay($param['apitype'], $param['config']);
|
|
|
break;
|
|
|
|
|
|
default:
|
|
|
$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'];
|
|
|
// if(!is_check_apply_promote($param['game_id'],$user['promote_id'])){
|
|
|
// $user['promote_id']=0;
|
|
|
// $user['promote_account']="自然注册";
|
|
|
// }
|
|
|
$vo = new \Think\Pay\PayVo();
|
|
|
$vo->setBody("充值记录描述")
|
|
|
->setFee($param['price'])//支付金额
|
|
|
->setTitle($param['title'])
|
|
|
->setBody($param['body'])
|
|
|
->setOrderNo($out_trade_no)
|
|
|
->setRatio(get_game_selle_ratio($param["game_id"]))
|
|
|
->setService($param['server'])
|
|
|
->setSignType($param['signtype'])
|
|
|
->setPayMethod('mobile')
|
|
|
->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'])
|
|
|
->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']))
|
|
|
->setDiscount($discount);
|
|
|
return $pay->buildRequestForm($vo);
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
/**
|
|
|
*支付宝移动支付
|
|
|
*/
|
|
|
public function alipay_pay()
|
|
|
{
|
|
|
#获取SDK上POST方式传过来的数据 然后base64解密 然后将json字符串转化成数组
|
|
|
$request = json_decode(base64_decode(file_get_contents("php://input")), true);
|
|
|
|
|
|
file_put_contents(dirname(__FILE__) . '/alipay_payapp.txt',json_encode($request));
|
|
|
|
|
|
C(api('Config/lists'));
|
|
|
if ($request['price']*1 < 0) {
|
|
|
$this->set_message(1011, "fail", "充值金额有误");
|
|
|
}
|
|
|
$game = M('Game','tab_')->where(['id'=>$request['game_id']])->field('pay_status')->find();
|
|
|
if($game['pay_status'] == 0){
|
|
|
$this->set_message(0,"fail","该游戏暂时无法充值,请联系客服!");
|
|
|
}
|
|
|
|
|
|
/* $request['price'] = 0.01; */
|
|
|
|
|
|
|
|
|
|
|
|
$extend_data = M('spend','tab_')->where(array('extend'=>$request['extend'],'pay_status'=>1,'game_id'=>$request['game_id']))->find();
|
|
|
if($extend_data){
|
|
|
$this->set_message(1089,"fail","订单号重复,请关闭支付页面重新支付");
|
|
|
}
|
|
|
if (empty(C("alipay.partner")) || empty(C("alipay.email")) || empty(C("alipay.key")) || empty(C("alipay.appid"))) {
|
|
|
$this->set_message(1079, "faill", "未设置支付参数");
|
|
|
}
|
|
|
$game_set_data = get_game_set_info($request['game_id']);
|
|
|
$request['apitype'] = "alipay";
|
|
|
$request['config'] = "alipay";
|
|
|
$request['signtype'] = "MD5";
|
|
|
$request['server'] = "mobile.securitypay.pay";
|
|
|
$request['payway'] = 1;
|
|
|
$data = $this->pay($request);
|
|
|
$md5_sign = $this->encrypt_md5(base64_encode($data['arg']), $game_set_data["access_key"]);
|
|
|
$data = array('status' => 200, "orderInfo" => base64_encode($data['arg']), "out_trade_no" => $data['out_trade_no'], "order_sign" => $data['sign'], "md5_sign" => $md5_sign);
|
|
|
echo base64_encode(json_encode($data));
|
|
|
}
|
|
|
|
|
|
|
|
|
/**
|
|
|
*微信
|
|
|
*/
|
|
|
public function outher_pay()
|
|
|
{
|
|
|
#获取SDK上POST方式传过来的数据 然后base64解密 然后将json字符串转化成数组
|
|
|
$request = json_decode(base64_decode(file_get_contents("php://input")), true);
|
|
|
|
|
|
C(api('Config/lists'));
|
|
|
if ($request['price']*1 < 0) {
|
|
|
$this->set_message(1011, "fail", "充值金额有误");
|
|
|
}
|
|
|
$extend_data = M('spend','tab_')->where(array('extend'=>$request['extend'],'pay_status'=>1,'game_id'=>$request['game_id']))->find();
|
|
|
if($extend_data){
|
|
|
$this->set_message(1089,"fail","订单号重复,请关闭支付页面重新支付");
|
|
|
}
|
|
|
$game_set_data = get_game_set_info($request['game_id']);
|
|
|
if (get_wx_type() == 0) {//官方
|
|
|
$table = $request['code'] == 1 ? "spend" : "deposit";
|
|
|
$prefix = $request['code'] == 1 ? "SP_" : "PF_";
|
|
|
$request['pay_order_number'] = $prefix . date('Ymd') . date('His') . sp_random_string(4);
|
|
|
$request['pay_way'] = 3;
|
|
|
$request['pay_status'] = 0;
|
|
|
$request['spend_ip'] = get_client_ip();
|
|
|
$weixn = new Weixin();
|
|
|
//折扣
|
|
|
$user = get_user_entity($request['user_id']);
|
|
|
$discount = $this->get_discount($request['game_id'], $user['promote_id'], $request['user_id']);
|
|
|
$discount = $discount['discount'];
|
|
|
if($prefix=='PF_'){
|
|
|
$pay_amount = $request['price'];
|
|
|
}else{
|
|
|
$pay_amount = $discount * $request['price'] / 10;
|
|
|
}
|
|
|
$is_pay = json_decode($weixn->weixin_pay($request['title'], $request['pay_order_number'], $pay_amount, 'APP', 2,$request['game_id']), true);
|
|
|
if ($is_pay['status'] === 1) {
|
|
|
if (!$request['is_uc'] || C('UC_SET') == 0 || find_uc_account($user['account'])) {
|
|
|
if ($request['code'] == 1) {
|
|
|
$this->add_spend($request);
|
|
|
} else {
|
|
|
$this->add_deposit($request);
|
|
|
}
|
|
|
}
|
|
|
$json_data['appid'] = $is_pay['appid'];
|
|
|
$json_data['partnerid'] = $is_pay['mch_id'];
|
|
|
$json_data['prepayid'] = $is_pay['prepay_id'];
|
|
|
$json_data['noncestr'] = $is_pay['noncestr'];
|
|
|
$json_data['timestamp'] = $is_pay['time'];
|
|
|
$json_data['package'] = "Sign=WXPay";
|
|
|
$json_data['sign'] = $is_pay['sign'];
|
|
|
$json_data['game_pay_appid'] = $game_set_data['game_pay_appid'];
|
|
|
$json_data['status'] = 200;
|
|
|
$json_data['return_msg'] = "下单成功";
|
|
|
$json_data['wxtype'] = "wx";
|
|
|
echo base64_encode(json_encode($json_data));
|
|
|
}
|
|
|
} else {
|
|
|
if (empty(C("weixin_gf.partner")) || empty(C("weixin_gf.key"))) {
|
|
|
$this->set_message(1079, "faill", "未设置威富通账号");
|
|
|
}
|
|
|
$request['apitype'] = "swiftpass";
|
|
|
$request['config'] = array("partner" => trim(C("weixin_gf.partner")), "email" => "", "key" => trim(C("weixin_gf.key")));
|
|
|
$request['signtype'] = "MD5";
|
|
|
$request['server'] = "unified.trade.pay";
|
|
|
$request['payway'] = 4;
|
|
|
$result_data = $this->pay($request);
|
|
|
$data['status'] = 200;
|
|
|
$data['return_code'] = "success";
|
|
|
$data['return_msg'] = "下单成功";
|
|
|
$data['token_id'] = $result_data['token_id'];
|
|
|
$data['out_trade_no'] = $result_data['out_trade_no'];
|
|
|
$data['game_pay_appid'] = $game_set_data['game_pay_appid']==""?C("weixin_gf.partner"):$game_set_data['game_pay_appid'];
|
|
|
$data['wxtype'] = "wft";
|
|
|
echo base64_encode(json_encode($data));
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
//聚宝云支付
|
|
|
public function jubaobar_pay()
|
|
|
{
|
|
|
#获取SDK上POST方式传过来的数据 然后base64解密 然后将json字符串转化成数组
|
|
|
$request = json_decode(base64_decode(file_get_contents("php://input")), true);
|
|
|
C(api('Config/lists'));
|
|
|
if ($request['price']*1 < 0) {
|
|
|
$this->set_message(1011, "fail", "充值金额有误");
|
|
|
}
|
|
|
$extend_data = M('spend','tab_')->where(array('extend'=>$request['extend'],'pay_status'=>1,'game_id'=>$request['game_id']))->find();
|
|
|
if($extend_data){
|
|
|
$this->set_message(1089,"fail","订单号重复,请关闭支付页面重新支付");
|
|
|
}
|
|
|
$prefix = $request['code'] == 1 ? "SP_" : "PF_";
|
|
|
$out_trade_no = $prefix . date('Ymd') . date('His') . sp_random_string(4);
|
|
|
$request['pay_order_number'] = $out_trade_no;
|
|
|
$request['pay_status'] = 0;
|
|
|
$request['pay_way'] = 5;
|
|
|
$request['spend_ip'] = get_client_ip();
|
|
|
$user = get_user_entity($request['user_id']);
|
|
|
if (!$request['is_uc'] || C('UC_SET') == 0 || find_uc_account($user['account'])) {
|
|
|
if ($request['code'] == 1) {
|
|
|
#TODO添加消费记录
|
|
|
$this->add_spend($request);
|
|
|
} else {
|
|
|
#TODO添加平台币充值记录
|
|
|
$this->add_deposit($request);
|
|
|
}
|
|
|
}
|
|
|
$data['status'] = 200;
|
|
|
$data['return_code'] = "success";
|
|
|
$data['return_msg'] = "下单成功";
|
|
|
$data['out_trade_no'] = $out_trade_no;
|
|
|
$data['appid'] = $request['sdk_version'] == 2 ? C("jubaobar.iosemail") : C("jubaobar.email");//1安卓 2苹果
|
|
|
echo base64_encode(json_encode($data));
|
|
|
}
|
|
|
|
|
|
|
|
|
//竣付通支付
|
|
|
public function jft_pay()
|
|
|
{
|
|
|
#获取SDK上POST方式传过来的数据 然后base64解密 然后将json字符串转化成数组
|
|
|
$request = json_decode(base64_decode(file_get_contents("php://input")), true);
|
|
|
C(api('Config/lists'));
|
|
|
if ($request['price']*1 < 0) {
|
|
|
$this->set_message(1011, "fail", "充值金额有误");
|
|
|
}
|
|
|
$extend_data = M('spend','tab_')->where(array('extend'=>$request['extend'],'pay_status'=>1,'game_id'=>$request['game_id']))->find();
|
|
|
if($extend_data){
|
|
|
$this->set_message(1089,"fail","订单号重复,请关闭支付页面重新支付");
|
|
|
}
|
|
|
$prefix = $request['code'] == 1 ? "SP_" : "PF_";
|
|
|
$out_trade_no = $prefix . date('Ymd') . date('His') . sp_random_string(4);
|
|
|
$request['pay_order_number'] = $out_trade_no;
|
|
|
$request['pay_status'] = 0;
|
|
|
$request['pay_way'] = 6;
|
|
|
$request['spend_ip'] = get_client_ip();
|
|
|
|
|
|
$user = get_user_entity($request['user_id']);
|
|
|
if (!$request['is_uc'] || C('UC_SET') == 0 || find_uc_account($user['account'])) {
|
|
|
if ($request['code'] == 1) {
|
|
|
#TODO添加消费记录
|
|
|
$this->add_spend($request);
|
|
|
} else {
|
|
|
#TODO添加平台币充值记录
|
|
|
$this->add_deposit($request);
|
|
|
}
|
|
|
}
|
|
|
$discount = $this->get_discount($request['game_id'], $user['promote_id'], $request['user_id']);
|
|
|
$discount = $discount['discount'];
|
|
|
$pay_amount = $discount * $request['price'] / 10;
|
|
|
|
|
|
$data['status'] = 200;
|
|
|
$data['return_code'] = "success";
|
|
|
$data['return_msg'] = "下单成功";
|
|
|
$data['ordertime'] = date("Ymdhms", time());
|
|
|
$data['out_trade_no'] = $out_trade_no;
|
|
|
$data['partner'] = C('jft.partner');
|
|
|
$data['appid'] = C('jft.appid');
|
|
|
$data['com_key'] = C('jft.key');
|
|
|
$data['key'] = C('jft.appkey');
|
|
|
$data['vector'] = C('jft.vector');
|
|
|
$data['returnurl'] = "http://www.vlcms.com";
|
|
|
$data['notifyurl'] = "http://" . $_SERVER['HTTP_HOST'] . "/callback.php/Notify/jft_callback";
|
|
|
$data['ordertime'] = date("Ymdhms", time());
|
|
|
echo base64_encode(json_encode($data));
|
|
|
}
|
|
|
|
|
|
|
|
|
//汇付宝支付
|
|
|
public function heepay_pay()
|
|
|
{
|
|
|
#获取SDK上POST方式传过来的数据 然后base64解密 然后将json字符串转化成数组
|
|
|
$request = json_decode(base64_decode(file_get_contents("php://input")), true);
|
|
|
C(api('Config/lists'));
|
|
|
if (C('UC_SET') == 1) {
|
|
|
if (!is_array(find_uc_account($request['account']))) {
|
|
|
$this->set_message(1080, "fail", "Uc用户暂不支持");
|
|
|
}
|
|
|
}
|
|
|
if ($request['price']*1 < 0) {
|
|
|
$this->set_message(1011, "fail", "充值金额有误");
|
|
|
}
|
|
|
$extend_data = M('spend','tab_')->where(array('extend'=>$request['extend'],'pay_status'=>1,'game_id'=>$request['game_id']))->find();
|
|
|
if($extend_data){
|
|
|
$this->set_message(1089,"fail","订单号重复,请关闭支付页面重新支付");
|
|
|
}
|
|
|
$prefix = $request['code'] == 1 ? "SP_" : "PF_";
|
|
|
$out_trade_no = $prefix . date('Ymd') . date('His') . sp_random_string(4);
|
|
|
$request['pay_order_number'] = $out_trade_no;
|
|
|
$request['pay_status'] = 0;
|
|
|
$request['pay_way'] = 6;
|
|
|
$request['spend_ip'] = get_client_ip();
|
|
|
if ($request['code'] == 1) {
|
|
|
#TODO添加消费记录
|
|
|
$this->add_spend($request);
|
|
|
} else {
|
|
|
#TODO添加平台币充值记录
|
|
|
$this->add_deposit($request);
|
|
|
}
|
|
|
$pay['agent_id'] = "1664502";//商户号
|
|
|
$pay['order_no'] = $out_trade_no;
|
|
|
$pay['time'] = date('YmdHis', time());
|
|
|
$pay['pay_type'] = $request['pay_type'];
|
|
|
$pay['amount'] = $request['price'];
|
|
|
$pay['user_ip'] = get_client_ip();
|
|
|
$pay['sign_key'] = "87FB9444028A4B14937A1905";//密钥
|
|
|
$pay['payerName'] = "元宝";
|
|
|
$pay['number'] = 1;
|
|
|
$pay['goods_note'] = "支付";
|
|
|
$heepay = new Heepay();
|
|
|
$token_id = $heepay->heepay_pay($pay);
|
|
|
$data['agent_id'] = "1664502";//商户号
|
|
|
$data['status'] = 200;
|
|
|
$data['return_code'] = "success";
|
|
|
$data['return_msg'] = "下单成功";
|
|
|
$data['token_id'] = $token_id;
|
|
|
|
|
|
$data['out_trade_no'] = $out_trade_no;
|
|
|
echo base64_encode(json_encode($data));
|
|
|
}
|
|
|
|
|
|
/*
|
|
|
* 平台币抵扣
|
|
|
* 优先抵扣绑币 平台币 调这个接口说明 不走第三方支付通道
|
|
|
*/
|
|
|
public function platform_coin_deduction() {
|
|
|
|
|
|
#获取SDK上POST方式传过来的数据 然后base64解密 然后将json字符串转化成数组
|
|
|
$request = json_decode(base64_decode(file_get_contents("php://input")), true);
|
|
|
#记录信息
|
|
|
if ($request['price'] *1<=0) {
|
|
|
$this->set_message(1011, "fail", "充值金额有误");
|
|
|
}
|
|
|
$request['price'] = abs($request['price']);
|
|
|
$extend_data = M('spend','tab_')->where(array('extend'=>$request['extend'],'pay_status'=>1,'game_id'=>$request['game_id']))->find();
|
|
|
if($extend_data){
|
|
|
$this->set_message(1089,"fail","订单号重复,请关闭支付页面重新支付");
|
|
|
}
|
|
|
$user_info = get_user_entity($request['user_id']);
|
|
|
if($user_info['lock_status'] == 0 || $user_info['check_status'] == 0){
|
|
|
$this->set_message(0,"fail","账号被禁用,无法充值,请联..系客服!");
|
|
|
}
|
|
|
$game = M('Game','tab_')->where(['id'=>$request['game_id']])->field('pay_status')->find();
|
|
|
if($game['pay_status'] == 0){
|
|
|
$this->set_message(0,"fail","该游戏暂时无法充值,请联系客服!");
|
|
|
}
|
|
|
$out_trade_no = "PF_" . date('Ymd') . date('His') . sp_random_string(4);
|
|
|
$request['order_number'] = $out_trade_no;
|
|
|
$request['pay_order_number'] = $out_trade_no;
|
|
|
$request['out_trade_no'] = $out_trade_no;
|
|
|
$request['title'] = $request['title'];
|
|
|
$request['pay_status'] = 1;
|
|
|
$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'];
|
|
|
$user = M("user", "tab_");
|
|
|
//添加黑名单
|
|
|
$check_deposit_money = $this->check_deposit_money($user_entity);
|
|
|
$check_bind_money = $this->check_bind_money($user_entity);
|
|
|
if($check_deposit_money === false || $check_bind_money === false || (C('BRUSH_MONEY') && (abs($check_deposit_money)>=C('BRUSH_MONEY') || abs($check_bind_money)>=C('BRUSH_MONEY'))) || (!C('BRUSH_MONEY') && (abs($check_deposit_money) != 0 || abs($check_bind_money) != 0))){
|
|
|
if(C('BRUSH_SMS_STATUS') && C('BRUSH_PHONE')&& C('BRUSH_SMS_ID')){
|
|
|
$result = $this-> send_block(C('BRUSH_PHONE'),$user_entity['account']);
|
|
|
}
|
|
|
$block_data['check_status'] = 0;
|
|
|
$block_data['block_time'] = time();
|
|
|
$user->where(['id'=>$user_entity['id']])->save($block_data);
|
|
|
echo base64_encode(json_encode(array("status" => 1076,"return_code" => "fail", "return_msg" => C('BRUSH_MONEY')."您的账号暂时无法充值,请联系客服处理.".$check_deposit_money)));
|
|
|
exit();
|
|
|
}
|
|
|
|
|
|
$result = false;
|
|
|
// 先扣绑币
|
|
|
$request['pay_way'] = -1;
|
|
|
$user_play = M("UserPlay", "tab_");
|
|
|
$user_play_map['user_id'] = $request['user_id'];
|
|
|
$user_play_map['game_id'] = $request['game_id'];
|
|
|
$user_play_data = $user_play->where($user_play_map)->find();
|
|
|
$balance = $user->where(array('id' => $request['user_id']))->getField("balance");
|
|
|
if ($balance + $user_play_data['bind_balance'] < $request['price']) {
|
|
|
redirect(U('Spend/notice',array('user_id'=>$user_id,'game_id'=>$game_id,'msg'=>'您金额不足,请退出重试.')));exit;
|
|
|
}
|
|
|
|
|
|
if ($user_play_data['bind_balance'] < $request['price']) {
|
|
|
$price = $request['price'];
|
|
|
if ($user_play_data['bind_balance'] > 0) {
|
|
|
$user_play->where($user_play_map)->save(array('bind_balance' => 0)); // 扣绑定币
|
|
|
$request['price'] = $user_play_data['bind_balance'];
|
|
|
$result = $this->add_spend($request);
|
|
|
$this->set_ratio($request['pay_order_number'], 2); // 游戏返利
|
|
|
}
|
|
|
$request['pay_way'] = 0; // 扣平台币
|
|
|
$real_price = $price - $user_play_data['bind_balance'];
|
|
|
$user->where(array('id' => $request["user_id"]))->setDec("balance", $real_price);
|
|
|
//$this->set_message(0,"fail", $request['pay_order_number']);
|
|
|
|
|
|
$request['pay_order_number'] = $request['pay_order_number']."_1";
|
|
|
$request['price'] = $real_price;
|
|
|
$result = $this->add_spend($request);
|
|
|
$this->set_ratio($request['pay_order_number'], 1); // 游戏返利
|
|
|
} else { // 绑定币足够扣
|
|
|
$user_play->where($user_play_map)->setDec('bind_balance', $request['price']); // 扣绑定币
|
|
|
$result = $this->add_spend($request);
|
|
|
$this->set_ratio($request['pay_order_number'], 2); // 游戏返利
|
|
|
}
|
|
|
|
|
|
$game = new GameApi();
|
|
|
$game->game_pay_notify($request, $request['code']);
|
|
|
if ($result) {
|
|
|
echo base64_encode(json_encode(array("status" => 200, "return_code" => "success", "return_msg" => "支付成功", "out_trade_no" => $out_trade_no)));
|
|
|
} else {
|
|
|
echo base64_encode(json_encode(array("status" => 1078, "return_code" => "fail", "return_msg" => "支付失败")));
|
|
|
}
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
*平台币支付
|
|
|
*/
|
|
|
public function platform_coin_pay()
|
|
|
{
|
|
|
#获取SDK上POST方式传过来的数据 然后base64解密 然后将json字符串转化成数组
|
|
|
$request = json_decode(base64_decode(file_get_contents("php://input")), true);
|
|
|
#记录信息
|
|
|
if ($request['price'] *1<=0) {
|
|
|
$this->set_message(1011, "fail", "充值金额有误");
|
|
|
}
|
|
|
$request['price'] = abs($request['price']);
|
|
|
$extend_data = M('spend','tab_')->where(array('extend'=>$request['extend'],'pay_status'=>1,'game_id'=>$request['game_id']))->find();
|
|
|
if($extend_data){
|
|
|
$this->set_message(1089,"fail","订单号重复,请关闭支付页面重新支付");
|
|
|
}
|
|
|
$user_info = get_user_entity($request['user_id']);
|
|
|
if($user_info['lock_status'] == 0 || $user_info['check_status'] == 0){
|
|
|
$this->set_message(0,"fail","账号被禁用,无法充值,请联系客服...!");
|
|
|
}
|
|
|
$game = M('Game','tab_')->where(['id'=>$request['game_id']])->field('pay_status')->find();
|
|
|
if($game['pay_status'] == 0){
|
|
|
$this->set_message(0,"fail","该游戏暂时无法充值,请联系客服!");
|
|
|
}
|
|
|
$out_trade_no = "PF_" . date('Ymd') . date('His') . sp_random_string(4);
|
|
|
$request['order_number'] = $out_trade_no;
|
|
|
$request['pay_order_number'] = $out_trade_no;
|
|
|
$request['out_trade_no'] = $out_trade_no;
|
|
|
$request['title'] = $request['title'];
|
|
|
$request['pay_status'] = 1;
|
|
|
$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'];
|
|
|
$user = M("user", "tab_");
|
|
|
//添加黑名单
|
|
|
$check_deposit_money = $this->check_deposit_money($user_entity);
|
|
|
$check_bind_money = $this->check_bind_money($user_entity);
|
|
|
if($check_deposit_money === false || $check_bind_money === false || (C('BRUSH_MONEY') && (abs($check_deposit_money)>=C('BRUSH_MONEY') || abs($check_bind_money)>=C('BRUSH_MONEY'))) || (!C('BRUSH_MONEY') && (abs($check_deposit_money) != 0 || abs($check_bind_money) != 0))){
|
|
|
if(C('BRUSH_SMS_STATUS') && C('BRUSH_PHONE')&& C('BRUSH_SMS_ID')){
|
|
|
$result = $this-> send_block(C('BRUSH_PHONE'),$user_entity['account']);
|
|
|
}
|
|
|
$block_data['check_status'] = 0;
|
|
|
$block_data['block_time'] = time();
|
|
|
$user->where(['id'=>$user_entity['id']])->save($block_data);
|
|
|
echo base64_encode(json_encode(array("status" => 1076,"return_code" => "fail", "return_msg" => "您的账号暂时无法充值,请联系客服处理")));
|
|
|
exit();
|
|
|
}
|
|
|
|
|
|
$result = false;
|
|
|
switch ($request['code']) {
|
|
|
case 1:#非绑定平台币
|
|
|
$real_price = $request['price'] * $discount / 10;
|
|
|
if ($user_entity['balance'] < $real_price) {
|
|
|
|
|
|
$data = array('discount'=>$discount,"real_price"=>$real_price,'balance'=>$user_entity['balance']);
|
|
|
|
|
|
echo base64_encode(json_encode(array("status" => 1076,"return_code" => "fail", "return_msg" => "余额不足")));
|
|
|
exit();
|
|
|
}
|
|
|
//防刷预警
|
|
|
if(C('BRUSH_PTB') && $user_entity['balance'] >= C('BRUSH_PTB') && C('BRUSH_EMAIL') && C('BRUSH_EMAIL_STATUS')){
|
|
|
$content = "尊敬的用户:<br/> 系统检测到玩家【".$user_entity['account']."】账户平台币".$user_entity['balance'].",超出上限".C('BRUSH_PTB').",可能存在异常,请尽快处理。";
|
|
|
sendBrushMail(C('BRUSH_EMAIL'),$content);
|
|
|
}
|
|
|
if(C('BRUSH_PTB_TIME') && C('BRUSH_PTB_COUNT') && C('BRUSH_EMAIL') && C('BRUSH_EMAIL_STATUS')){
|
|
|
$where['pay_time'] = ['between',[time()-C('BRUSH_PTB_TIME')*60,time()]];
|
|
|
$where['user_id'] = $user_entity['id'];
|
|
|
$where['pay_status'] = 1;
|
|
|
$where['pay_way'] = 0;
|
|
|
$spend_count = M('spend','tab_')->where($where)->count('id');
|
|
|
$spend_count += 1;
|
|
|
if($spend_count > C('BRUSH_PTB_COUNT')){
|
|
|
$content = "尊敬的用户:<br/> 系统检测到玩家【".$user_entity['account']."】在".date('Y-m-d H:i:s',time()-C('BRUSH_PTB_TIME')*60)."-".date('Y-m-d H:i:s')."期间累计平台币消费".$spend_count."次,可能存在异常,请尽快处理。";
|
|
|
sendBrushMail(C('BRUSH_EMAIL'),$content);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
#扣除平台币
|
|
|
$user->where("id=" . $request["user_id"])->setDec("balance", $real_price);
|
|
|
#TODO 添加绑定平台币消费记录
|
|
|
$result = $this->add_spend($request);
|
|
|
#检查返利设置
|
|
|
$this->set_ratio($request['pay_order_number']);
|
|
|
|
|
|
|
|
|
break;
|
|
|
case 2:#绑定平台币
|
|
|
$request['pay_way'] = -1;
|
|
|
$user_play = M("UserPlay", "tab_");
|
|
|
$user_play_map['user_id'] = $request['user_id'];
|
|
|
$user_play_map['game_id'] = $request['game_id'];
|
|
|
$user_play_data = $user_play->where($user_play_map)->find();
|
|
|
|
|
|
if ($user_play_data['bind_balance'] < $request['price']) {
|
|
|
echo base64_encode(json_encode(array("status" =>1076, "return_code" => "fail", "return_msg" => "余额不足")));
|
|
|
exit();
|
|
|
}
|
|
|
#扣除平台币
|
|
|
$user_play->where($user_play_map)->setDec("bind_balance", $request['price']);
|
|
|
#TODO 添加绑定平台币消费记录
|
|
|
$result = $this->add_spend($request);
|
|
|
#检查返利设置
|
|
|
$this->set_ratio($request['pay_order_number'],2);
|
|
|
break;
|
|
|
default:
|
|
|
echo base64_encode(json_encode(array("status" => 1081, "return_code" => "fail", "return_msg" => "支付方式不明确")));
|
|
|
exit();
|
|
|
break;
|
|
|
}
|
|
|
$game = new GameApi();
|
|
|
$game->game_pay_notify($request, $request['code']);
|
|
|
if ($result) {
|
|
|
echo base64_encode(json_encode(array("status" => 200, "return_code" => "success", "return_msg" => "支付成功", "out_trade_no" => $out_trade_no)));
|
|
|
} else {
|
|
|
echo base64_encode(json_encode(array("status" => 1078, "return_code" => "fail", "return_msg" => "支付失败")));
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
*支付验证
|
|
|
*/
|
|
|
public function pay_validation()
|
|
|
{
|
|
|
#获取SDK上POST方式传过来的数据 然后base64解密 然后将json字符串转化成数组
|
|
|
$request = json_decode(base64_decode(file_get_contents("php://input")), true);
|
|
|
$out_trade_no = $request['out_trade_no'];
|
|
|
$pay_where = substr($out_trade_no, 0, 2);
|
|
|
$result = 0;
|
|
|
$map['pay_order_number'] = $out_trade_no;
|
|
|
switch ($pay_where) {
|
|
|
case 'SP':
|
|
|
$data = M('spend', 'tab_')->field('pay_status')->where($map)->find();
|
|
|
$result = $data['pay_status'];
|
|
|
break;
|
|
|
case 'PF':
|
|
|
$data = M('deposit', 'tab_')->field('pay_status')->where($map)->find();
|
|
|
$result = $data['pay_status'];
|
|
|
break;
|
|
|
case 'AG':
|
|
|
$data = M('agent', 'tab_')->field('pay_status')->where($map)->find();
|
|
|
$result = $data['pay_status'];
|
|
|
break;
|
|
|
default:
|
|
|
exit('accident order data');
|
|
|
break;
|
|
|
}
|
|
|
if ($result) {
|
|
|
echo base64_encode(json_encode(array("status" => 200, "return_code" => "success", "return_msg" => "支付成功")));
|
|
|
exit();
|
|
|
} else {
|
|
|
echo base64_encode(json_encode(array("status" => 1078, "return_code" => "fail", "return_msg" => "支付失败")));
|
|
|
exit();
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
*sdk客户端显示支付
|
|
|
*/
|
|
|
public function payShow()
|
|
|
{
|
|
|
$map['type'] = 1;
|
|
|
$map['status'] = 1;
|
|
|
$data = M("tool", "tab_")->where($map)->select();
|
|
|
if (empty($data)) {
|
|
|
echo base64_encode(json_encode(array("status" => 1082, "return_code" => "fail", "return_msg" => "暂无数据")));
|
|
|
exit();
|
|
|
}
|
|
|
foreach ($data as $key => $value) {
|
|
|
$pay_show_data[$key]['mark'] = $value['name'];
|
|
|
$pay_show_data[$key]['title'] = $value['title'];
|
|
|
}
|
|
|
echo base64_encode(json_encode(array("status" => 200, "return_code" => "fail", "return_msg" => "成功", "pay_show_data" => $pay_show_data)));
|
|
|
exit();
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|