<?php

//
//namespace loyalsoft;
//
///**
// * Qzone页游支付处理代码
// */
//class WebPayProc {
//
//    const PAY_BILL_SELECT = "SELECT * FROM `tab_billrecord` where `openid`='%s' and `state`='0' order by id;"; // 筛选尚未确认支付的订单
//    const PAY_BILL_DELETE = "DELETE FROM `tab_billrecord` where id = '%d';";                                   // 删除未确认的支付订单
//    const PAY_BILL_CONFIRM = "INSERT INTO `tab_billconfirm` (`openid`,`billno`,`amt`,`payitem`,`token`,`state`,`msg`) VALUES ('%s','%s','%d','%s','%s','1','OK');"; // 变更订单确认支付状态字
//    const PAY_BILL_LOST = "INSERT INTO `tab_billconfirm` (`openid`,`billno`,`amt`,`payitem`,`token`,`state`,`msg`) VALUES ('%s','%s','%d','%s','%s','-1','%s');"; // 变更订单支付丢失状态字
//    const PAY_LOG_INSERT = "INSERT INTO `tab_paylog` (`msg`) VALUES ('%s');";                                   // 新增支付日志
//
//    /**
//     * 【PC端】购买付费道具
//     * @param Req $req
//     * @return type
//     */
//
//    public static function buyGoods($req) {
//        $resp = new Resp();
//        $mem = $req->mem;
//        $v3 = CV3Init();
//        $private = $req->userInfo->game->privateState;
////客户端参数解析
//        $openid = $req->uid;
//        $zoneid = $req->zoneid;
//        $openkey = $req->paras[0];
//        $pf = $req->paras[1];
//        $pfkey = $req->paras[2];
//        $itemPriceYuan = $req->paras[3];
//
//        //ID=Q点价格=元宝价格
//        $itemPriceDot = $itemPriceYuan * 10;
//        $itemID = $itemPriceDot;
//        $itemPrice = $itemPriceDot;
//        $itemName = $itemPriceDot . '元宝';
//        $itemDes = $itemName;
//
//        $ts = now();
//        $goodsurl = self::_getGoodsImgUrl($itemModel);
//        $v3PayRet = $v3->pay_buy_goods($openid, $openkey, $pf, $pfkey, #
//                $ts, $itemID, $itemPrice, $itemName, $itemDes, $goodsurl, $zoneid - 1);
//        if ($v3PayRet->ret == 1002) { //假如玩家未登录
//            $resp = Resp::err(ErrCode::user_login_err);
//        } elseif ($v3PayRet->ret != 0) { //
//            $resp = Resp::err($v3PayRet->ret);
//            $resp->result = $v3PayRet;
//        } else {
//            $tokenInfo = self::getTokenInfo($mem, $zoneid, $openid);
//            if ($tokenInfo == null) {
//                $resp = Resp::err(ErrCode::user_no_err);
//            } else {
//                self::insToken($tokenInfo, $v3PayRet->token);
//                self::updateTokenInfo($mem, $zoneid, $openid, $tokenInfo);
//                $resp = Resp::ok($v3PayRet);
//            }
//        }
//        $v3->close();
//        return $resp;
//    }
//
//    /**
//     * 客户端确认支付
//     * @param type $req
//     * @return \ResponseVo
//     */
//    public static function confirmDelivery($req) {
//        $resp = new Resp();
//        $v3 = CV3Init();
//        self::confirmPay($req, $v3);
//        $resp = Resp::ok("succeed!");
//        $v3->close();
//        return $resp;
//    }
//
//    /**
//     * 领取首付礼包
//     * @param Req $req
//     * @return Resp
//     */
//    public static function getFirstPayGift($req) {
//        $resp = new Resp();
//        $map = $req->userInfo->game->map;
//        $privateState = $req->userInfo->game->privateState;
//
////  如果已经领取首付礼包
//        if (!CommUtil::isPropertyExists($privateState, "firstPayGift")) {
//            $resp = Resp::err(ErrCode::pay_firstpaygetted);
//        } elseif (!$privateState->firstPayGift) { //  如果尚未完成首付
//            $resp = Resp::err(ErrCode::pay_firstpayno_err);
//        } else {
//            $itemModel = ConstProc::getGoodsItemConst(ITEM_FIRSTPAY);
////  检测首付礼包是否存在
//            if ($itemModel == null) {
//                $resp = Resp::err(ErrCode::err_const_no);
//            } else {
//                unset($privateState->firstPayGift); # .剔除首付标志
//                StoreProc::addSeprateItem($itemModel, $req); #  .发放首付礼包
//                $result = array(# 把玩家最新的仓库数据发给客户端
//                    'store' => $map->store,
//                );
//// 7.回送成功信息
//                $resp = Resp::ok($result);
//// 成就触发--获取金币
//                AchievementProc::dealAchievementState($req, $resp, AchievementProc::Gold);
//                UserProc::updateUserInfo($req); # 更新玩家数据
//            }
//        }
//
//        return $resp;
//    }
//
//    /**
//     * 获取黄钻新手礼包
//     * @param Req $req
//     * @return type
//     */
//    public static function getVipNewerGift($req) {
//        $user = $req->userInfo->game->user;
//        $map = $req->userInfo->game->map;
//        $privateState = $req->userInfo->game->privateState;
////客户端参数解析
//        $itemId = ITEM_VIPNEWER;  # 新手礼包是个常量
//        $item = ConstProc::getGoodsItemConst($itemId);
//
//        $isYellowYear = $user->is_yellow_year_vip;
//        $itemYear = null;
//        if ($isYellowYear) {
//            $itemIdYear = ITEM_YEARVIPNEWER;
//            $itemYear = ConstProc::getGoodsItemConst($itemIdYear);
//            if ($itemYear == null) {
//                $resp = Resp::err(ErrCode::err_const_no);
//                return;
//            }
//        }
////1.检测是否存在道具的常量数据
//        if ($item == null) {
//            $resp = Resp::err(ErrCode::err_const_no);
//        } else {//2.检测是否可以领取黄钻新手礼包
//            if (!WebPayProc::tryVipNewerGift($user, $privateState)) {
//                $resp = Resp::err(ErrCode::pay_vipnewerno);
//            } else {
//                StoreProc::addSeprateItem($item, $req);
//                if ($itemYear) {
//                    StoreProc::addSeprateItem($itemYear, $req);
//                }
//                $result = array(
//                    'store' => $map->store,
//                );
//                $resp = Resp::ok($result); # 返回值
////成就触发--获取金币
//                AchievementProc::dealAchievementState($req, $resp, AchievementProc::Gold);
//                UserProc::updateUserInfo($req); # 回写数据
//            }
//        }
//        return $resp;
//    }
//
//    /**
//     * 开通包月送礼包
//     * @param Req $req
//     */
//    public static function getVipOpenGift($req) {
//        $mem = $req->mem;
//        $v3 = CV3Init();
////客户端参数解析
//        $openid = $req->uid;
//        $openkey = $req->paras[0];
//        $pf = $req->paras[1];
//        $pfkey = $req->paras[2];
//
//        $ts = now();
//        $v3Ret = $v3->pay_gift_get_token($openid, $openkey, $pf, $pfkey, "1", ACT_VIP_OPEN, $ts);
//        if ($v3Ret->ret == 1001) {
//            $resp = Resp::err($v3Ret->ret);
//            $resp->result = $v3Ret->msg;
//        } elseif ($v3Ret->ret == 1099) {
//            $resp = Resp::err(ErrCode::pay_systembusy_err);
//            $resp->result = $v3Ret->msg;
//        } elseif ($v3Ret->ret != 0) {
//            $resp = Resp::err(ErrCode::pay_systembusy_err);
//            $resp->result = $v3Ret;
//        } else {  //v3成功返回
//            $tokenInfo = WebPayProc::getTokenInfo($mem, $req->zoneid, $openid);
//            if ($tokenInfo == null) {
//                $resp = Resp::err(ErrCode::user_no_err);
//            } else {
//                WebPayProc::insToken($tokenInfo, $v3Ret->token);
//                WebPayProc::updateTokenInfo($mem, $req->zoneid, $openid, $tokenInfo);
//// 开通包月送礼包活动号，腾讯分配
//                $v3Ret->actid = ACT_VIP_OPEN;  // 将actid插入返回值中一块儿发送给客户端
//                $v3Ret->zoneid = 0;            // fusionAPI 需要
//                $resp = Resp::ok($v3Ret);
//            }
//        }
//        $v3->close();
//        return $resp;
//    }
//
//    /**
//     * 领取黄钻每日礼包
//     * @param Req $req
//     */
//    public static function getVipDayGift($req) {
//        $mem = $req->mem;
//        $zoneid = $req->zoneid;
//        $v3 = CV3Init();
//        $user = $req->userInfo->game->user;
////客户端参数解析
//        $openid = $req->uid;
//        $openkey = $req->paras[0];
//        $pf = $req->paras[1];
//        $pfkey = $req->paras[2];
//
//        $ts = now();
//        CLog::giftlog("getVipDayGift $zoneid|$openid|$openkey|$pf");
//        $v3Ret = $v3->pay_gift_get_token($openid, $openkey, $pf, $pfkey, "1", ACT_VIP_DAY, $ts, $zoneid - 1);
//        if ($v3Ret->ret == 1001) {
//            $resp = Resp::err($v3Ret->ret);
//            $resp->result = $v3Ret->msg;
//        } elseif ($v3Ret->ret == 1099) {
//            $resp = Resp::err(ErrCode::pay_systembusy_err);
//            $resp->result = $v3Ret->msg;
//        } elseif ($v3Ret->ret != 0) {
//            $resp = Resp::err(ErrCode::pay_systembusy_err);
//            $resp->result = $v3Ret;
//        } else {  //v3成功返回
//            $tokenInfo = WebPayProc::getTokenInfo($mem, $zoneid, $openid);
//            if ($tokenInfo == null) {
//                $resp = Resp::err(ErrCode::user_no_err);
//            } else {
//                WebPayProc::insToken($tokenInfo, $v3Ret->token);
//                if ($user->is_yellow_vip) {
//                    WebPayProc::insToken($tokenInfo, $v3Ret->token . "-year");
//                }
//                WebPayProc::updateTokenInfo($mem, $zoneid, $openid, $tokenInfo);
//                $v3Ret->actid = ACT_VIP_DAY;  //将actid 插入返回值中一块儿发送给客户端
//                $resp = Resp::ok($v3Ret);
//            }
//        }
//        $v3->close();
//        return $resp;
//    }
//
////  ----------------  --------------------
//    /**
//     * 领取黄钻升级礼包
//     * @param type $user
//     */
//    public static function getVipLvGift($mem, & $user, &$map) {
//        
//    }
//
//    /**
//     * 获取玩家token校验表
//     * @param type $mem
//     * @param int $zoneid
//     * @param type $uid
//     * @return type
//     */
//    public static function getTokenInfo($mem, $zoneid, $uid) {
//        return $mem->get(MemKey_User::TokenInfo($zoneid, $uid));
//    }
//
//    /**
//     * 更新玩家token校验表
//     * @param type $mem
//     * @param int $zoneid
//     * @param type $uid
//     * @param type $tokenInfo
//     */
//    public static function updateTokenInfo($mem, $zoneid, $uid, $tokenInfo) {
//        $mem->set(MemKey_User::TokenInfo($zoneid, $uid), $tokenInfo);
//    }
//
//    /**
//     * 新增token
//     * @param type $mem
//     * @param type $oid
//     * @param type $token
//     */
//    public static function insToken(& $tokenInfo, $token) {
//        $tokenInfo->$token = now();
//    }
//
//    /**
//     * 读取token
//     * @param type $mem
//     * @param type $oid
//     * @param type $token
//     * @return null
//     */
//    public static function getToken($tokenInfo, $token) {
//        if (!CommUtil::isPropertyExists($tokenInfo, $token)) {
//            return null;
//        } else {
//            return $tokenInfo->$token;
//        }
//    }
//
//    /**
//     * 删除token
//     * @param type $mem
//     * @param type $oid
//     * @param type $token
//     */
//    public static function delToken(& $tokenInfo, $token) {
//        if (CommUtil::isPropertyExists($tokenInfo, $token)) {
//            unset($tokenInfo->$token);
//        }
//    }
//
//    /**
//     * 添加付费道具到挂起列表
//     * @param CMemBase $mem
//     * @param int $zoneid
//     * @param string $uid
//     * @param type $itemId
//     */
//    public static function addPayStoreItem($mem, $zoneid, $uid, $itemId) {
//        $payStore = $mem->get(MemKey_User::PayOrders($zoneid, $uid));
//        if ($payStore == null) {
//            $payStore = ArrayInit();
//        }
//        $payStore[] = $itemId;
//        $mem->set(MemKey_User::PayOrders($zoneid, $uid), $payStore);
//    }
//
//    /**
//     * 添加营销礼包到挂起列表
//     * @param CMemBase $mem
//     * @param int $zoneid
//     * @param string $uid
//     * @param type $itemId
//     */
//    public static function addGiftStoreItem($mem, $zoneid, $uid, $itemId) {
//        $giftStore = $mem->get(MemKey_User::GiftStore($zoneid, $uid));
//        CLog::pay("WebGift addGiftStoreItem1 giftStore:$giftStore|itemId:$itemId|oid:$uid");
//        if ($giftStore == null) {
//            $giftStore = ArrayInit();
//        }
//        $giftStore[] = $itemId;
//        CLog::pay("WebGift addGiftStoreItem1 giftStore:$giftStore|itemId:$itemId|oid:$uid");
//        $mem->set(MemKey_User::GiftStore($zoneid, $uid), $giftStore);
//    }
//
//    /**
//     * 刷新挂起列表中的付费道具到仓库
//     * @param Req $req
//     */
//    public static function refreshPayStoreItem($req) {
//        $mem = $req->mem;
//        $oid = $req->uid;
//        $privateState = $req->userInfo->game->privateState;
//
//        $payGodpetItems = ArrayInit();
//        $payStore = $mem->get(MemKey_User::PayOrders($req->zoneid, $oid));
//        if ($payStore != null) {
//            foreach ($payStore as $payItemId) {
//                $itemModel = ConstProc::getGoodsItemConst($payItemId);
//                if ($itemModel != null) {
//                    $payGodpetItems[] = $payItemId;
//                    if (CommUtil::isPropertyExists($privateState, "firstPayGift") //
//                            && !$privateState->firstPayGift) {
//                        $privateState->firstPayGift = true;
//                    }
//                    $properties = JsonUtil::decode($itemModel->properties);
//                    if (CommUtil::isPropertyExists($properties, "isActive")) {
//                        $activeList = $privateState->activeList;
//                        $activeId = $properties->isActive;
//                        $activeList[] = $activeId;
//                        $privateState->activeList = $activeList;
//                    }
//                    StoreProc::addSeprateItem($itemModel, $req);
//                }
//            }
//            $mem->delete(MemKey_User::PayOrders($req->zoneid, $oid));
//        }
//        return $payGodpetItems;
//    }
//
//    /**
//     * 刷新挂起列表中的营销礼包到仓库
//     * @param Req $req
//     */
//    public static function refreshGiftStoreItem($req) {
//        $oid = $req->uid;
//        $mem = $req->mem;
//        $giftStore = $mem->get(MemKey_User::GiftStore($req->zoneid, $oid));
//        CLog::pay("WebGift refreshGiftStoreItem giftStore:$giftStore|oid:$oid");
//
//        if ($giftStore != null) {
//            foreach ($giftStore as $giftItemId) {
//                $itemModel = ConstProc::getGoodsItemConst($giftItemId);
//                CLog::pay("WebGift refreshGiftStoreItem2 giftItemId:$giftItemId");
//
//                if ($itemModel != null) {
//                    StoreProc::addSeprateItem($itemModel, $req);
//                } else {
//                    CLog::pay("WebGift refreshGiftStoreItem3 ERR giftItemId:$giftItemId");
//                }
//            }
//            $mem->delete(MemKey_User::GiftStore($req->zoneid, $oid));
//        }
//    }
//
//    /**
//     * 尝试领取黄钻新手礼包
//     * @param type $user
//     * @param type $privateState
//     * @return boolean
//     */
//    public static function tryVipNewerGift($user, &$privateState) {
////1.检查是否为黄钻
//        if ($user->is_yellow_vip) {
//# //2.检查是否含有新手礼包标志
//            if (CommUtil::isPropertyExists($privateState, "vipNewerGift")) {
//                if ($privateState->vipNewerGift) {# //3.检查是否能够领取
//                    unset($privateState->vipNewerGift); # //4.剔除新手礼包标志
//                    return true; //5.返回成功
//                }
//            }
//        }
//        return false;
//    }
//
//    /**
//     * 尝试领取黄钻每日礼包
//     * @param type $user
//     * @param type $privateState
//     * @return boolean
//     */
//    public static function tryVipDayGift($user, &$privateState) {
//        if ($user->is_yellow_vip) {//1.检查是否为黄钻
//            if (CommUtil::isPropertyExists($privateState, "vipDayGift")) {//2.检查黄钻礼包标志是否为真
//                if ($privateState->vipDayGift) {//3.检查是否能够领取
//                    $privateState->vipDayGift = false; //4.修改黄钻每日礼包标志
//                    return true; //5.返回成功
//                }
//            }
//        }
//        return false;
//    }
//
//    /**
//     * 客户端确认支付
//     * @param type $req
//     * @return \ResponseVo
//     */
//    public static function confirmPay($req, $v3) {
//        $paydb = CPayInit();
//        $openid = $req->uid; //客户端参数解析
//        $billArray = $paydb->fetch_array(sprintf(self::PAY_BILL_SELECT, $openid));
//        if (count($billArray) > 0) {
//            foreach ($billArray as $billRecord) {
//                $id = $billRecord['id'];
//                $ts = now();
//                $payitem = $billRecord['payitem'];
//                $token = $billRecord['token'];
//                $billno = $billRecord['billno'];
//                $amt = $billRecord['amt'];
//                if (GAME_ONLINE) {
//                    $ret = $v3->pay_confirm_delivery($openid, $openkey, $pf, $ts, //
//                            $payitem, $token, $billno, $amt);
//                    if ($ret->ret == 0 || $ret->ret == 1069) {// 订单确认的情况
//                        $dbRet = $paydb->query(sprintf(self::PAY_BILL_DELETE, $id));
//                        $sqlConfirm = sprintf(self::PAY_BILL_CONFIRM, $openid, $billno, $amt, $payitem, $token);
//                        $dbRet = $paydb->query($sqlConfirm); // 写订单支付日志
//                        $log = $billno . "|" . $ret->msg . "[" . $openid . "]已确认支付!";
//                        $dbRet = WebPayProc::_paylog($paydb, $log);
//                    }// 订单丢失的情况
//                    else if ($ret->ret == 1060 || $ret->ret == 1063 || $ret->ret == 1068) {
//                        $dbRet = $paydb->query(sprintf(self::PAY_BILL_DELETE, $id));
//                        $sqlLost = sprintf(self::PAY_BILL_LOST, $openid, $billno, $amt, $payitem, $token, $ret->msg);
//                        $dbRet = $paydb->query($sqlLost); // 写订单支付日志
//                        $log = $billno . "|" . $ret->msg . "[" . $openid . "]已确认丢失!";
//                        $dbRet = WebPayProc::_paylog($paydb, $log);
//                    }
//                } else {
//                    $dbRet = $paydb->query(sprintf(self::PAY_BILL_DELETE, $id));
//                    $sqlConfirm = sprintf(self::PAY_BILL_CONFIRM, $openid, $billno, $amt, $payitem, $token);
//                    $dbRet = $paydb->query($sqlConfirm); // 写订单支付日志
//                    $log = $billno . "|" . $ret->msg . "[" . $openid . "]已确认支付!";
//                    $dbRet = WebPayProc::_paylog($paydb, $log);
//                }
//            }
//        }
//        $paydb->close();
//    }
//
//    /**
//     * 插入日志
//     * @param CDBUtil $paydb
//     * @param string $log
//     * @return mixed
//     */
//    static function _paylog($paydb, $log) {
//        return $paydb->query(sprintf(self::PAY_LOG_INSERT, $log));
//    }
//
//    /**
//     * 获取指定道具的图片Url
//     * @param GoodsItemModel $item
//     * @return String 返回字符串
//     */
//    private static function _getGoodsImgUrl($item) {
//        return CDN_HOST . "res/yuanbao3.png";
//    }
//
//}
