123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513 |
- <?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";
- }
- }
|