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($param['out_trade_no']) ->setRatio(get_game_selle_ratio($param["game_id"])) ->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']) ->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'])); return $pay->buildRequestForm($vo, 0, $param); } /** *支付宝移动支付 */ public function alipay_pay(){ $request = json_decode(base64_decode(file_get_contents("php://input")),true); // 支付验证 是否让支付 $payCheck = pay_check($request['user_id']); if (!$payCheck['code']) { $this->set_message(1088, "fail", $payCheck['msg']); } file_put_contents(dirname(__FILE__) . '/alipay_paywap.txt',json_encode($request)); C(api('Config/lists')); /* $payconfig = ['alipay' => [ 'partner' => '2088631242187552', 'key' => '2yxhpzhxnkeji5yldvow2wr8xdib6tl8', 'email' => '65517558@qq.com', 'appid' => '2019091067222198', 'way' => '0', 'usenew' => '0', 'status' => '1' ]]; C($payconfig); */ if (empty($request)) { $this->set_message(1001, "fail", "登录数据不能为空"); } $game = M('Game','tab_')->where(['id'=>$request['game_id']])->field('pay_status')->find(); if($game['pay_status'] == 0){ $this->set_message(0,"fail","该游戏暂时无法充值,请联系客服!"); } if($request['code'] == 1){ $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($request['price']*1<=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 = $this->other_price($request); //Log::write(serialize($request), Log::DEBUG); if(get_zfb_type()==0 || 1){ // 旧版走web支付 $game_set_data = get_game_set_info($request['game_id']); $request['apitype'] = "alipay"; $request['config'] = "alipay"; $request['signtype']= "MD5"; $request['server'] = "alipay.wap.create.direct.pay.by.user"; $request['payway'] = 1; $request['title']=$request['price']; $request['body']=$request['price']; $request['out_trade_no'] = $out_trade_no; //$this->set_message(1011,"fail", $request['code']); $pay_url=$this->pay($request); $data = array( 'status' => 200, "out_trade_no" => $out_trade_no, "url" => $pay_url, ); } elseif (get_zfb_type() == 2) { // 双乾支付H5 $request['pay_order_number'] = $out_trade_no; $request['pay_way'] = C('PAY_WAY.SQ_ALIPAY'); $request['pay_status'] = 0; $request['spend_ip'] = get_client_ip(); if($request['code']==1){ $this->add_spend($request,1); }else{ $this->add_deposit($request); } $sqpay=new Sqpay(); $returl = C('PAY_DOMAIN'). "/sdk.php/Spend/pay_success/orderno/".$request['pay_order_number'].'/game_id/'.$request['game_id']; $data['secret'] = C("sqpay.key"); $data['merno'] = C("sqpay.partner"); $data['amount'] = $request['price']; $data['order_no'] = $request['pay_order_number']; $data['paymenttype'] = "ZFBZF"; $data['MerRemark'] = "mark"; $data['subject'] = "消费-".$request["pay_order_number"]; $data['notifyurl'] = C('PAY_DOMAIN')."/callback.php/Notify/sq_callback";//通知 $data['returnurl'] = $returl; $data['mchAppId'] = "jianghuifa.cn"; $data['mchAppName'] = "mchAppName"; $data['deviceInfo'] = "AND_WAP"; $data['clientIp'] = get_client_ip(); $ret = $sqpay->sq_pay($data); $ret = json_decode($ret, true); unset($data); if($ret[0]['respCode'] == '000000'){ $data = array( "status" => 200, "out_trade_no" => $out_trade_no, "url" => $ret[0]['payURL'], ); }else{ $data = array( "status" => 0, "out_trade_no" => $out_trade_no, "url" => $ret['respMess'], ); } } else{ if( empty(C('goldpig.partner'))||empty(C('goldpig.wooolid'))){ $this->set_message(1009, "fail", "支付参数未配置"); } if($request['price']*1<1){ $this->set_message(1011,"fail","单笔交易金额必须大于1元"); } $request['pay_way'] = 8; $request['pay_status'] = 0; $request['pay_order_number'] = $out_trade_no; $request['spend_ip'] = get_client_ip(); //折扣 $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; if($request['code']==1){ $this->add_spend($request); }else{ $this->add_deposit($request); } $goldpig=new GoldPig(); $pay_url = $goldpig->GoldPig($user['account'],$pay_amount,15,$request['pay_order_number']); if($pay_url['status']==0){ $url='http://'.$_SERVER['HTTP_HOST']; $data = array( 'status' => 0, "out_trade_no" => $out_trade_no, "url" => $pay_url['info'], ); }else{ $data = array( 'status' => 200, "out_trade_no" => $out_trade_no, "url" => $pay_url['msg'], ); } } echo base64_encode(json_encode($data)); } // 签约处理 public function sign_contract() { $sqpay = new Sqpay(); $param = I("request."); // $param['signCode'] = 357926; // pp($param); if (IS_POST && !$param['signCode']) { //echo "调用认证 签约==》".time()."
"; 发送短信 $rsign = $sqpay->sign_contract(array( 'merNo' => C('sqpay.partner'), 'custName' => $param['custName'], 'phoneNo' => $param['phoneNo'], 'cardNo' => $param['cardNo'], 'idNo' => $param['idNo'], 'reqMsgId' => date('YmdHis').rand(0, 9999), 'authMsg' => '', 'custType' => '01', // 认证 发短信 'secret' => C('sqpay.key'), )); //echo "调用认证 签约==》".time()."
"; if ($rsign['respCode'] == 'success') { // 认证成功发送短信 $this->success('签约短信发送成功', '', true); } else { if (strlen($rsign['respMessage']) > 100) { $this->error('填写信息有误,请核对!', '', true); } else { $this->error($rsign['respMessage'], '', true); } } // var_dump($rsign); exit(); } if (IS_POST && $param['signCode']) { $rauth = $sqpay->sign_contract(array( 'merNo' => C('sqpay.partner'), 'custName' => $param['custName'], 'phoneNo' => $param['phoneNo'], 'cardNo' => $param['cardNo'], 'idNo' => $param['idNo'], 'reqMsgId' => date('YmdHis').rand(0, 9999), 'authMsg' => $param['signCode'], 'custType' => '02', // 签约 'secret' => C('sqpay.key'), )); if ($rauth['respCode'] == 'success') { // 签约成功 $this->success('签约成功', '', true); $signContract = true; } else { $this->error($rauth['respMessage'], '', true); } } } /**\ * 快捷支付'merNo' => $data['merNo'], 'merOrderNo' => $data['merOrderNo'], 'cardNo' => $data['cardNo'], 'custName' => $data['custName'], 'idType' => '0', 'idNo' => $data['idNo'], 'phone' => $data['phoneNo'], 'purpose' => $data['purpose'], 'payAmount' => $data['payAmount'], 'bankCode' => $bankInfo['bank'], 'payType' => 'XYPAY', 'NotifyURL' => $data['NotifyURL'], 'txnTime' => $data['txnTime'], 'smsCode' => $data['smsCode'], */ public function shortcut_pay() { $sqpay = new Sqpay(); $param = I("request."); $signContract = false; // 签约标记 if (!$param['user_id'] || !$param['game_id']) { $this->error("参数有误", '', true); } // 支付验证 是否让支付 $payCheck = pay_check($param['user_id']); if (!$payCheck['code']) { $this->set_message(1088, "fail", $payCheck['msg']); } $payInfo = M('pay_info', 'tab_')->where(array( 'user_id' => $param['user_id'], 'game_id' => $param['game_id'], 'extend' => $param['extend'] ))->order('id desc')->find(); // $info = json_decode($payInfo['info'], true); if ($payInfo['type'] == 'sq_shortcut') { $spend = M('spend', 'tab_')->where([ 'pay_order_number' => $payInfo['order_id'] ])->find(); $orderPrice = $spend['pay_amount']; } else { $deposit = M('deposit', 'tab_')->where([ 'pay_order_number' => $payInfo['order_id'] ])->find(); $orderPrice = $deposit['pay_amount']; } if ($orderPrice != $payInfo['price']) { $this->error($orderPrice."数据有误.".$payInfo['price'], '', true); } if ($payInfo['type'] == 'sq_shortcut_platform' && $payInfo['price'] < 1) { $this->error("数据有误", '', true); } if ($payInfo['status'] == 'payed') { $this->error("订单已支付"); } // 发起支付 if (IS_POST && $param['smsCode']) { //echo "发起支付==》".time()."
"; $rsp = $sqpay->shortcut_pay(array( 'merNo' => C('sqpay.partner'), 'merOrderNo' => $payInfo['order_id'], 'custName' => $param['custName'], 'phoneNo' => $param['phoneNo'], 'cardNo' => $param['cardNo'], 'idNo' => $param['idNo'], 'purpose' => 'purpose', 'payAmount' => $payInfo['price'], 'txnTime' => $payInfo['txnTime'], 'smsCode' => $param['smsCode'], 'secret' => C('sqpay.key'), 'NotifyURL' => C('PAY_DOMAIN')."/callback.php/Notify/sq_callback",//通知 )); //echo "发起支付==》".time()."
"; if ($rsp['responseCode'] == '88') { // sleep(5); echo json_encode([ 'status' => 1, 'info' => '请求成功', 'url' => U('Spend/shortcut_notice',array('status'=> 1, 'orderno' => $payInfo['order_id'], 'user_id'=>$param['user_id'],'game_id'=>$param['game_id'])), ]); exit(); // redirect(U('Spend/shortcut_notice',array('status'=> 1, 'orderno' => $payInfo['order_id'], 'user_id'=>$param['user_id'],'game_id'=>$param['game_id'])));exit; } else { // 支付失败 echo json_encode([ 'status' => 0, 'info' => $rsp['resMess'] ]); exit(); // redirect(U('Spend/pay_success',array('status'=> 0, 'orderno' => $payInfo['order_id'], 'user_id'=>$param['user_id'],'game_id'=>$param['game_id'])));exit; } } // 发送短信 if (IS_POST && !isset($param['smsCode'])) { // 查看是否签约 //echo "查看是否签约==》".time()."
"; $rcs = $sqpay->contract_status(array( 'merNo' => C('sqpay.partner'), 'custName' => $param['custName'], 'phoneNo' => $param['phoneNo'], 'cardNo' => $param['cardNo'], 'idNo' => $param['idNo'], 'payAmount' => $payInfo['price'], 'secret' => C('sqpay.key'), )); // pp($rcs); //echo "查看是否签约==》".time()."
"; if ($rcs['respCode'] == 4) { $this->error($rcs['respMessage'], '', true); pp($rcs); pp($rcs['respMessage']); } if ($rcs['respCode'] == 1 || $rcs['respCode'] == 2 || $rcs['respCode'] == 3) { echo json_encode([ 'status' => 2, // 'info' => '未签约' ]); exit(); } /* // 调用认证 签约 6222031402001028203 500236199608024075 if ($rcs['respCode'] == 1 || $rcs['respCode'] == 2 || $rcs['respCode'] == 3) { //echo "调用认证 签约==》".time()."
"; 发送短信 $rsign = $sqpay->sign_contract(array( 'merNo' => C('sqpay.partner'), 'custName' => $param['custName'], 'phoneNo' => $param['phoneNo'], 'cardNo' => $param['cardNo'], 'idNo' => $param['idNo'], 'reqMsgId' => date('YmdHis').rand(0, 9999), 'authMsg' => 'ok', 'custType' => '01', 'secret' => C('sqpay.key'), )); //echo "调用认证 签约==》".time()."
"; if ($rsign['respCode'] == 'success') { // 认证成功 接着签约 $rauth = $sqpay->sign_contract(array( 'merNo' => C('sqpay.partner'), 'custName' => $param['custName'], 'phoneNo' => $param['phoneNo'], 'cardNo' => $param['cardNo'], 'idNo' => $param['idNo'], 'reqMsgId' => date('YmdHis').rand(0, 9999), 'authMsg' => $rsign['authMsg'], 'custType' => '02', 'secret' => C('sqpay.key'), )); pp($rauth); if ($rauth['respCode'] == 'success') { $signContract = true; } else { $this->error($rauth['respMessage'], '', true); } } else { $this->error($r['respMessage'], '', true); } }*/ // 无需签约 发送短信 if ($rcs['respCode'] == 0 || $rcs['respCode'] == 10) { //echo "发送短信==》".time()."
"; $ret = $sqpay->protocol_pay_send_sms(array( 'merNo' => C('sqpay.partner'), 'custName' => $param['custName'], 'phoneNo' => $param['phoneNo'], 'cardNo' => $param['cardNo'],//'6214855913999401', 'idNo' => $param['idNo'], 'payAmount' => $payInfo['price'], 'secret' => C('sqpay.key'), 'merOrderNo' => $payInfo['order_id'], 'NotifyURL' => C("PAY_DOMAIN")."/callback.php?Notify/sq_callback", 'purpose' => "消费-".$payInfo['order_id'], )); //echo "发送短信==》".time()."
"; if ($ret['resFlag'] == 'success') { M('pay_info', 'tab_')->where(array( 'id' => $payInfo['id'], ))->save(array( 'txn_time' => $ret['txnTime'] )); $this->success('发送成功', '', true); } else { $this->error($ret['resMess'], '', true); } } } $this->display(); } /** * 测试 */ public function test() { var_dump(C('sqpay')); die('aaa'); $sqpay = new Sqpay(); $r = $sqpay->contract_status(array( 'merNo' => 204121, 'custName' => '张谷城', 'phoneNo' => '18950494552', 'cardNo' => '6225768783753476', 'idNo' => '352228199110130536', 'payAmount' => 0.01, 'secret' => 'NsyJOE!e', )); if ($r['respCode'] == 4) { pp($r); pp($r['respMessage']); } // 调用签约 if ($r['respCode'] == 1 || $r['respCode'] == 2 || $r['respCode'] == 3) { } // 无需签约 发送短信 if ($r['respCode'] == 0 || $r['respCode'] == 10) { $sqpay->protocol_pay_send_sms(array( 'merNo' => 204121, 'custName' => '张谷城', 'phoneNo' => '18950494552', 'cardNo' => '6225768783753476',//'6214855913999401', 'idNo' => '352228199110130536', 'payAmount' => 0.01, 'secret' => 'NsyJOE!e', 'merOrderNo' => 'SP_dfjlasjd1', 'NotifyURL' => 'www.baidu.com', 'purpose' => 'aaaa' )); } pp($r); $url = "https://ccdcapi.alipay.com/validateAndCacheCardInfo.json"; $data['cardNo'] = "6225768783753476"; $r = curl_post($url, array('cardNo' => $data['cardNo'], 'cardBinCheck' => 'true', '_input_charset' => 'utf-8')); $r = (json_decode($r, true)); pp($r['bank']); $sqpay = new Sqpay(); $order_no = "232323"; $ret = $sqpay->sq_wxsmallpay($order_no); pp(json_decode($ret[0]['wxjsapiStr'])); $request = json_decode(think_decrypt("MDAwMDAwMDAwMJndsKKZZYuXeqCgy324cpebidDdi6mplZy2vKCFdqeagKewp5CKas6JaJ3Nec6fnYSJtt96ztqbmbq0mpyJr5qDza-wgJywy4tod9aKummcmn2n1YuorGiBzKdoipyzqIG4q2mJnX6Xfnp3poKogayAntzOkr2xmJGVsKCRirSdjJafspF6j9uTpIfWirx5nYaert16ztqbm5S8rZyfuKqMlpuhmYqOy4Cfest8p3plmme73omXz52BzNWdh3ajmoCnsLOReq3IlaOH25OWnKqZnq6bes-sm4SlsGSZirSkjrevb4Cgh9iTiWaWkbuUZZpnt9d907VjmqmfqZJkrJmWlrihmWRyxZWKi81-q3qXm4nNzoupuZWctsCghazKlJi4v7KEepLRiX6Gln3RiWmPfbqXf9_PnJCqu2eFnLNlf7evrICgh9iLfYbLf815rICe3M6Ura2ikZS7nYeco6aBqKusgKCDkpOjf9iSq2mtgJ_Uzn7PqZuFubydgZvZmpeWtKiRimrOeqCgy5SsmKuZfKuVi9Kcq5q6tJ-Zq6ukfdHKoZmKj8iUfanKlbuGrY9nms2TvLibh8uvnYR1rKWOqLyfmmWl0JOfeph5znKehYyymn-8vKuGps6chYbOnY6otKWEoIvNfoqU2n3Odp6Eebaafs-0Y4HL3Z2SisphjrubpICdqMuUaIfblNGGrYqMtp5-mNtjm5S8rYuJs2qBuKexhIuG3JR6itl_qJtmnX2n3pOXtWORlbh-knaSqYHOq2qFnaCVfop6lX7OhZ2DeK_NipexqJy5m2SBnNGamKu8s5t3etl-iXrVedGUnJmMu8uT0qmmkrWvaoGe2mKC0bdpkJ-xk4B9e81-uqhlhaK634Cr22OGzK-rkpvKlJi4zbKRnaXFlYqKlX-7fpebicjef6nKooHL3Z2ZiZurjJfApZqhh9KTaGXLf815rIOfptp-qKylgdConJ2Im6eX0bilmp9y15WNYsuKvHmdhp6vuYarm6uFpqtphXbNqYLeq2yErYKSf4x6k5KqeZ2DeK_cir3PmJuVuJycerirfc7VsIN2g9mKjp3IlJZ2aYCf1Jh9qK2sm6m8qZJ4m6GXp69vgJ1-236JZdt9qIGphK-62n65yquB0JZx"),true); pp($request); $pay['agent_id'] = "2083328";//商户号 $pay['order_no'] = "SP_111111002"; $pay['time'] = date('YmdHis', time()); $pay['pay_type'] = 30; $pay['amount'] = 0.01; $pay['user_ip'] = get_client_ip(); $pay['sign_key'] = "852B4A10455E49F280EEFCB1";//密钥 $pay['payerName'] = "yb"; $pay['number'] = 1; $pay['payerName'] = "sp"; $pay['goods_name'] = "cs"; $pay['goods_note']="cs"; $pay['device'] = "wap"; $pay['remark'] = "ios"; $pay['bank_card_type'] = 0; $pay['return_url'] ='http://' . $_SERVER ['HTTP_HOST'] . "/sdk.php/Spend/pay_success/orderno/".$pay['order_no'].'/game_id/'.$_REQUEST['game_id']; $heepay = new Heepay(); $token_id = $heepay->wxh5_pay($pay); pp($token_id); } /** * android获取 支付url */ public function android_shortcut_pay() { $request = json_decode(base64_decode(file_get_contents("php://input")), true); file_put_contents("./Application/Sdk/OrderNo/".$request['user_id']."-".$request['game_id'].".txt",think_encrypt(json_encode($request))); $this->set_message(1088, "fail", "暂不支持此方式充值"); // 支付验证 是否让支付 $payCheck = pay_check($request['user_id']); if (!$payCheck['code']) { $this->set_message(1088, "fail", $payCheck['msg']); } $user_id = $request['user_id']; $game_id = $request['game_id']; $data = array( 'status' => 200, "url" => 'http://' . $_SERVER ['HTTP_HOST'] ."/sdk.php/WapPay/wap_shortcut_pay/user_id/{$user_id}/game_id/{$game_id}", "html" => '', "return_msg" => '', "paytype" => 'shortcut', ); echo base64_encode(json_encode($data)); exit(); } /** * 快捷支付 用户点击 */ public function wap_shortcut_pay($user_id,$game_id) { // $file=file_get_contents("./Application/Sdk/OrderNo/".$user_id."-".$game_id.".txt"); // $request = json_decode(think_decrypt($file),true); // Log::write(serialize($request), Log::DEBUG); $is_platform = 0; if (I('request.code') == 0 && I('request.type') == 'platform') { $is_platform = 1; // 平台币充值 } //$prefix = ($is_platform == 1) ? 'PF_' : 'SP_'; //$request['pay_order_number'] = $prefix . date('Ymd') . date('His') . sp_random_string(4); $request['game_id'] = I('request.game_id'); $game_id = $request['game_id']; $request['user_id'] = I('request.user_id'); $user_id = $request['user_id']; $request['code'] = I('request.code'); $payInfo = M('pay_info', 'tab_')->where([ 'user_id' => I('user_id'), 'game_id' => I('game_id'), 'extend' => I('extend'), ])->order('id desc')->find(); $request['price'] = $payInfo['price']; $userToken = I('request.user_token'); if (empty($request)) { redirect(U('Spend/notice',array('user_id'=>$user_id,'game_id'=>$game_id,'is_platform'=> $is_platform,'msg'=>'登录数据不能为空', 'user_token' => $userToken)));exit; } // 支付验证 是否让支付 $payCheck = pay_check($request['user_id']); if (!$payCheck['code']) { $this->set_message(1088, "fail", $payCheck['msg']); } $game = M('Game','tab_')->where(['id'=>$request['game_id']])->field('pay_status')->find(); if($game['pay_status'] == 0){ redirect(U('Spend/notice',array('user_id'=>$user_id,'game_id'=>$game_id,'is_platform'=> $is_platform,'msg'=>'该游戏暂时无法充值,请联系客服!', 'user_token' => $userToken)));exit; } if($request['price']*1<=0){ redirect(U('Spend/notice',array('user_id'=>$user_id,'game_id'=>$game_id,'is_platform'=> $is_platform,'msg'=>'充值金额有误', 'user_token' => $userToken)));exit; } C(api('Config/lists')); if (!$is_platform) { $request['extend'] = I('request.extend'); $extend_data = M('spend','tab_')->where(array('extend'=>$request['extend'],'game_id'=>$request['game_id'],'pay_status'=>1))->find(); if($extend_data){ redirect(U('Spend/notice',array('user_id'=>$user_id,'game_id'=>$game_id,'is_platform'=> $is_platform,'msg'=>$request['game_id'].'订单号重复,请关闭支付页面重新支付'.$request['extend'], 'user_token' => $userToken)));exit; } } //折扣 $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; if ($pay_amount < 0.01) { redirect(U('Spend/notice',array('user_id'=>$user_id,'game_id'=>$game_id,'is_platform'=> $is_platform, 'msg'=>'充值金额有误.'.$pay_amount, 'user_token' => $userToken)));exit; } if (!$is_platform) { $this->other_price($request, $request['price']-$pay_amount); } // 平台币充值 if ($is_platform) { $request['code'] = 0; $request['user_id'] = I('request.user_id'); $request['price'] = intval(I('request.price')); $request['game_id'] = I('request.game_id'); $request['pay_way'] = C("PAY_WAY.SQ_SHORTCUT"); // 支付方式(-1绑币 0:平台币,1:支付宝,2:微信(扫码)3微信app 4 威富通 5聚宝云 6竣付通 7苹果支付8金猪支付 9双乾支付-支付宝 10双乾支付-银联 15双乾支付-快捷 $request['pay_status'] = 0; $request['spend_ip'] = get_client_ip(); $payInfo = M('pay_info', 'tab_')->where([ 'user_id' => I('user_id'), 'game_id' => I('game_id'), 'extend' => I('extend'), ])->order('id desc')->find(); $request['pay_order_number'] = $payInfo['order_id']; if (!$payInfo) { return ; } } else { // 游戏充值 $request['code'] = 1; $payInfo = M('pay_info', 'tab_')->where([ 'user_id' => I('user_id'), 'game_id' => I('game_id'), 'extend' => I('extend'), ])->order('id desc')->find(); if ($payInfo) { $info = json_decode($payInfo['info'], true); $info['deduction_amount'] = $request['deduction_amount']; $info['actual_amount'] = $request['actual_amount']; $info['discount_amount'] = $request['discount_amount']; $info['price'] = $request['price']; $infosave = json_encode($info); M('pay_info', 'tab_')->where([ 'id' => $payInfo['id'] ])->save([ 'type' => 'sq_shortcut', // 游戏充值 //'order_id' => $request['pay_order_number'], //'price' => $request['actual_amount'] ? $request['actual_amount'] : $request['price'], 'info' => $infosave ]); $info['code'] = $request['code']; $info['pay_order_number'] = $request['pay_order_number']; $request = $info; $request['pay_way'] = C("PAY_WAY.SQ_SHORTCUT"); $request['pay_status'] = 0; $request['spend_ip'] = get_client_ip(); $request['pay_order_number'] = $payInfo['order_id']; } } //0 官方 1双乾 if (get_shortcut_pay_type() == 0) { // 暂时只有双乾 }elseif(get_shortcut_pay_type() == 1){ if($request['code']==1){ $this->add_spend($request,1); }else{ $this->add_deposit($request,1); } } $this->assign("pay_amount", $request['actual_amount']?$request['actual_amount']:$request['price']); $this->assign("user_id", $request['user_id']); $this->assign("game_id", $request['game_id']); $this->assign("extend", $is_platform ? $request['pay_order_number'] : I('extend')); $this->display(); } /** *微信支付 */ public function weixin_pay() { #获取SDK上POST方式传过来的数据 然后base64解密 然后将json字符串转化成数组 $request = json_decode(base64_decode(file_get_contents("php://input")), true); /* file_put_contents(dirname(__FILE__) . '/weixin_paywap.txt',json_encode($request)); */ if (empty($request)) { $this->set_message(1001, "fail", "登录数据不能为空"); } // 支付验证 是否让支付 $payCheck = pay_check($request['user_id']); if (!$payCheck['code']) { $this->set_message(1088, "fail", $payCheck['msg']); } C(api('Config/lists')); if($request['price']*1<=0 || $request['price'] >= C('WX_PAY_LIMIT')){ $this->set_message(1011,"fail","充值金额有误"); } // 微信支付日月限额 if (pay_limit('wx')) { $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","该游戏暂时无法充值,请联系客服!"); } $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","订单号重复,请关闭支付页面重新支付"); } $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(); //折扣 $user = get_user_entity($request['user_id']); $discount = $this->get_discount($request['game_id'],$user['promote_id'],$request['user_id']); $discount = $discount['discount']; $discountAmount = 0; if($prefix=='PF_'){ $pay_amount = $request['price']; }else{ $pay_amount = $discount * $request['price'] / 10; $discountAmount = $request['price'] - $pay_amount; } if(!empty($request['scheme'])) { file_put_contents("./Application/Sdk/Scheme/".$request['game_id'].".txt",$request['scheme']); } // 绑币平台币优先处理 // $this->other_price($request, $discountAmount); // $pay_amount = $request['price']; $game_set_data = get_game_set_info($request['game_id']); //$request['game_name'] //0 官方 1威富通 if (get_wx_pay_type() == 0) { if(empty(C('wei_xin.email'))|| empty(C('wei_xin.partner'))||empty(C('wei_xin.key'))){ $this->set_message(1009, "fail", "支付参数未配置"); } $weixn = new Weixin(); $is_pay = json_decode($weixn->weixin_pay(isset($request['title']) ? $request['title']: "充值", $request['pay_order_number'], $pay_amount, 'MWEB'), true); if($is_pay['status']==1){ if($request['code']==1){ $this->add_spend($request); }else{ $this->add_deposit($request); } $json_data['status'] = 200; if($request['sdk_version']==1){ $json_data['url'] = $is_pay['mweb_url']; $json_data['orderno'] = $request['pay_order_number']; $json_data['paytype'] = "wx"; }else{ if(!empty($request['scheme'])) { $redirect_url = C('PAY_DOMAIN') . "/sdk.php/Spend/pay_success2/orderno/".$request['pay_order_number'].'/game_id/'.$request['game_id']; } else { $redirect_url = C('PAY_DOMAIN') . "/sdk.php/Spend/pay_success/orderno/".$request['pay_order_number']; } $json_data['url'] = $is_pay['mweb_url'].'&redirect_url='.urlencode( $redirect_url ); $json_data['paytype'] ="wx"; } }else{ $json_data['status'] = 500; $json_data['url'] = C('PAY_DOMAIN'); } $json_data['cal_url'] = C('PAY_DOMAIN'); echo base64_encode(json_encode($json_data)); exit; // $this->redirect('WapPay/weixin_pay_view',['user_id'=>$request['user_id'],'game_id'=>$request['game_id']]); } else if(get_wx_pay_type() == 1){ // 威富通 if( empty(C('heepay.partner'))||empty(C('heepay.key'))){ $this->set_message(1009, "fail", "支付参数未配置"); } if($request['code']==1){ $this->add_spend($request); }else{ $this->add_deposit($request); } $heepay = new Heepay(); if(!empty($request['scheme'])) { // 跳转出app $redirect_url = 'http://' . $_SERVER ['HTTP_HOST'] . "/sdk.php/Spend/pay_success2/orderno/".$request['pay_order_number'].'/game_id/'.$request['game_id']; } else { // 应用内 $redirect_url = 'http://' . $_SERVER ['HTTP_HOST'] . "/sdk.php/Spend/pay_success/orderno/".$request['pay_order_number']; } $pay['agent_id'] = C('heepay.partner');//商户号 $pay['order_no'] = $request['pay_order_number']; $pay['time'] = date('YmdHis', time()); $pay['pay_type'] = 30; $pay['amount'] = $pay_amount; $pay['user_ip'] = get_client_ip(); $pay['sign_key'] = C('heepay.key');//密钥 $pay['payerName'] = "cs"; $pay['number'] = 1; $pay['goods_note']="cs"; $pay['device'] = "wap"; $pay['bank_card_type'] = 0; $pay['return_url'] = $redirect_url; $url = $heepay->wxh5_pay($pay); $json_data['status'] = 200; $json_data['paytype'] = 'wft'; $json_data['url'] = $url; echo base64_encode(json_encode($json_data)); exit; }else if(get_wx_pay_type() == 2){ if( empty(C('jft_wap.partner'))||empty(C('jft_wap.key'))){ $this->set_message(1009, "fail", "支付参数未配置"); } if($request['code']==1){ $this->add_spend($request); }else{ $this->add_deposit($request); } $jtpay=new Jtpay(); if($request['sdk_version']==1){//1 安卓 2苹果 $p25_terminal=3; $p26_iswappay=3; }else{ $p25_terminal=2; $p26_iswappay=3; } if(!empty($request['scheme'])) { $redirect_url = 'http://' . $_SERVER ['HTTP_HOST'] . "/sdk.php/Spend/pay_success2/orderno/".$request['pay_order_number'].'/game_id/'.$request['game_id']; } else { $redirect_url = 'http://' . $_SERVER ['HTTP_HOST'] . "/sdk.php/Spend/pay_success/orderno/".$request['pay_order_number']; } $url=$jtpay->jt_pay($request['pay_order_number'],$pay_amount,$user['account'],get_client_ip(),"sdk",3,$redirect_url,$p26_iswappay,$p25_terminal);//安卓 $json_data['status'] = 200; $json_data['paytype']='jft'; $json_data['url']=$url; echo base64_encode(json_encode($json_data)); exit; }else if(get_wx_pay_type() == 3){ if( empty(C('goldpig.partner'))||empty(C('goldpig.wooolid'))){ $this->set_message(1009, "fail", "支付参数未配置"); } $request['pay_way'] = 8; if($pay_amount*1<1){ $this->set_message(1011,"fail","单笔交易金额必须大于1元"); } if($request['code']==1){ $this->add_spend($request); }else{ $this->add_deposit($request); } $goldpig=new GoldPig(); $res = $goldpig->GoldPig($user['account'],$pay_amount,29,$request['pay_order_number']); if($res['status']==1){ $json_data['status'] = 200; $json_data['paytype']='wft'; $json_data['url']=$res['msg']; }else{ $json_data['status'] = 500; $json_data['msg']=$res['info']; $json_data['url']='http://'.$_SERVER ['HTTP_HOST']; $json_data['cal_url'] = C("PAY_DOMAIN"); } echo base64_encode(json_encode($json_data)); exit; }else{ if( empty(C('weixin_gf.partner'))||empty(C('weixin_gf.key'))){ $this->set_message(1009, "fail", "支付参数未配置"); } $Swiftpass=new Swiftpass(C('weixin_gf.partner'),C('weixin_gf.key')); $param['service']="pay.weixin.wappay"; $param['ip']= $request['spend_ip']; $param['pay_amount']=$pay_amount;//; $param['out_trade_no']= $request['pay_order_number']; $param['game_name']= get_game_name($request['game_id']); $param['body']="游戏充值"; if(!empty($request['scheme'])) { $param['callback_url'] = 'http://' . $_SERVER ['HTTP_HOST'] . "/sdk.php/Spend/pay_success2/orderno/" . $request['pay_order_number'].'/game_id/'.$request['game_id']; }else { $param['callback_url'] = 'http://' . $_SERVER ['HTTP_HOST'] . "/sdk.php/Spend/pay_success/orderno/" . $request['pay_order_number']; } $url=$Swiftpass->submitOrderInfo($param); if($url['status']==0){ $request['pay_way'] = 4; if($request['code']==1){ $this->add_spend($request); }else{ $this->add_deposit($request); } $json_data['status'] = 200; $json_data['url']=$url['pay_info']; }else{ $json_data['status'] = 0; $json_data['url']='http://'.$_SERVER ['HTTP_HOST']; } $json_data['paytype'] ="wft"; echo base64_encode(json_encode($json_data)); } // Header("Location: $ssd"); } /** * 查询订单状态 * @return [type] [description] */ public function get_orderno_restart(){ $request = json_decode(base64_decode(file_get_contents("php://input")), true); $pay_where = substr($request['orderno'], 0, 2); $map['pay_order_number'] = $request['orderno']; switch ($pay_where) { case 'SP': $result = M('Spend','tab_')->field("pay_status")->where($map)->find(); break; case 'PF': $result = M('deposit','tab_')->field('pay_status')->where($map)->find(); break; } if(empty($result['pay_status'])){ $status=1086; }else{ $status=$result['pay_status']==0?1086:200; } echo base64_encode(json_encode(['status'=>$status])); } public function weixin_pay_view($user_id,$game_id){ $file=file_get_contents("./Application/Sdk/OrderNo/".$user_id."-".$game_id.".txt"); $request = json_decode(base64_decode($file),true); $this->assign('url',$request['url'].'&redirect_url='.(is_ssl()?'https://':'http://'). $_SERVER ['HTTP_HOST'] . "/sdk.php/Spend/pay_success"); // Header("Location: $ssd"); $this->display(); } /** * 竣付通支付 * @return [type] [description] */ public function jft_wap(){ #获取SDK上POST方式传过来的数据 然后base64解密 然后将json字符串转化成数组 $request = json_decode(base64_decode(file_get_contents("php://input")), true); if (empty($request)) { $this->set_message(1001, "fail", "登录数据不能为空"); } // 支付验证 是否让支付 $payCheck = pay_check($request['user_id']); if (!$payCheck['code']) { $this->set_message(1088, "fail", $payCheck['msg']); } C(api('Config/lists')); if($request['price']<0){ $this->set_message(1011,"fail","充值金额有误"); } $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(); //折扣 $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; // 绑币平台币处理 $this->other_price($request, $request['price']-$pay_amount); if($request['code']==1){ $this->add_spend($request); }else{ $this->add_deposit($request); } file_put_contents("./Application/Sdk/OrderNo/".$request['user_id']."-".$request['game_id'].".txt",think_encrypt(json_encode($request))); $sss="http://".$_SERVER['HTTP_HOST'].'/sdk.php/Spend/pay_way/user_id/'.$request['user_id'].'/game_id/'.$request['game_id'].'/type/3'; redirect($sss); } /** * 双乾支付 * @return [type] [description] */ public function squnion_wap(){ $request = json_decode(base64_decode(file_get_contents("php://input")), true); //pp($request); /* $request['user_id'] = 80; $request['game_id'] = 143; $request['price'] = 0.01; $request['code'] = 1; $request['extend'] = "11212452299229"; $request['pay_order_number'] = "11212452299229"; */ // 支付验证 是否让支付 $payCheck = pay_check($request['user_id']); if (!$payCheck['code']) { $this->set_message(1088, "fail", $payCheck['msg']); } if (empty($request)) { $this->set_message(1001, "fail","登录数据不能为空"); } $game = M('Game','tab_')->where(['id'=>$request['game_id']])->field('pay_status')->find(); if($game['pay_status'] == 0){ $this->set_message(0, "fail","该游戏暂时无法充值,请联系客服!"); } if($request['price']*1<=0){ $this->set_message(1011,"fail","充值金额有误"); } C(api('Config/lists')); $extend_data = M('spend','tab_')->where(array('extend'=>$request['extend'],'game_id'=>$request['game_id'],'pay_status'=>1))->find(); if($extend_data){ $this->set_message(1089,"fail","订单号重复,请关闭支付页面重新支付"); } $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'] = 7; // 支付方式(-1绑币 0:平台币,1:支付宝,2:微信(扫码)3微信app 4 威富通 5聚宝云 6竣付通 7双乾银联 $request['pay_status'] = 0; $request['spend_ip'] = get_client_ip(); $out_trade_no = $request['pay_order_number']; //折扣 $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; if ($pay_amount < 0.01) { redirect(U('Spend/notice',array('user_id'=>$request['user_id'],'game_id'=>$request['game_id'],'msg'=>'充值金额有误.'.$pay_amount)));exit; } $this->other_price($request, $request['price']-$pay_amount); //0 官方 1双乾 if (get_union_pay_type() == 0) { // 暂时只有双乾 }elseif(get_union_pay_type() == 1){ file_put_contents("./Application/Sdk/OrderNo/".$request['user_id']."-".$request['game_id'].".txt",think_encrypt(json_encode($request))); if($request['code']==1){ $this->add_spend($request,1); }else{ $this->add_deposit($request, 1); } $sqpay=new Sqpay(); $returl = 'http://' . $_SERVER ['HTTP_HOST'] . "/sdk.php/Spend/pay_success2/orderno/".$request['pay_order_number'].'/game_id/'.$request['game_id']; $ret = $sqpay->sq_pay($out_trade_no, $pay_amount, C("sqpay.partner"), "UNION", "测试产品1", get_client_ip(),$returl); $ret = json_decode($ret, true); if ($ret[0]['payHtml']) { $data = array( 'status' => 200, "url" => '', "html" => $ret[0]['payHtml'], "return_msg" => '', "paytype" => 'squnion', ); } else { $data = array( 'status' => 1, "url" => '', "html" => '', "return_msg" => '失败请重试', "paytype" => '', ); } echo base64_encode(json_encode($data)); exit(); } // redirect($json_data['url']); } /** * 双乾小程序支付 * 流程:1.app端唤起小程序 2,小程序请求服务端拿到支付参数 3,小程序发起支付之后 回调服务端 4,服务端通知客户端 * return: 相关支付参数 回调url */ public function small_program() { $request = json_decode(base64_decode(file_get_contents("php://input")), true); if (empty($request)) { $this->set_message(1001, "fail", "登录数据不能为空"); } if (!$request['openid'] || !$request['price'] || !$request['game_id']) { $this->set_message(1001, "fail", "小程序参数有误"); } $game = M('Game','tab_')->where(['id'=>$request['game_id']])->field('pay_status')->find(); if($game['pay_status'] == 0){ $this->set_message(0, "fail","该游戏暂时无法充值,请联系客服!"); } if($request['price']*1<=0){ $this->set_message(1011,"fail","充值金额有误"); } $extend_data = M('spend','tab_')->where(array('extend'=>$request['extend'],'game_id'=>$request['game_id'],'pay_status'=>1))->find(); if($extend_data){ $this->set_message(1089,"fail","订单号重复,请关闭支付页面重新支付"); } $prefix = ($request['code'] == 1) ? "SP_" : "PF_"; $request['pay_order_number'] = $prefix . date('Ymd') . date('His') . sp_random_string(4); $request['pay_way'] = C('PAY_WAY.SQ_SMALL_PROGRAM'); $request['pay_status'] = 0; $request['spend_ip'] = get_client_ip(); //折扣 $user = get_user_entity($request['user_id']); $discount = $this->get_discount($request['game_id'],$user['promote_id'],$request['user_id']); $discount = $discount['discount']; $discountAmount = 0; if($prefix=='PF_'){ $pay_amount = $request['price']; }else{ $pay_amount = $discount * $request['price'] / 10; $discountAmount = $request['price'] - $pay_amount; } if(!empty($request['scheme'])) { file_put_contents("./Application/Sdk/Scheme/".$request['game_id'].".txt",$request['scheme']); } // 绑币平台币优先处理 $this->other_price($request, $discountAmount); $pay_amount = $request['price']; if($request['code']==1){ $this->add_spend($request,1); }else{ $this->add_deposit($request, 1); } $sqpay = new Sqpay(); $data['userId'] = $request['openid']; // openid $data['order_no'] = $request['pay_order_number']; $data['merno'] = C('sqpay.partner'); $data['subject'] = "消费-".$request["pay_order_number"]; $data['ip'] = get_client_ip(); $data['returnurl'] = C('PAY_DOMAIN'). "/sdk.php/Spend/pay_success/orderno/".$request['pay_order_number'].'/game_id/'.$request['game_id']; $data['notifyurl'] = C('PAY_DOMAIN')."/callback.php/Notify/sq_callback"; $data['amount'] = $request['price']; $data['appId'] = C('wei_xin.email'); $data['secret'] = C('sqpay.key'); $data['MerRemark'] = $data['order_no']; $ret = $sqpay->sq_wxsmallpay($data); if ($ret[0]['respCode'] == "000000") { echo json_encode(array( 'code' => 1, 'Amount' => $ret[0]['Amount'], 'orderNo' => $ret[0]['orderNo'], // 微信生成的订单号 'platformNumber' => $request['pay_order_number'], // 平台订单号 'wxjsapiStr' => $ret[0]['wxjsapiStr'] )); exit(); } echo json_encode(array( 'code' => 0, 'msg' => $ret[0]['respMess'], )); exit(); } }