get_user_from_uid($param['user_id']); if(empty($uc_user)){ $this->set_message(1075,"fail","UC用户数据异常"); }else{ if($param['code'] == 1){ $game = M('GameSet',"tab_"); $map['game_id'] = $param['game_id']; $game_data = $game->where($map)->find(); $uc_id = $uc->uc_recharge($param['user_id'],$uc_user['username'],$uc_user['username'],$param['game_id'],$param['game_appid'],get_game_name($param['game_id']),0,'',$uc_user['promote_id'],$uc_user['promote_account'],"",$out_trade_no,$param['price'],time(),$param['extend'],$param['payway'],get_client_ip(),$param['sdk_version'],1,$uc_user['platform'],$game_data['pay_notify_url'],$game_data['game_key']); }else{ $uc_id = $uc->uc_deposit($param['user_id'],$uc_user['username'],$uc_user['username'],$param['game_id'],$param['game_appid'],get_game_name($param['game_id']),0,'',$uc_user['promote_id'],$uc_user['promote_account'],"",$out_trade_no,$param['price'],time(),$param['extend'],$param['payway'],get_client_ip(),$param['sdk_version'],1,$uc_user['platform'],$game_data['pay_notify_url'],$game_data['game_key']); } } } $method=$param['sdk_version']==2?"wap":"mobile"; $discount = $this->get_discount($param['game_id'],$user['promote_id'],$param['user_id']); $discount = $discount['discount']; $vo = new \Think\Pay\PayVo(); $vo->setBody("充值记录描述") ->setFee($param['price'])//支付金额 ->setTitle($param['title']) ->setBody($param['body']) ->setOrderNo($out_trade_no) ->setService($param['server']) ->setSignType($param['signtype']) ->setPayMethod($method) ->setTable($table) ->setPayWay($param['payway']) ->setGameId($param['game_id']) ->setGameName(get_game_name($param['game_id'])) ->setGameAppid($param['game_appid']) ->setServerId(0) ->setServerName("") ->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); if($param['is_uc']==1){ return $pay->buildRequestForm($vo,1); }else{ return $pay->buildRequestForm($vo); } } public function asd(){ } /** *支付宝移动支付 */ public function alipay_pay(){ #获取SDK上POST方式传过来的数据 然后base64解密 然后将json字符串转化成数组 $request = json_decode(base64_decode(file_get_contents("php://input")),true); C(api('Config/lists')); if (empty($request)) { $this->set_message(1001, "fail", "登录数据不能为空"); } if($request['price']<0){ $this->set_message(1011,"fail","充值金额有误"); } $game_set_data = get_game_set_info($request['game_id']); $request['apitype'] = "alipay"; $request['config'] = "alipay"; $request['signtype']= "MD5"; $request['server'] = $request['sdk_version']==2?"alipay.wap.create.direct.pay.by.user":"mobile.securitypay.pay"; $request['payway'] = 1; if($request['sdk_version']==2){ $request['title']=$request['price']; $request['body']=$request['price']; //$request['price']=0.01; $pay_url=$this->pay($request); file_put_contents("./Application/Sdk/OrderNo/".$request['user_id']."-".$request['game_id'].".txt",base64_encode(json_encode(['pay_url'=>$this->pay($request)]))); echo base64_encode(json_encode(array('pay_url'=>"http://".$_SERVER['HTTP_HOST'].'/sdk.php/Spend/get_pay_url/user_id/'.$request['user_id'].'/game_id/'.$request['game_id']))); }else{ $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']<0){ $this->set_message(0,"fail","充值金额有误"); } 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']; $pay_amount = $discount * $request['price'] / 10; $is_pay = json_decode($weixn->weixin_pay($request['title'], $request['pay_order_number'], $pay_amount, 'APP', 2), true); if ($is_pay['status'] === 1) { if (C('UC_SET') == 1&&$request['is_uc']==1) { $uc = new Ucservice(); $uc_user=$uc->get_user_from_uid($request['user_id']); if($uc_user){ if($request['code'] == 1){ $game = M('GameSet',"tab_"); $map['game_id'] = $request['game_id']; $game_data = $game->where($map)->find(); $uc_id = $uc->uc_recharge($request['user_id'],$uc_user['username'],$uc_user['username'],$request['game_id'],$request['game_appid'],get_game_name($request['game_id']),0,'',$uc_user['promote_id'],$uc_user['promote_account'],"",$request['pay_order_number'],$request['price'],time(),$request['extend'],$request['pay_way'],get_client_ip(),$request['sdk_version'],1,$uc_user['platform'],$game_data['pay_notify_url'],$game_data['game_key']); }else{ $uc_id = $uc->uc_deposit($request['user_id'],$uc_user['username'],$uc_user['username'],$request['game_id'],$request['game_appid'],get_game_name($request['game_id']),0,'',$uc_user['promote_id'],$uc_user['promote_account'],"",$out_trade_no,$request['price'],time(),$request['extend'],$request['pay_way'],get_client_ip(),$request['sdk_version'],1,$uc_user['platform'],$game_data['pay_notify_url'],$game_data['game_key']); } } } 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['status'] = 200; $json_data['return_msg'] = "下单成功"; $json_data['wxtype'] = "wx"; echo base64_encode(json_encode($json_data)); } } else { $game_set_data = get_game_set_info($request['game_id']); if(empty(C("weixin.partner"))||empty(C("weixin.key"))){ $this->set_message(1079, "faill", "未设置威富通账号"); } $request['apitype'] = "swiftpass"; $request['config']=array("partner"=>trim(C("weixin.partner")),"email"=>"","key"=>trim(C("weixin.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']; $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); wite_text(json_encode($request),dirname(__FILE__).'/a.txt'); C(api('Config/lists')); if($request['price']<0){ $this->set_message(1011,"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(); if (C('UC_SET') == 1&&$request['is_uc']==1) { $uc = new Ucservice(); $uc_user=$uc->get_user_from_uid($request['user_id']); if($uc_user){ if($request['code'] == 1){ $game = M('GameSet',"tab_"); $map['game_id'] = $request['game_id']; $game_data = $game->where($map)->find(); $uc_id = $uc->uc_recharge($request['user_id'],$uc_user['username'],$uc_user['username'],$request['game_id'],$request['game_appid'],get_game_name($request['game_id']),0,'',$uc_user['promote_id'],$uc_user['promote_account'],"",$request['pay_order_number'],$request['price'],time(),$request['extend'],$request['pay_way'],get_client_ip(),$request['sdk_version'],1,$uc_user['platform'],$game_data['pay_notify_url'],$game_data['game_key']); }else{ $uc_id = $uc->uc_deposit($request['user_id'],$uc_user['username'],$uc_user['username'],$request['game_id'],$request['game_appid'],get_game_name($request['game_id']),0,'',$uc_user['promote_id'],$uc_user['promote_account'],"",$out_trade_no,$request['price'],time(),$request['extend'],$request['pay_way'],get_client_ip(),$request['sdk_version'],1,$uc_user['platform'],$game_data['pay_notify_url'],$game_data['game_key']); } } } $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 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']<0){ $this->set_message(1011,"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_pay(){ #获取SDK上POST方式传过来的数据 然后base64解密 然后将json字符串转化成数组 $request = json_decode(base64_decode(file_get_contents("php://input")),true); #记录信息 if($request['price']<0){ $this->set_message(1011,"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(); if (C('UC_SET') == 1&&$request['is_uc']==1) { $uc = new Ucservice(); $uc_user=$uc->get_user_from_uid($request['user_id']); if(empty($uc_user)){ $this->set_message(1075,"fail","UC用户数据异常"); }else{ //UC存在则 查找其他数据库 配置文件里 $sqltype = 2; $user_entity = M('User', 'tab_', C('DB_CONFIG2'))->where(array('account' => $request['account']))->find(); if (empty($user_entity)) { $sqltype = 3; $user_entity = M('User', 'tab_', C('DB_CONFIG3'))->where(array('account' => $request['account']))->find(); } if(empty($user_entity)){ $this->set_message(1066,"fail","用户数据异常"); } $discount = 10; } }else{ $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']; } $result = false; switch ($request['code']) { case 1:#非绑定平台币 $user = M("user","tab_"); $real_price = $request['price'] * $discount / 10; if ($user_entity['balance'] < $real_price) { echo base64_encode(json_encode(array("status"=>-2,"return_code"=>"fail","return_msg"=>"余额不足"))); exit(); } //生成UC订单 if($sqltype!=''){ $game = M('GameSet',"tab_"); $map['game_id'] = $request['game_id']; $game_data = $game->where($map)->find(); $result = $uc->uc_recharge($request['user_id'],$uc_user['username'],$uc_user['username'],$request['game_id'],$request['game_appid'],get_game_name($request['game_id']),0,'',$uc_user['promote_id'],$uc_user['promote_account'],"",$out_trade_no,$request['price'],time(),$request['extend'],$request['pay_way'],get_client_ip(),$request['sdk_version'],1,$uc_user['platform'],$game_data['pay_notify_url'],$game_data['game_key']); } if($sqltype==2){ M('User','tab_',C('DB_CONFIG2'))->where(array('account'=>$user_entity['account']))->setDec("balance",$request['price']); $uc->uc_rechange_notify($data_spned['pay_order_number'],1); if($result){ echo base64_encode(json_encode(array("return_status"=>200,"return_code"=>"success","return_msg"=>"支付成功","out_trade_no"=>$out_trade_no)));exit; } }elseif($sqltype==3){ M('User','tab_',C('DB_CONFIG3'))->where(array('account'=>$user_entity['account']))->setDec("balance",$request['price']); $uc->uc_rechange_notify($data_spned['pay_order_number'],200); if($result){ echo base64_encode(json_encode(array("return_status"=>200,"return_code"=>"success","return_msg"=>"支付成功","out_trade_no"=>$out_trade_no)));exit; } }else{ #扣除平台币 $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:#绑定平台币 $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_bind_spned($request); 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("return_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(); } private function wite_text($txt,$name){ $myfile = fopen($name, "w") or die("Unable to open file!"); fwrite($myfile, $txt); fclose($myfile); } }