del_YYBPay.php 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558
  1. <?php
  2. //
  3. //
  4. //namespace loyalsoft;
  5. //
  6. ///**
  7. // * Description of YYBPay
  8. // * @version
  9. // * 1.0.0 Created at 2016-4-20. by --gwang
  10. // * @author gwang (mail@wanggangzero.cn)
  11. // * @copyright © 2016-4-20, SJZ LoyalSoft Corporation & gwang. All rights reserved.
  12. // */
  13. //class YYBPay {
  14. ////put your code here
  15. //}
  16. //
  17. ///**
  18. // * 移动支付
  19. // * @history
  20. // * 1. m_pay m_AddUserCash ... 以 m_ 打头的函数是第一版, 完全按照应用宝官方要求托管游戏币的模式开发的. * 2015年4月23日
  21. // * 2. mn_pay mn_AddUserCash ... 以 mn_ 打头的函数是第二版, 修改为伪托管模式,除了充值的时候跟腾讯通讯,其余时间自己管理游戏币:钻石. * 2015年7月23日
  22. // * 3. 第三版: 独立的游戏币<元宝>, 面向多渠道的充值模式, 拉起充值成功后, 给玩家发放元宝. 游戏内部消费元宝,钻石和金币.
  23. // * 可以用元宝购买金币和钻石.这一版在上面的PayProc中 * 2015年9月23日
  24. // *
  25. // */
  26. //class MobilePayProc {
  27. //
  28. // /**
  29. // * Sql语句移动支付插入一条log日志。
  30. // * @var string
  31. // */
  32. // 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')";
  33. //
  34. // /**
  35. // * 【移动端】查询账户游戏币余额(v3)
  36. // * @param Req $req
  37. // * @param string $source 来源
  38. // */
  39. // public static function v3_m_get_Balance($req, $source = "") {
  40. // if ($req->userInfo->isTest) {
  41. // return Resp::myRetResponse($req, $req->userInfo->game->user);
  42. // }
  43. // $resp = new Resp();
  44. // $sdkUser = $req->userInfo->sdkUserKey;
  45. // $user = $req->userInfo->game->user;
  46. //// 客户端参数解析
  47. // $openid = $req->uid; // openid
  48. // $zoneid = $req->zoneid; // 分区Id
  49. // $openkey = $sdkUser->access_token; // openkey|accesstoken
  50. // $pf = $sdkUser->pf; // pf
  51. // $pfkey = $sdkUser->pf_key; // pfkey
  52. // $paytoken = $sdkUser->pay_token; // 手Q客户端获取,微信传空
  53. // $v3 = CV3Init();
  54. // $appid = V3_APPID; # 支付模块,微信和手Q统一使用手Q的appid
  55. // $ts = now();
  56. // $v3PayRet = $v3->m_get_balance($sdkUser->platform, $openid, $openkey, $pf, $paytoken, $appid, $pfkey, $ts, $zoneid);
  57. // $v3->close();
  58. // $amt = 0;
  59. // if ($v3PayRet->ret != 0) { //v3其他错误
  60. // $resp = Resp::err($v3PayRet->ret);
  61. // $resp->result = $v3PayRet;
  62. // } else {
  63. // $amt = $v3PayRet->save_amt - $user->charge_amt; # 本次充值金额
  64. // $user->cash = $v3PayRet->balance;
  65. // $user->charge_amt = $v3PayRet->save_amt; # 历史
  66. //
  67. // $user->gift_cash = $v3PayRet->gen_balance; // 赠送的宝石数量
  68. // if ($amt > 0 # 充值金额大于0,且首付标志为false才可以 /* 其实腾讯有返 isfirstpay字段 */
  69. // && isset($req->userInfo->game->privateState->firstPayGift) # 无此字段代表已经领取礼包
  70. // && !$req->userInfo->game->privateState->firstPayGift) {
  71. // $req->userInfo->game->privateState->firstPayGift = true;
  72. // }
  73. //// self::m_FixUserCash($req); # 修复(特定)用户钻石数据(端午节系统邮件失误)
  74. // UserProc::updateUserInfo($req); // 更新玩家数据信息
  75. //
  76. // $resp = Resp::myRetResponse($req, $user); // 直接将$user的最新值返回给客户端
  77. // }
  78. // self::_mPayLog($zoneid, $openid, MLogType::Inquire, $v3PayRet->ret, #
  79. // $amt, $user->yuanbao, $user->cash, $user->gift_cash, $user->charge_amt, $source);
  80. // return $resp;
  81. // }
  82. //
  83. // /**
  84. // * 【移动端】扣除游戏币购买道具(V3)
  85. // * @param Req $req
  86. // */
  87. // public static function v3_m_pay($req) {
  88. // $resp = new Resp();
  89. // $user = $req->userInfo->game->user; # user引用
  90. //// 客户端参数解析
  91. // $openid = $req->uid; // openid
  92. // $zoneid = $req->zoneid; // 分区id
  93. // $openkey = $req->paras[0]; // openkey|accesstoken
  94. // $pf = $req->paras[1]; // pf
  95. // $pfkey = $req->paras[2]; // pfkey
  96. // $paytoken = $req->paras[3]; // 手Q客户端获取 微信传空
  97. // $itemId = $req->paras[4]; // 道具ID
  98. //
  99. // $v3 = CV3Init();
  100. // $appid = V3_APPID; # 支付模块,微信和手Q统一使用手Q的appid
  101. // $ts = now();
  102. // $itemModel = ConstProc::getGoodsItemConst($itemId); // 取道具的常量数据
  103. // if ($itemModel == null) { //1.检测是否存在道具的常量数据
  104. // $resp = Resp::myErrResponse($req, ErrCode::err_const_no);
  105. // } else {
  106. // $prize = JsonUtil::decode($itemModel->prize); # 价格
  107. // if (property_exists($prize, "c") && $prize->c > 0) {// 钻石购买
  108. // $amt = self::_getItemCashPrize($itemModel); // 道具价格(钻石)
  109. // $remark = $itemModel->name;
  110. // if ($amt <= 0) {
  111. // $resp = Resp::myErrResponse($req, ErrCode::pay_vipnewerno);
  112. // } else {
  113. // if ($req->userInfo->isTest) { # 测试用,直接模拟一个支付返回值
  114. // $v3PayRet = json_decode(json_encode(array(
  115. // 'ret' => 0,
  116. // 'balance' => $user->cash -= $amt
  117. // )));
  118. // } else {
  119. // $v3PayRet = $v3->m_pay($req->userInfo->sdkUserKey->platform, #
  120. // $openid, $openkey, $pf, $paytoken, #
  121. // $appid, $pfkey, $ts, $zoneid, $amt, $itemId, $remark);
  122. // }
  123. // $v3->close();
  124. // if ($v3PayRet->ret == 1004) { // 余额不足
  125. // $resp = Resp::myErrResponse($req, ErrCode::notenough_cash_msg);
  126. // } elseif ($v3PayRet->ret != 0) { //v3其他错误
  127. // $resp = Resp::myErrResponse($req, $v3PayRet->ret);
  128. // $resp->result = $v3PayRet;
  129. // } else { // 发货
  130. // StoreProc::addSeprateItem($itemModel, $req); // 更新玩家游戏币余额
  131. // UserModel::set_Cash($user, $v3PayRet->balance); // 更新玩家数据信息
  132. // UserProc::updateUserInfo($req); // 直接将$user的最新值返回给客户端
  133. // $resp = Resp::myRetResponse($req, $user);
  134. // }
  135. // $source = "商城购买-" . $itemModel->name;
  136. // self::_mPayLog($req->zoneid, $req->uid, MLogType::Shop, $resp->err, #
  137. // $amt, $user->yuanbao, $user->cash, $user->gift_cash, $user->charge_amt, $source, $itemId);
  138. // }
  139. // }// 金币购买
  140. // else if (CommUtil::isPropertyExists($prize, "g") && $prize->g > 0) {
  141. // if ($req->userInfo->game->user->gold < $prize->g) {
  142. // $resp = Resp::myErrResponse($req, ErrCode::notenough_gold_msg);
  143. // } else {// 发货
  144. // StoreProc::addSeprateItem($itemModel, $req); // 更新玩家金币余额
  145. // UserModel::Comsume_Gold($user, $prize->g); // 更新玩家数据信息
  146. // UserProc::updateUserInfo($req); // 直接将$user的最新值返回给客户端
  147. // $resp = Resp::myRetResponse($req, $user);
  148. // }
  149. // }// 除了金币和钻石以外还有荣誉点。
  150. // else if (CommUtil::isPropertyExists($prize, "h") && $prize->h > 0) {
  151. // if ($user->honour < $prize->h) {
  152. // $resp = Resp::myErrResponse($req, ErrCode::notenough_honour);
  153. // } else {// 发货
  154. // StoreProc::addSeprateItem($itemModel, $req); // 更新玩家荣誉值余额
  155. // $user->honour -= $prize->h; // 更新玩家数据信息
  156. // UserProc::updateUserInfo($req); // 直接将$user的最新值返回给客户端
  157. // $resp = Resp::myRetResponse($req, $user);
  158. // }
  159. // }
  160. // }
  161. // return $resp;
  162. // }
  163. //
  164. // /**
  165. // * 领取首付礼包
  166. // * @param Req $req
  167. // * @return Resp
  168. // */
  169. // public static function m_GetFirstPayGift($req) {
  170. // $resp = new Resp();
  171. // $privateState = $req->userInfo->game->privateState;
  172. //# 客户端参数解析
  173. // $itemId = glc()->FirstPay_ItemId;
  174. //// 如果已经领取首付礼包
  175. // if (!CommUtil::isPropertyExists($privateState, "firstPayGift")) {
  176. // $resp = Resp::myErrResponse($req, ErrCode::pay_firstpaygetted);
  177. // } elseif ($req->userInfo->game->user->charge_amt <= 0) { // 如果尚未完成首付
  178. // $resp = Resp::myErrResponse($req, ErrCode::pay_firstpayno_err);
  179. // } else {
  180. // $itemModel = ConstProc::getGoodsItemConst($itemId); # 取物品常量
  181. // if ($itemModel == null) {// 检测首付礼包是否存在
  182. // $resp = Resp::myErrResponse($req, ErrCode::err_const_no);
  183. // } else {
  184. // unset($privateState->firstPayGift); # .剔除首付标志
  185. // StoreProc::addSeprateItem($itemModel, $req); # .发放首付礼包
  186. // $result = array(# 把玩家最新的仓库数据发给客户端
  187. // 'itemid' => $itemId
  188. // );
  189. //// 7.回送成功信息
  190. // $resp = Resp::myRetResponse($req, $result);
  191. //// 成就触发--获取金币
  192. // AchievementProc::dealAchievementState($req, $resp, AchievementProc::Gold);
  193. // UserProc::updateUserInfo($req); # 更新玩家数据
  194. // }
  195. // }
  196. // return $resp;
  197. // }
  198. //
  199. ////----------- 以下是辅助方法 -------------
  200. //
  201. // /**
  202. // * 【移动端】调用V3函数给玩家账号直接增加(赠送)游戏币(钻石),
  203. // * 赠送的游戏币不参与分成结算,若是造成收入损失,自负。
  204. // * @param Req $req Description
  205. // * @param type $amt 数量
  206. // * @param string $source 来源
  207. // */
  208. // public static function v3_m_AddUserCash($req, $amt, $source = "") {
  209. // $err = ErrCode::ok;
  210. // if ($req->userInfo->isTest) { // 跳过支付api
  211. // $req->userInfo->game->user->cash += $amt;
  212. // return $err;
  213. // }
  214. // if ($amt > 0) {// 防御,若是给出错误数值直接返回
  215. // $user = $req->userInfo->game->user;
  216. // $sdkUser = $req->userInfo->sdkUserKey;
  217. //// 参数准备
  218. // $zoneid = $req->zoneid; # 分区Id
  219. // $openid = $sdkUser->open_id;
  220. // $openkey = $sdkUser->access_token;
  221. // $pf = $sdkUser->pf;
  222. // $paytoken = $sdkUser->pay_token;
  223. // $pfkey = $sdkUser->pf_key;
  224. //
  225. // $ts = now();
  226. // $v3 = CV3Init();
  227. // $appid = V3_APPID; // 微信和QQ统一使用手Q的appId
  228. // $v3PayRet = $v3->m_present($sdkUser->platform, $openid, $openkey, $pf, # 调用后台接口
  229. // $paytoken, $appid, $pfkey, #
  230. // $ts, $zoneid, PAY_PRESENTCASH_ACTID, PAY_PRESENTCSAH_GIFTID, $amt);
  231. // $v3->close();
  232. // if ($v3PayRet->ret != ErrCode::ok) { //v3其他错误
  233. // $err = $v3PayRet->ret;
  234. // } else {
  235. // self::$m_billno = $v3PayRet->billno; // 账单号,扣费后其他逻辑失败的话,调用取消扣费接口
  236. //// 更新玩家游戏币余额, 老版本的文档中有balance字段,新的没有说明
  237. // if (isset($v3PayRet->balance)) {
  238. // UserModel::set_Cash($user, $v3PayRet->balance);
  239. // } else {
  240. // UserModel::set_Cash($user, $user->cash + $amt);
  241. // }
  242. //# 日志
  243. // self::_mPayLog($req->zoneid, $req->uid, MLogType::Present, $err, #
  244. // $amt, $user->yuanbao, $user->cash, $user->gift_cash, $user->charge_amt, $source);
  245. // }
  246. // }
  247. // return $err;
  248. // }
  249. //
  250. // /**
  251. // * 【移动端】扣除玩家游戏币(V3)(Ps.发货逻辑最后执行此步骤)
  252. // * @param Req $req Description
  253. // * @param int $amt 扣除数量
  254. // * @param string $source (string)备注,扣除来源(模块)
  255. // * @param string $itemid (option)相关物品id
  256. // * @return int ErrCode
  257. // */
  258. // public static function v3_m_SaveUserCash($req, $amt, $source = "", $itemid = "0") {
  259. // if ($req->userInfo->isTest) { # 跳过腾讯api(子豪)
  260. // $req->userInfo->game->user->cash -= $amt;
  261. // return ErrCode::ok;
  262. // }
  263. // if ($amt <= 0) { // 防御,数量不可能小于0
  264. // return ErrCode::ok;
  265. // }
  266. //
  267. // $user = $req->userInfo->game->user;
  268. // $sdkUser = $req->userInfo->sdkUserKey;
  269. //
  270. // $v3 = CV3Init();
  271. // $appid = V3_APPID; # 支付模块,微信和手Q统一使用手Q的appid
  272. // $ts = now();
  273. // $zoneid = $req->zoneid; // 分区Id
  274. //// 调用腾讯api
  275. // $v3PayRet = $v3->m_pay($sdkUser->platform, $sdkUser->open_id, $sdkUser->access_token, $sdkUser->pf, //
  276. // $sdkUser->pay_token, $appid, $sdkUser->pf_key, $ts, $zoneid, //
  277. // $amt, $itemid, $source);
  278. // $v3->close(); // 关闭
  279. //
  280. // $err = ErrCode::ok;
  281. // if ($v3PayRet->ret == 1004) { // 余额不足
  282. // $err = ErrCode::notenough_cash_msg;
  283. // } elseif ($v3PayRet->ret != 0) { //v3其他错误
  284. // $err = $v3PayRet->ret;
  285. // } else {
  286. // self::$m_billno = $v3PayRet->billno; // 账单号,扣费后其他逻辑失败的话,调用取消扣费接口
  287. //// 更新玩家游戏币余额, 老版本的文档中有balance字段,新的没有说明
  288. // if (property_exists($v3PayRet, "balance")) {
  289. // UserModel::set_Cash($user, $v3PayRet->balance);
  290. // } else {
  291. // UserModel::set_Cash($user, $user->cash - $amt);
  292. // }
  293. // $err = ErrCode::ok;
  294. // }
  295. // self::_mPayLog($zoneid, $req->uid, MLogType::Save, $err, #
  296. // $amt, $user->yuanbao, $user->cash, $user->gift_cash, $user->charge_amt, $source);
  297. // return $err;
  298. // }
  299. //
  300. // /**
  301. // * 缓存一个账单号,如果代码执行过程中出现错误,直接取消扣除游戏币
  302. // * 注意,若是逻辑不是在一次Request内完成的,那么次订单号需要进行存储
  303. // * @var string
  304. // */
  305. // static $m_billno;
  306. //
  307. // /**
  308. // * 【移动端】取消扣除玩家游戏币(V3)
  309. // * @param Req $req
  310. // * @param UserModel $user
  311. // * @param CstSDK_UserModel $sdkUser
  312. // * @param int $amt
  313. // * @return int
  314. // */
  315. // public static function v3_m_CancelConsumCash($req, $amt) {
  316. // if ($req->userInfo->isTest) { // 跳过腾讯api
  317. // $user->cash += $amt;
  318. // return ErrCode::ok;
  319. // }
  320. // $user = $req->userInfo->game->user;
  321. // $sdkUser = $req->userInfo->sdkUserKey;
  322. // $appid = V3_APPID; # 支付模块,微信和手Q统一使用手Q的appid
  323. // $ts = now();
  324. // $zoneid = $req->zoneid; # 分区Id
  325. // $v3 = CV3Init();
  326. // $v3PayRet = $v3->m_cancel_pay($sdkUser->platform, $sdkUser->open_id, $sdkUser->access_token, #
  327. // $sdkUser->pf, $sdkUser->pay_token, $appid, $sdkUser->pf_key, $ts, //
  328. // $zoneid, $amt, self::$m_billno);
  329. // $v3->close(); // 关闭
  330. // if ($v3PayRet->ret != 0) { //v3其他错误
  331. // return $v3PayRet->ret;
  332. // } else {
  333. //// 更新玩家游戏币余额, 老版本的文档中有balance字段,新的没有说明
  334. // if (property_exists($v3PayRet, "balance")) {
  335. // UserModel::set_Cash($user, $v3PayRet->balance);
  336. // } else {
  337. // UserModel::set_Cash($user, $user->cash + $amt);
  338. // }
  339. // return ErrCode::ok;
  340. // }
  341. // }
  342. //
  343. // /**
  344. // * 取物品的价格(钻石)
  345. // * @param GoodsItemModel $itemModel
  346. // */
  347. // private static function _getItemCashPrize($itemModel) {
  348. // $c = 0;
  349. // $prize = JsonUtil::decode($itemModel->prize);
  350. // if (CommUtil::isPropertyExists($prize, "c")) {
  351. // $c = $prize->c;
  352. // }
  353. // return $c;
  354. // }
  355. //
  356. // /**
  357. // * 插入一条记录
  358. // * @param int $zoneid
  359. // * @param string $oid
  360. // * @param int $type
  361. // * @param int $amt
  362. // * @param int $balance
  363. // * @param int $cash 钻石
  364. // * @param int $giftedcash
  365. // * @param int $chargedcash
  366. // * @param int $source
  367. // */
  368. // public static function _mPayLog($zoneid, $oid, $type, $result, $amt, $balance, $cash, $giftedcash, $chargedcash, $source = "srcUnKnown", $itemid = "") {
  369. //// var_dump(func_get_args());
  370. //// CLogUtil::print_stack_trace();
  371. // $month = date("Ym");
  372. // $sql = sprintf(self::SQL_M_LOG, $month, $zoneid, $type, $result, $amt, $balance, $cash, $giftedcash, $chargedcash, $source, $oid, $itemid);
  373. // $paydb = CPayInit();
  374. // $paydb->query($sql);
  375. // $paydb->close();
  376. // }
  377. //
  378. //// ----------------new pay proc -------------------------
  379. //// 腾讯支付修改版,不再让钻石存储在腾讯端
  380. //
  381. // /**
  382. // * 【移动端】取消扣除玩家游戏币,无v3调用
  383. // * @param Req $req
  384. // * @param UserModel $user
  385. // * @param CstSDK_UserModel $sdkUser
  386. // * @param int $amt
  387. // * @return int
  388. // */
  389. // public static function mn_CancelConsumCash($req, $amt) {
  390. // $err = ErrCode::ok;
  391. // $user = $req->userInfo->game->user;
  392. // $zoneid = $req->zoneid; # 分区Id
  393. // if ($amt > 0) { // 更新玩家游戏币余额, 老版本的文档中有balance字段,新的没有说明
  394. // UserModel::set_Cash($user, $user->cash + $amt);
  395. //# 记录日志
  396. // self::_mPayLog($zoneid, $user->oId, MLogType::Present, $err, $amt, $user->yuanbao, #
  397. // $user->cash, $user->gift_cash, $user->charge_amt, "<取消订单>" . self::$m_billno);
  398. // }
  399. // return $err;
  400. // }
  401. //
  402. // /**
  403. // * 【移动端】扣除玩家游戏币,无V3调用(Ps.发货逻辑最后执行此步骤)
  404. // * @param Req $req Description
  405. // * @param int $amt 扣除数量
  406. // * @param string $source (string)备注,扣除来源(模块)
  407. // * @param string $itemid (option)相关物品id
  408. // * @return int ErrCode
  409. // */
  410. // public static function mn_SaveUserCash($req, $amt, $source = "", $itemid = "0") {
  411. // $err = ErrCode::ok;
  412. // if ($amt > 0) { // 防御,数量不可能小于0
  413. // $user = $req->userInfo->game->user;
  414. // $zoneid = $req->zoneid; // 分区Id
  415. // if ($user->cash < $amt) { // 余额不足
  416. // $err = ErrCode::notenough_cash_msg;
  417. // } else {// 更新玩家游戏币余额
  418. // UserModel::set_Cash($user, $user->cash - $amt);
  419. // self::$m_billno = date("Y-m-d H:i:is");
  420. // }
  421. // self::_mPayLog($zoneid, $req->uid, MLogType::Save, $err, #
  422. // $amt, $user->yuanbao, $user->cash, $user->gift_cash, $user->charge_amt, $source);
  423. // }
  424. // return $err;
  425. // }
  426. //
  427. // /**
  428. // * 【移动端】给玩家账号直接增加(赠送)游戏币(钻石)(无V3),
  429. // * 赠送的游戏币不参与分成结算,若是造成收入损失,自负。
  430. // * @param Req $req Description
  431. // * @param type $amt 数量
  432. // */
  433. // public static function mn_AddUserCash($req, $amt, $source = "") {
  434. // $err = ErrCode::ok;
  435. // if ($amt > 0) {// 防御,若是给出错误数值直接返回
  436. // $user = $req->userInfo->game->user;
  437. // UserModel::set_Cash($user, $user->cash + $amt);
  438. // if ($user->cash < 0) {
  439. // # 输出日志-wqq
  440. // }
  441. //# 记录日志
  442. // self::_mPayLog($req->zoneid, $req->uid, MLogType::Present, $err, #
  443. // $amt, $user->yuanbao, $user->cash, $user->gift_cash, $user->charge_amt, $source);
  444. // }
  445. // return ErrCode::ok;
  446. // }
  447. //
  448. //// /**
  449. //// * 【移动端】扣除游戏币购买道具
  450. //// * @param RequestVo $req
  451. //// */
  452. //// static function mn_pay($req) {
  453. //// $resp = new ResponseVo();
  454. //// $user = $req->userInfo->user; # user引用
  455. ////// 客户端参数解析
  456. //// $itemId = $req->paras[4]; // 道具ID
  457. ////
  458. //// $itemModel = ConstProc::getItemConst($req->mem, $itemId); // 取道具的常量数据
  459. //// if ($itemModel == null) { //1.检测是否存在道具的常量数据
  460. //// $resp = ResponseVo::myErrResponse($req, ErrCode::err_msg_itemnoconst);
  461. //// } else {
  462. //// $prize = JsonUtil::decode($itemModel->prize); # 价格
  463. //// if (property_exists($prize, "c") && $prize->c > 0) {// 钻石购买
  464. //// $amt = self::_getItemCashPrize($itemModel); // 道具价格(钻石)
  465. //// if ($amt <= 0) {
  466. //// $resp = ResponseVo::myErrResponse($req, ErrCode::err_pay_vipnewerno);
  467. //// } else {
  468. //// if ($user->cash < $amt) { // 余额不足
  469. //// $resp = ResponseVo::myErrResponse($req, ErrCode::err_msg_cashnotenough);
  470. //// } else { // 发货
  471. //// StoreProc::addSeprateItem($itemModel, $req); // 更新玩家游戏币余额
  472. //// UserModel::set_Cash($user, $user->cash - $amt); // 更新玩家数据信息
  473. //// UserProc::updateUserInfo($req); // 直接将$user的最新值返回给客户端
  474. //// $resp = ResponseVo::myRetResponse($req, $user);
  475. ////# 记录日志
  476. //// $source = "商城购买-" . $itemModel->name;
  477. //// self::_mPayLog($req->zoneid, $req->oid, MLogType::Shop, $resp->err, #
  478. //// $amt, $user->yuanbao, $user->cash, $user->gift_cash, $user->charge_amt, $source, $itemId);
  479. //// }
  480. //// }
  481. //// }// 金币购买
  482. //// else if (CommUtil::isPropertyExists($prize, "g") && $prize->g > 0) {
  483. //// if ($req->userInfo->user->gold < $prize->g) {
  484. //// $resp = ResponseVo::myErrResponse($req, ErrCode::err_msg_goldnotenough);
  485. //// } else {// 发货
  486. //// StoreProc::addSeprateItem($itemModel, $req); // 更新玩家金币余额
  487. //// UserModel::Comsume_Gold($user, $prize->g); // 更新玩家数据信息
  488. //// UserProc::updateUserInfo($req); // 直接将$user的最新值返回给客户端
  489. //// $resp = ResponseVo::myRetResponse($req, $user);
  490. //// }
  491. //// }// 除了金币和钻石以外还有荣誉点。
  492. //// else if (CommUtil::isPropertyExists($prize, "h") && $prize->h > 0) {
  493. //// if ($user->honour < $prize->h) {
  494. //// $resp = ResponseVo::myErrResponse($req, ErrCode::err_msg_honournotenough);
  495. //// } else {// 发货
  496. //// StoreProc::addSeprateItem($itemModel, $req); // 更新玩家荣誉值余额
  497. //// $user->honour-=$prize->h; // 更新玩家数据信息
  498. //// UserProc::updateUserInfo($req); // 直接将$user的最新值返回给客户端
  499. //// $resp = ResponseVo::myRetResponse($req, $user);
  500. //// }
  501. //// }
  502. //// }
  503. //// return $resp;
  504. //// }
  505. ////
  506. //// /**
  507. //// * 【移动端】查询账户游戏币余额
  508. //// * @history
  509. //// * 2015-7-6 改动思路, 不直接拿api返回值中的balance更新玩家的钻石余额,
  510. //// * 采用计算相对值的方法计算距离上次更新,玩家是否有新的充值,
  511. //// * $amt>0,则代表有新的充值,将$amt更新到玩家账户.
  512. //// * @param RequestVo $req
  513. //// * @param string $source 来源
  514. //// */
  515. //// static function mn_get_Balance($req, $source = "") {
  516. //// if ($req->userInfo->isTest) {
  517. //// return ResponseVo::myRetResponse($req, $req->userInfo->user);
  518. //// }
  519. //// $resp = new ResponseVo();
  520. //// $sdkUser = $req->userInfo->sdkUserKey;
  521. //// $user = $req->userInfo->user;
  522. ////// 客户端参数解析
  523. //// $openid = $req->oid; // openid
  524. //// $zoneid = $req->zoneid; // 分区Id
  525. //// $openkey = $sdkUser->access_token; // openkey|accesstoken
  526. //// $pf = $sdkUser->pf; // pf
  527. //// $pfkey = $sdkUser->pf_key; // pfkey
  528. //// $paytoken = $sdkUser->pay_token; // 手Q客户端获取,微信传空
  529. //// $v3 = CV3Init();
  530. //// $appid = V3_APPID; # 支付模块,微信和手Q统一使用手Q的appid
  531. //// $ts = TimeUtil::tsCurrent();
  532. //// $v3PayRet = $v3->m_get_balance($sdkUser->platform, $openid, $openkey, $pf, $paytoken, $appid, $pfkey, $ts, $zoneid);
  533. //// $v3->close();
  534. //// $amt = 0;
  535. //// if ($v3PayRet->ret != 0) { //v3其他错误
  536. //// $resp = ResponseVo::errResponse($req->oid, $req->msgid, $v3PayRet->ret);
  537. //// $resp->result = $v3PayRet;
  538. //// } else {
  539. //// $amt = $v3PayRet->save_amt - $user->charge_amt; # 本次充值金额 = v3提供的历史充值金额 - 玩家记录的历史充值金额
  540. //// if ($amt > 0) {
  541. //// $user->cash +=$amt; # $v3PayRet->balance;
  542. //// $user->charge_amt = $v3PayRet->save_amt; # 更新历史充值金额
  543. //// $user->gift_cash = $v3PayRet->gen_balance; // 赠送的宝石数量
  544. //// if (isset($req->userInfo->game->privateState->firstPayGift) # 无此字段代表已经领取礼包
  545. //// && !$req->userInfo->game->privateState->firstPayGift) {
  546. //// $req->userInfo->game->privateState->firstPayGift = true;
  547. //// }
  548. //// }
  549. ////// self::m_FixUserCash($req); # 修复(特定)用户钻石数据(端午节系统邮件失误)
  550. //// UserProc::updateUserInfo($req); // 更新玩家数据信息
  551. //// $resp = ResponseVo::myRetResponse($req, $user); // 直接将$user的最新值返回给客户端
  552. //// }
  553. //// self::_mPayLog($zoneid, $openid, MLogType::Inquire, $v3PayRet->ret, #
  554. //// $amt, $user->yuanbao, $user->cash, $user->gift_cash, $user->charge_amt, $source);
  555. //// return $resp;
  556. //// }
  557. //}