Example #1
0
 public function charge($order_no, $isRecharge = false)
 {
     $order_status = 0;
     //默认状态
     if ($isRecharge) {
         $order_status = 2;
         //钱已到帐未到游戏方
     }
     $order_rs = $this->loadModel('payment_model')->getOne('*', array('order_no' => $order_no, 'status' => $order_status));
     if (empty($order_rs) === TRUE) {
         return true;
     }
     $game_id = $order_rs['game_id'];
     $server_id = $order_rs['server_id'];
     $accid = $order_rs['user_id'];
     $accname = $order_rs['user_name'];
     //获取用户name
     $game_rs = $this->loadModel('game_manager')->getOne('*', array('gid' => $game_id));
     //获取游戏信息
     $server_rs = $this->loadModel('server_manager')->getOne('*', array('gsid' => $server_id));
     //获取服务器信息
     $tstamp = time();
     if (!$accname) {
         return false;
     }
     //---------向游戏充值-----------
     $url = str_replace("{n}", $server_rs['number'], $game_rs['payurl']);
     //支付接口地址
     //测试URL
     if ($accname == "wow_002") {
         //测试账号 走测试服务器
         $url = 'http://122.224.103.244:8080';
     }
     header("Content-Type: text/html; charset=utf-8");
     $url = rtrim($url, "/") . "/War/webservice/PayWS?wsdl";
     try {
         $client = new SoapClient($url);
     } catch (Exception $e) {
         if ($accname == "wow_001") {
             echo "<pre>";
             print_r($e);
         } else {
             return false;
         }
     }
     $money = floor($order_rs['to_game_amount']);
     //充值金额
     $key1 = 'MXeTp9PEFeJylLhcXNCh';
     //TODO: 正Key1 和key2
     $key2 = '2wncx19yN6LKAPw2zlMD';
     if ($accname == "wow_002") {
         //测试账号 走测试服务器
         //			测试充值key1
         $key1 = 'QWERTYUIOPASDFGHJKLM';
         //			充值
         $key2 = '2wncx19yN6LKAPw2zlMD';
     }
     $str = $accid . $money . $key1 . $key2;
     $str = strtoupper(md5($str));
     if (!$isRecharge) {
         //非补单时将状态改为2
         //更新充值状态
         $this->loadModel('payment_model')->update(array('status' => 2), array('order_no' => $order_no));
     }
     //验证用户是否存在
     $exists = $client->isPlayerExisted(array('arg0' => (string) $accid));
     if (!$exists->return) {
         return false;
     }
     //充值请求
     $rs = $client->addPlayerMoney(array('arg0' => (string) $accid, 'arg1' => intval($money), 'arg2' => $order_no, 'arg3' => $str));
     if ($isRecharge) {
         var_dump($rs->return);
     }
     //--------------------------------
     //记录与游戏方的log
     $payment_log = array('channel_id' => '', 'user_id' => $accid, 'order_no' => $order_no, 'pay_time' => time(), 'url' => $url, 'game_info' => $rs->return . "-" . $money);
     $this->loadModel('game_return_model')->insert($payment_log);
     if ($rs->return) {
         $data = array('status' => 3, 'asynch_time' => date('Y-m-d H:i:s'), 'is_game_account' => 1);
         //更新数据库
         $this->loadModel('payment_model')->update($data, array('order_no' => $order_no));
         $this->loadModel('message')->payMsg($order_no);
         return true;
     } else {
         return false;
     }
 }