<?php

//
//
//namespace loyalsoft;
//
///**
// * Description of YYBPay
// * @version
// *          1.0.0 Created at 2016-4-20. by --gwang
// * @author gwang (mail@wanggangzero.cn)
// * @copyright © 2016-4-20, SJZ LoyalSoft Corporation & gwang. All rights reserved.
// */
//class YYBPay {
////put your code here
//}
//
///**
// *  移动支付
// * @history
// *    1. m_pay m_AddUserCash ... 以 m_ 打头的函数是第一版, 完全按照应用宝官方要求托管游戏币的模式开发的.  * 2015年4月23日
// *    2. mn_pay mn_AddUserCash ... 以 mn_ 打头的函数是第二版, 修改为伪托管模式,除了充值的时候跟腾讯通讯,其余时间自己管理游戏币:钻石. * 2015年7月23日
// *    3. 第三版: 独立的游戏币<元宝>, 面向多渠道的充值模式, 拉起充值成功后, 给玩家发放元宝. 游戏内部消费元宝,钻石和金币.
// *       可以用元宝购买金币和钻石.这一版在上面的PayProc中 * 2015年9月23日
// *
// */
//class MobilePayProc {
//
//    /**
//     * Sql语句移动支付插入一条log日志。
//     * @var string
//     */
//    const SQL_M_LOG = "INSERT INTO `tab_mpaylog_%s` (zoneid,type,result,amt,balance,cash,giftedcash,chargedcash,source,oid,itemid) VALUES (%d,%d,%d,%d,%d,%d,%d,%d,'%s','%s','%s')";
//
//    /**
//     * 【移动端】查询账户游戏币余额(v3)
//     * @param Req $req
//     * @param string $source 来源
//     */
//    public static function v3_m_get_Balance($req, $source = "") {
//        if ($req->userInfo->isTest) {
//            return Resp::myRetResponse($req, $req->userInfo->game->user);
//        }
//        $resp = new Resp();
//        $sdkUser = $req->userInfo->sdkUserKey;
//        $user = $req->userInfo->game->user;
//// 客户端参数解析
//        $openid = $req->uid;  // openid
//        $zoneid = $req->zoneid;  // 分区Id
//        $openkey = $sdkUser->access_token;  // openkey|accesstoken
//        $pf = $sdkUser->pf;       // pf
//        $pfkey = $sdkUser->pf_key;    // pfkey
//        $paytoken = $sdkUser->pay_token;  // 手Q客户端获取，微信传空
//        $v3 = CV3Init();
//        $appid = V3_APPID;  # 支付模块，微信和手Q统一使用手Q的appid
//        $ts = now();
//        $v3PayRet = $v3->m_get_balance($sdkUser->platform, $openid, $openkey, $pf, $paytoken, $appid, $pfkey, $ts, $zoneid);
//        $v3->close();
//        $amt = 0;
//        if ($v3PayRet->ret != 0) { //v3其他错误
//            $resp = Resp::err($v3PayRet->ret);
//            $resp->result = $v3PayRet;
//        } else {
//            $amt = $v3PayRet->save_amt - $user->charge_amt;  # 本次充值金额
//            $user->cash = $v3PayRet->balance;
//            $user->charge_amt = $v3PayRet->save_amt;  # 历史
//
//            $user->gift_cash = $v3PayRet->gen_balance;  // 赠送的宝石数量
//            if ($amt > 0 # 充值金额大于0，且首付标志为false才可以   /* 其实腾讯有返 isfirstpay字段 */
//                    && isset($req->userInfo->game->privateState->firstPayGift)   # 无此字段代表已经领取礼包
//                    && !$req->userInfo->game->privateState->firstPayGift) {
//                $req->userInfo->game->privateState->firstPayGift = true;
//            }
////            self::m_FixUserCash($req);  # 修复(特定)用户钻石数据(端午节系统邮件失误)
//            UserProc::updateUserInfo($req); // 更新玩家数据信息
//
//            $resp = Resp::myRetResponse($req, $user); // 直接将$user的最新值返回给客户端
//        }
//        self::_mPayLog($zoneid, $openid, MLogType::Inquire, $v3PayRet->ret, #
//                $amt, $user->yuanbao, $user->cash, $user->gift_cash, $user->charge_amt, $source);
//        return $resp;
//    }
//
//    /**
//     * 【移动端】扣除游戏币购买道具(V3)
//     * @param Req $req
//     */
//    public static function v3_m_pay($req) {
//        $resp = new Resp();
//        $user = $req->userInfo->game->user; # user引用
//// 客户端参数解析
//        $openid = $req->uid;  // openid
//        $zoneid = $req->zoneid;   // 分区id
//        $openkey = $req->paras[0];  // openkey|accesstoken
//        $pf = $req->paras[1];       // pf
//        $pfkey = $req->paras[2];    // pfkey
//        $paytoken = $req->paras[3];  // 手Q客户端获取 微信传空
//        $itemId = $req->paras[4];  // 道具ID
//
//        $v3 = CV3Init();
//        $appid = V3_APPID;  # 支付模块，微信和手Q统一使用手Q的appid
//        $ts = now();
//        $itemModel = ConstProc::getGoodsItemConst($itemId);    // 取道具的常量数据
//        if ($itemModel == null) { //1.检测是否存在道具的常量数据
//            $resp = Resp::myErrResponse($req, ErrCode::err_const_no);
//        } else {
//            $prize = JsonUtil::decode($itemModel->prize); # 价格
//            if (property_exists($prize, "c") && $prize->c > 0) {// 钻石购买
//                $amt = self::_getItemCashPrize($itemModel); // 道具价格（钻石）
//                $remark = $itemModel->name;
//                if ($amt <= 0) {
//                    $resp = Resp::myErrResponse($req, ErrCode::pay_vipnewerno);
//                } else {
//                    if ($req->userInfo->isTest) {   # 测试用，直接模拟一个支付返回值
//                        $v3PayRet = json_decode(json_encode(array(
//                            'ret' => 0,
//                            'balance' => $user->cash -= $amt
//                        )));
//                    } else {
//                        $v3PayRet = $v3->m_pay($req->userInfo->sdkUserKey->platform, #
//                                $openid, $openkey, $pf, $paytoken, #
//                                $appid, $pfkey, $ts, $zoneid, $amt, $itemId, $remark);
//                    }
//                    $v3->close();
//                    if ($v3PayRet->ret == 1004) { // 余额不足
//                        $resp = Resp::myErrResponse($req, ErrCode::notenough_cash_msg);
//                    } elseif ($v3PayRet->ret != 0) { //v3其他错误
//                        $resp = Resp::myErrResponse($req, $v3PayRet->ret);
//                        $resp->result = $v3PayRet;
//                    } else { // 发货
//                        StoreProc::addSeprateItem($itemModel, $req); // 更新玩家游戏币余额
//                        UserModel::set_Cash($user, $v3PayRet->balance); // 更新玩家数据信息
//                        UserProc::updateUserInfo($req); // 直接将$user的最新值返回给客户端
//                        $resp = Resp::myRetResponse($req, $user);
//                    }
//                    $source = "商城购买-" . $itemModel->name;
//                    self::_mPayLog($req->zoneid, $req->uid, MLogType::Shop, $resp->err, #
//                            $amt, $user->yuanbao, $user->cash, $user->gift_cash, $user->charge_amt, $source, $itemId);
//                }
//            }// 金币购买
//            else if (CommUtil::isPropertyExists($prize, "g") && $prize->g > 0) {
//                if ($req->userInfo->game->user->gold < $prize->g) {
//                    $resp = Resp::myErrResponse($req, ErrCode::notenough_gold_msg);
//                } else {// 发货
//                    StoreProc::addSeprateItem($itemModel, $req); // 更新玩家金币余额
//                    UserModel::Comsume_Gold($user, $prize->g); // 更新玩家数据信息
//                    UserProc::updateUserInfo($req); // 直接将$user的最新值返回给客户端
//                    $resp = Resp::myRetResponse($req, $user);
//                }
//            }// 除了金币和钻石以外还有荣誉点。
//            else if (CommUtil::isPropertyExists($prize, "h") && $prize->h > 0) {
//                if ($user->honour < $prize->h) {
//                    $resp = Resp::myErrResponse($req, ErrCode::notenough_honour);
//                } else {// 发货
//                    StoreProc::addSeprateItem($itemModel, $req); // 更新玩家荣誉值余额
//                    $user->honour -= $prize->h; // 更新玩家数据信息
//                    UserProc::updateUserInfo($req); // 直接将$user的最新值返回给客户端
//                    $resp = Resp::myRetResponse($req, $user);
//                }
//            }
//        }
//        return $resp;
//    }
//
//    /**
//     * 领取首付礼包
//     * @param Req $req
//     * @return Resp
//     */
//    public static function m_GetFirstPayGift($req) {
//        $resp = new Resp();
//        $privateState = $req->userInfo->game->privateState;
//# 客户端参数解析
//        $itemId = glc()->FirstPay_ItemId;
////  如果已经领取首付礼包
//        if (!CommUtil::isPropertyExists($privateState, "firstPayGift")) {
//            $resp = Resp::myErrResponse($req, ErrCode::pay_firstpaygetted);
//        } elseif ($req->userInfo->game->user->charge_amt <= 0) { //  如果尚未完成首付
//            $resp = Resp::myErrResponse($req, ErrCode::pay_firstpayno_err);
//        } else {
//            $itemModel = ConstProc::getGoodsItemConst($itemId);  # 取物品常量
//            if ($itemModel == null) {//  检测首付礼包是否存在
//                $resp = Resp::myErrResponse($req, ErrCode::err_const_no);
//            } else {
//                unset($privateState->firstPayGift); # .剔除首付标志
//                StoreProc::addSeprateItem($itemModel, $req); #  .发放首付礼包
//                $result = array(# 把玩家最新的仓库数据发给客户端
//                    'itemid' => $itemId
//                );
//// 7.回送成功信息
//                $resp = Resp::myRetResponse($req, $result);
//// 成就触发--获取金币
//                AchievementProc::dealAchievementState($req, $resp, AchievementProc::Gold);
//                UserProc::updateUserInfo($req); # 更新玩家数据
//            }
//        }
//        return $resp;
//    }
//
////-----------   以下是辅助方法     -------------
//
//    /**
//     * 【移动端】调用V3函数给玩家账号直接增加(赠送)游戏币（钻石），
//     *   赠送的游戏币不参与分成结算，若是造成收入损失，自负。
//     * @param Req $req Description
//     * @param type $amt 数量
//     * @param string $source 来源
//     */
//    public static function v3_m_AddUserCash($req, $amt, $source = "") {
//        $err = ErrCode::ok;
//        if ($req->userInfo->isTest) {  // 跳过支付api
//            $req->userInfo->game->user->cash += $amt;
//            return $err;
//        }
//        if ($amt > 0) {// 防御，若是给出错误数值直接返回
//            $user = $req->userInfo->game->user;
//            $sdkUser = $req->userInfo->sdkUserKey;
//// 参数准备
//            $zoneid = $req->zoneid; # 分区Id
//            $openid = $sdkUser->open_id;
//            $openkey = $sdkUser->access_token;
//            $pf = $sdkUser->pf;
//            $paytoken = $sdkUser->pay_token;
//            $pfkey = $sdkUser->pf_key;
//
//            $ts = now();
//            $v3 = CV3Init();
//            $appid = V3_APPID;  // 微信和QQ统一使用手Q的appId
//            $v3PayRet = $v3->m_present($sdkUser->platform, $openid, $openkey, $pf, # 调用后台接口
//                    $paytoken, $appid, $pfkey, #
//                    $ts, $zoneid, PAY_PRESENTCASH_ACTID, PAY_PRESENTCSAH_GIFTID, $amt);
//            $v3->close();
//            if ($v3PayRet->ret != ErrCode::ok) { //v3其他错误
//                $err = $v3PayRet->ret;
//            } else {
//                self::$m_billno = $v3PayRet->billno;  // 账单号，扣费后其他逻辑失败的话，调用取消扣费接口
//// 更新玩家游戏币余额, 老版本的文档中有balance字段，新的没有说明
//                if (isset($v3PayRet->balance)) {
//                    UserModel::set_Cash($user, $v3PayRet->balance);
//                } else {
//                    UserModel::set_Cash($user, $user->cash + $amt);
//                }
//# 日志
//                self::_mPayLog($req->zoneid, $req->uid, MLogType::Present, $err, #
//                        $amt, $user->yuanbao, $user->cash, $user->gift_cash, $user->charge_amt, $source);
//            }
//        }
//        return $err;
//    }
//
//    /**
//     * 【移动端】扣除玩家游戏币(V3)（Ps.发货逻辑最后执行此步骤）
//     * @param Req $req Description
//     * @param int $amt 扣除数量
//     * @param string $source  (string)备注,扣除来源（模块）
//     * @param string $itemid (option)相关物品id
//     * @return int ErrCode
//     */
//    public static function v3_m_SaveUserCash($req, $amt, $source = "", $itemid = "0") {
//        if ($req->userInfo->isTest) {  # 跳过腾讯api（子豪）
//            $req->userInfo->game->user->cash -= $amt;
//            return ErrCode::ok;
//        }
//        if ($amt <= 0) {  // 防御，数量不可能小于0
//            return ErrCode::ok;
//        }
//
//        $user = $req->userInfo->game->user;
//        $sdkUser = $req->userInfo->sdkUserKey;
//
//        $v3 = CV3Init();
//        $appid = V3_APPID;  # 支付模块，微信和手Q统一使用手Q的appid
//        $ts = now();
//        $zoneid = $req->zoneid;  // 分区Id
//// 调用腾讯api
//        $v3PayRet = $v3->m_pay($sdkUser->platform, $sdkUser->open_id, $sdkUser->access_token, $sdkUser->pf, //
//                $sdkUser->pay_token, $appid, $sdkUser->pf_key, $ts, $zoneid, //
//                $amt, $itemid, $source);
//        $v3->close(); // 关闭
//
//        $err = ErrCode::ok;
//        if ($v3PayRet->ret == 1004) { // 余额不足
//            $err = ErrCode::notenough_cash_msg;
//        } elseif ($v3PayRet->ret != 0) { //v3其他错误
//            $err = $v3PayRet->ret;
//        } else {
//            self::$m_billno = $v3PayRet->billno;  // 账单号，扣费后其他逻辑失败的话，调用取消扣费接口
//// 更新玩家游戏币余额, 老版本的文档中有balance字段，新的没有说明
//            if (property_exists($v3PayRet, "balance")) {
//                UserModel::set_Cash($user, $v3PayRet->balance);
//            } else {
//                UserModel::set_Cash($user, $user->cash - $amt);
//            }
//            $err = ErrCode::ok;
//        }
//        self::_mPayLog($zoneid, $req->uid, MLogType::Save, $err, #
//                $amt, $user->yuanbao, $user->cash, $user->gift_cash, $user->charge_amt, $source);
//        return $err;
//    }
//
//    /**
//     * 缓存一个账单号，如果代码执行过程中出现错误，直接取消扣除游戏币
//     * 注意，若是逻辑不是在一次Request内完成的，那么次订单号需要进行存储
//     * @var string
//     */
//    static $m_billno;
//
//    /**
//     * 【移动端】取消扣除玩家游戏币(V3)
//     * @param Req $req
//     * @param UserModel $user
//     * @param CstSDK_UserModel $sdkUser
//     * @param int $amt
//     * @return int
//     */
//    public static function v3_m_CancelConsumCash($req, $amt) {
//        if ($req->userInfo->isTest) {  // 跳过腾讯api
//            $user->cash += $amt;
//            return ErrCode::ok;
//        }
//        $user = $req->userInfo->game->user;
//        $sdkUser = $req->userInfo->sdkUserKey;
//        $appid = V3_APPID;  # 支付模块，微信和手Q统一使用手Q的appid
//        $ts = now();
//        $zoneid = $req->zoneid;  # 分区Id
//        $v3 = CV3Init();
//        $v3PayRet = $v3->m_cancel_pay($sdkUser->platform, $sdkUser->open_id, $sdkUser->access_token, #
//                $sdkUser->pf, $sdkUser->pay_token, $appid, $sdkUser->pf_key, $ts, //
//                $zoneid, $amt, self::$m_billno);
//        $v3->close(); // 关闭
//        if ($v3PayRet->ret != 0) { //v3其他错误
//            return $v3PayRet->ret;
//        } else {
//// 更新玩家游戏币余额, 老版本的文档中有balance字段，新的没有说明
//            if (property_exists($v3PayRet, "balance")) {
//                UserModel::set_Cash($user, $v3PayRet->balance);
//            } else {
//                UserModel::set_Cash($user, $user->cash + $amt);
//            }
//            return ErrCode::ok;
//        }
//    }
//
//    /**
//     * 取物品的价格（钻石）
//     * @param GoodsItemModel $itemModel
//     */
//    private static function _getItemCashPrize($itemModel) {
//        $c = 0;
//        $prize = JsonUtil::decode($itemModel->prize);
//        if (CommUtil::isPropertyExists($prize, "c")) {
//            $c = $prize->c;
//        }
//        return $c;
//    }
//
//    /**
//     * 插入一条记录
//     * @param int $zoneid
//     * @param string $oid
//     * @param int $type
//     * @param int $amt
//     * @param int $balance
//     * @param int $cash 钻石
//     * @param int $giftedcash
//     * @param int $chargedcash
//     * @param int $source
//     */
//    public static function _mPayLog($zoneid, $oid, $type, $result, $amt, $balance, $cash, $giftedcash, $chargedcash, $source = "srcUnKnown", $itemid = "") {
////        var_dump(func_get_args());
////        CLogUtil::print_stack_trace();
//        $month = date("Ym");
//        $sql = sprintf(self::SQL_M_LOG, $month, $zoneid, $type, $result, $amt, $balance, $cash, $giftedcash, $chargedcash, $source, $oid, $itemid);
//        $paydb = CPayInit();
//        $paydb->query($sql);
//        $paydb->close();
//    }
//
//// ----------------new pay proc -------------------------
////  腾讯支付修改版,不再让钻石存储在腾讯端
//
//    /**
//     * 【移动端】取消扣除玩家游戏币,无v3调用
//     * @param Req $req
//     * @param UserModel $user
//     * @param CstSDK_UserModel $sdkUser
//     * @param int $amt
//     * @return int
//     */
//    public static function mn_CancelConsumCash($req, $amt) {
//        $err = ErrCode::ok;
//        $user = $req->userInfo->game->user;
//        $zoneid = $req->zoneid;  # 分区Id
//        if ($amt > 0) { // 更新玩家游戏币余额, 老版本的文档中有balance字段，新的没有说明
//            UserModel::set_Cash($user, $user->cash + $amt);
//# 记录日志
//            self::_mPayLog($zoneid, $user->oId, MLogType::Present, $err, $amt, $user->yuanbao, #
//                    $user->cash, $user->gift_cash, $user->charge_amt, "<取消订单>" . self::$m_billno);
//        }
//        return $err;
//    }
//
//    /**
//     * 【移动端】扣除玩家游戏币,无V3调用（Ps.发货逻辑最后执行此步骤）
//     * @param Req $req Description
//     * @param int $amt 扣除数量
//     * @param string $source  (string)备注,扣除来源（模块）
//     * @param string $itemid (option)相关物品id
//     * @return int ErrCode
//     */
//    public static function mn_SaveUserCash($req, $amt, $source = "", $itemid = "0") {
//        $err = ErrCode::ok;
//        if ($amt > 0) {  // 防御，数量不可能小于0
//            $user = $req->userInfo->game->user;
//            $zoneid = $req->zoneid;  // 分区Id
//            if ($user->cash < $amt) { // 余额不足
//                $err = ErrCode::notenough_cash_msg;
//            } else {// 更新玩家游戏币余额
//                UserModel::set_Cash($user, $user->cash - $amt);
//                self::$m_billno = date("Y-m-d H:i:is");
//            }
//            self::_mPayLog($zoneid, $req->uid, MLogType::Save, $err, #
//                    $amt, $user->yuanbao, $user->cash, $user->gift_cash, $user->charge_amt, $source);
//        }
//        return $err;
//    }
//
//    /**
//     * 【移动端】给玩家账号直接增加(赠送)游戏币（钻石）(无V3)，
//     *   赠送的游戏币不参与分成结算，若是造成收入损失，自负。
//     * @param Req $req Description
//     * @param type $amt 数量
//     */
//    public static function mn_AddUserCash($req, $amt, $source = "") {
//        $err = ErrCode::ok;
//        if ($amt > 0) {// 防御，若是给出错误数值直接返回
//            $user = $req->userInfo->game->user;
//            UserModel::set_Cash($user, $user->cash + $amt);
//            if ($user->cash < 0) {
//                # 输出日志-wqq
//            }
//# 记录日志
//            self::_mPayLog($req->zoneid, $req->uid, MLogType::Present, $err, #
//                    $amt, $user->yuanbao, $user->cash, $user->gift_cash, $user->charge_amt, $source);
//        }
//        return ErrCode::ok;
//    }
//
////    /**
////     * 【移动端】扣除游戏币购买道具
////     * @param RequestVo $req
////     */
////    static function mn_pay($req) {
////        $resp = new ResponseVo();
////        $user = $req->userInfo->user; # user引用
////// 客户端参数解析
////        $itemId = $req->paras[4];  // 道具ID
////
////        $itemModel = ConstProc::getItemConst($req->mem, $itemId);    // 取道具的常量数据
////        if ($itemModel == null) { //1.检测是否存在道具的常量数据
////            $resp = ResponseVo::myErrResponse($req, ErrCode::err_msg_itemnoconst);
////        } else {
////            $prize = JsonUtil::decode($itemModel->prize); # 价格
////            if (property_exists($prize, "c") && $prize->c > 0) {// 钻石购买
////                $amt = self::_getItemCashPrize($itemModel); // 道具价格（钻石）
////                if ($amt <= 0) {
////                    $resp = ResponseVo::myErrResponse($req, ErrCode::err_pay_vipnewerno);
////                } else {
////                    if ($user->cash < $amt) { // 余额不足
////                        $resp = ResponseVo::myErrResponse($req, ErrCode::err_msg_cashnotenough);
////                    } else { // 发货
////                        StoreProc::addSeprateItem($itemModel, $req); // 更新玩家游戏币余额
////                        UserModel::set_Cash($user, $user->cash - $amt); // 更新玩家数据信息
////                        UserProc::updateUserInfo($req); // 直接将$user的最新值返回给客户端
////                        $resp = ResponseVo::myRetResponse($req, $user);
////# 记录日志
////                        $source = "商城购买-" . $itemModel->name;
////                        self::_mPayLog($req->zoneid, $req->oid, MLogType::Shop, $resp->err, #
////                                $amt, $user->yuanbao, $user->cash, $user->gift_cash, $user->charge_amt, $source, $itemId);
////                    }
////                }
////            }// 金币购买
////            else if (CommUtil::isPropertyExists($prize, "g") && $prize->g > 0) {
////                if ($req->userInfo->user->gold < $prize->g) {
////                    $resp = ResponseVo::myErrResponse($req, ErrCode::err_msg_goldnotenough);
////                } else {// 发货
////                    StoreProc::addSeprateItem($itemModel, $req); // 更新玩家金币余额
////                    UserModel::Comsume_Gold($user, $prize->g); // 更新玩家数据信息
////                    UserProc::updateUserInfo($req); // 直接将$user的最新值返回给客户端
////                    $resp = ResponseVo::myRetResponse($req, $user);
////                }
////            }// 除了金币和钻石以外还有荣誉点。
////            else if (CommUtil::isPropertyExists($prize, "h") && $prize->h > 0) {
////                if ($user->honour < $prize->h) {
////                    $resp = ResponseVo::myErrResponse($req, ErrCode::err_msg_honournotenough);
////                } else {// 发货
////                    StoreProc::addSeprateItem($itemModel, $req); // 更新玩家荣誉值余额
////                    $user->honour-=$prize->h; // 更新玩家数据信息
////                    UserProc::updateUserInfo($req); // 直接将$user的最新值返回给客户端
////                    $resp = ResponseVo::myRetResponse($req, $user);
////                }
////            }
////        }
////        return $resp;
////    }
////
////    /**
////     * 【移动端】查询账户游戏币余额
////     * @history
////     *      2015-7-6 改动思路, 不直接拿api返回值中的balance更新玩家的钻石余额,
////     *               采用计算相对值的方法计算距离上次更新,玩家是否有新的充值,
////     *               $amt>0,则代表有新的充值,将$amt更新到玩家账户.
////     * @param RequestVo $req
////     * @param string $source 来源
////     */
////    static function mn_get_Balance($req, $source = "") {
////        if ($req->userInfo->isTest) {
////            return ResponseVo::myRetResponse($req, $req->userInfo->user);
////        }
////        $resp = new ResponseVo();
////        $sdkUser = $req->userInfo->sdkUserKey;
////        $user = $req->userInfo->user;
////// 客户端参数解析
////        $openid = $req->oid;  // openid
////        $zoneid = $req->zoneid;  // 分区Id
////        $openkey = $sdkUser->access_token;  // openkey|accesstoken
////        $pf = $sdkUser->pf;       // pf
////        $pfkey = $sdkUser->pf_key;    // pfkey
////        $paytoken = $sdkUser->pay_token;  // 手Q客户端获取，微信传空
////        $v3 = CV3Init();
////        $appid = V3_APPID;  # 支付模块，微信和手Q统一使用手Q的appid
////        $ts = TimeUtil::tsCurrent();
////        $v3PayRet = $v3->m_get_balance($sdkUser->platform, $openid, $openkey, $pf, $paytoken, $appid, $pfkey, $ts, $zoneid);
////        $v3->close();
////        $amt = 0;
////        if ($v3PayRet->ret != 0) { //v3其他错误
////            $resp = ResponseVo::errResponse($req->oid, $req->msgid, $v3PayRet->ret);
////            $resp->result = $v3PayRet;
////        } else {
////            $amt = $v3PayRet->save_amt - $user->charge_amt;  # 本次充值金额 = v3提供的历史充值金额 - 玩家记录的历史充值金额
////            if ($amt > 0) {
////                $user->cash +=$amt;  # $v3PayRet->balance;
////                $user->charge_amt = $v3PayRet->save_amt;  # 更新历史充值金额
////                $user->gift_cash = $v3PayRet->gen_balance;  // 赠送的宝石数量
////                if (isset($req->userInfo->game->privateState->firstPayGift)   # 无此字段代表已经领取礼包
////                        && !$req->userInfo->game->privateState->firstPayGift) {
////                    $req->userInfo->game->privateState->firstPayGift = true;
////                }
////            }
//////            self::m_FixUserCash($req);  # 修复(特定)用户钻石数据(端午节系统邮件失误)
////            UserProc::updateUserInfo($req); // 更新玩家数据信息
////            $resp = ResponseVo::myRetResponse($req, $user); // 直接将$user的最新值返回给客户端
////        }
////        self::_mPayLog($zoneid, $openid, MLogType::Inquire, $v3PayRet->ret, #
////                $amt, $user->yuanbao, $user->cash, $user->gift_cash, $user->charge_amt, $source);
////        return $resp;
////    }
//}
