|
@@ -1,501 +1,161 @@
|
|
|
<?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;
|
|
|
- }
|
|
|
-
|
|
|
+//
|
|
|
+//
|
|
|
+//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 {
|
|
|
+//
|
|
|
// /**
|
|
|
-// * 【移动端】扣除游戏币购买道具
|
|
|
-// * @param RequestVo $req
|
|
|
+// * Sql语句移动支付插入一条log日志。
|
|
|
+// * @var string
|
|
|
// */
|
|
|
-// static function mn_pay($req) {
|
|
|
-// $resp = new ResponseVo();
|
|
|
-// $user = $req->userInfo->user; # user引用
|
|
|
+// 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
|
|
|
//
|
|
|
-// $itemModel = ConstProc::getItemConst($req->mem, $itemId); // 取道具的常量数据
|
|
|
+// $v3 = CV3Init();
|
|
|
+// $appid = V3_APPID; # 支付模块,微信和手Q统一使用手Q的appid
|
|
|
+// $ts = now();
|
|
|
+// $itemModel = ConstProc::getGoodsItemConst($itemId); // 取道具的常量数据
|
|
|
// if ($itemModel == null) { //1.检测是否存在道具的常量数据
|
|
|
-// $resp = ResponseVo::myErrResponse($req, ErrCode::err_msg_itemnoconst);
|
|
|
+// $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 = ResponseVo::myErrResponse($req, ErrCode::err_pay_vipnewerno);
|
|
|
+// $resp = Resp::myErrResponse($req, ErrCode::pay_vipnewerno);
|
|
|
// } else {
|
|
|
-// if ($user->cash < $amt) { // 余额不足
|
|
|
-// $resp = ResponseVo::myErrResponse($req, ErrCode::err_msg_cashnotenough);
|
|
|
+// 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, $user->cash - $amt); // 更新玩家数据信息
|
|
|
+// UserModel::set_Cash($user, $v3PayRet->balance); // 更新玩家数据信息
|
|
|
// 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);
|
|
|
+// $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->user->gold < $prize->g) {
|
|
|
-// $resp = ResponseVo::myErrResponse($req, ErrCode::err_msg_goldnotenough);
|
|
|
+// 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 = ResponseVo::myRetResponse($req, $user);
|
|
|
+// $resp = Resp::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);
|
|
|
+// $resp = Resp::myErrResponse($req, ErrCode::notenough_honour);
|
|
|
// } else {// 发货
|
|
|
// StoreProc::addSeprateItem($itemModel, $req); // 更新玩家荣誉值余额
|
|
|
-// $user->honour-=$prize->h; // 更新玩家数据信息
|
|
|
+// $user->honour -= $prize->h; // 更新玩家数据信息
|
|
|
// UserProc::updateUserInfo($req); // 直接将$user的最新值返回给客户端
|
|
|
-// $resp = ResponseVo::myRetResponse($req, $user);
|
|
|
+// $resp = Resp::myRetResponse($req, $user);
|
|
|
// }
|
|
|
// }
|
|
|
// }
|
|
@@ -503,54 +163,396 @@ class MobilePayProc {
|
|
|
// }
|
|
|
//
|
|
|
// /**
|
|
|
-// * 【移动端】查询账户游戏币余额
|
|
|
-// * @history
|
|
|
-// * 2015-7-6 改动思路, 不直接拿api返回值中的balance更新玩家的钻石余额,
|
|
|
-// * 采用计算相对值的方法计算距离上次更新,玩家是否有新的充值,
|
|
|
-// * $amt>0,则代表有新的充值,将$amt更新到玩家账户.
|
|
|
-// * @param RequestVo $req
|
|
|
+// * 领取首付礼包
|
|
|
+// * @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 来源
|
|
|
// */
|
|
|
-// static function mn_get_Balance($req, $source = "") {
|
|
|
-// if ($req->userInfo->isTest) {
|
|
|
-// return ResponseVo::myRetResponse($req, $req->userInfo->user);
|
|
|
+// 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;
|
|
|
// }
|
|
|
-// $resp = new ResponseVo();
|
|
|
+//
|
|
|
+// $user = $req->userInfo->game->user;
|
|
|
// $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;
|
|
|
+// $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 {
|
|
|
-// $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_billno = $v3PayRet->billno; // 账单号,扣费后其他逻辑失败的话,调用取消扣费接口
|
|
|
+//// 更新玩家游戏币余额, 老版本的文档中有balance字段,新的没有说明
|
|
|
+// if (property_exists($v3PayRet, "balance")) {
|
|
|
+// UserModel::set_Cash($user, $v3PayRet->balance);
|
|
|
+// } else {
|
|
|
+// UserModel::set_Cash($user, $user->cash - $amt);
|
|
|
// }
|
|
|
-//// self::m_FixUserCash($req); # 修复(特定)用户钻石数据(端午节系统邮件失误)
|
|
|
-// UserProc::updateUserInfo($req); // 更新玩家数据信息
|
|
|
-// $resp = ResponseVo::myRetResponse($req, $user); // 直接将$user的最新值返回给客户端
|
|
|
+// $err = ErrCode::ok;
|
|
|
// }
|
|
|
-// self::_mPayLog($zoneid, $openid, MLogType::Inquire, $v3PayRet->ret, #
|
|
|
+// self::_mPayLog($zoneid, $req->uid, MLogType::Save, $err, #
|
|
|
// $amt, $user->yuanbao, $user->cash, $user->gift_cash, $user->charge_amt, $source);
|
|
|
-// return $resp;
|
|
|
+// 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;
|
|
|
+//// }
|
|
|
+//}
|