* @version : HUOSDK 8.0 */ namespace api\sdk\controller\v8; use api\common\controller\V2ApiBaseController; use huo\controller\member\MemCache; use huo\controller\pay\Notify; use huo\controller\pay\PaySwitch; use huo\controller\pay\Sdk; use huo\model\member\MemGameModel; use huo\model\order\PayAppleModel; use huoIdentify\controller\Pay; use huolib\constant\GameConst; use huolib\constant\MemConst; use huolib\constant\OrderConst; use huolib\status\MemberStatus; use huolib\status\OrderStatus; use think\Exception; class OrderController extends V2ApiBaseController { public function _initialize() { parent::_initialize(); } /** * 游戏预下单 * http://doc.1tsdk.com/138?page_id=2908 * 【域名】/v8/sdk/preorder * 【域名】/v8/pay/preorder */ public function preorder() { $this->checkLogin(); $_game_rq = $this->setGameData(); $_channel_rq = $this->setChannelData(); $_device_rq = $this->setDeviceData(); $_mem_rq = $this->setMemData(); $_role_rq = $this->setRoleData(); $_order_rq = $this->setOrderData(); $_mem_data = MemCache::ins()->getInfoById($this->mem_id); if (isset($_mem_data['status']) && $_mem_data['status'] == MemConst::STATUS_FORBID) { $_code = MemberStatus::LOGIN_IS_OUT; $this->error(lang(MemberStatus::getMsg($_code)), [], $_code); } /* Modified by chenbingling BEGIN 2020/9/15 ISSUES:#13181 马甲包使用马甲包预下单 */ $_vb_id = $_game_rq->getVbId(); if (!empty($_vb_id)) { $_rs = (new \huosdk\h5ios\core\controller\Order())->preorder( $_order_rq, $_role_rq, $_mem_rq, $_game_rq, $_channel_rq, $_device_rq ); $this->returnData($_rs); } /* END 2020/9/15 ISSUES:#13181 */ $_mem_game_info = (new MemGameModel())->getInfoByAppMemId($_game_rq->getHAppId(), $this->mem_id); $_agent_id = $_mem_game_info['guided_agent_id'] ?? 0; if (empty($_agent_id)) { $_agent_id = $_mem_data['agent_id'] ?? 0; } $_mem_rq->setAgentId($_agent_id); $_channel_rq->setAgentId($_agent_id); $_order = new Sdk(); $_pay_check = OrderConst::PAY_SWITCH_NO; /* 判断支付切换 */ $_from = $_device_rq->getFrom(); if (GameConst::GAME_IOS_SWITCH == $_from) { $_pay_check = (new PaySwitch())->getPaySwitch( $_order_rq, $_role_rq, $_mem_rq, $_game_rq, $_channel_rq, $_device_rq ); } $_preorder_rs = $_order->preorder($_order_rq, $_role_rq, $_mem_rq, $_game_rq, $_channel_rq, $_device_rq); if (OrderStatus::NO_ERROR != $_preorder_rs['code']) { $this->returnData($_preorder_rs); } $_order_data = $_preorder_rs['data']; $_order_id = $_order_data['order_id']; $_pay_token = $_order_rq->genPayToken($_order_id); $_rdata['order_id'] = $_order_id; $_rdata['pay_token'] = $_pay_token; $_rdata['check'] = $_pay_check; $_rdata['pay_url'] = ''; //TODO: chengbingling 2018/6/5 切换支付url /* 支付限制校验 */ $_rs = (new Pay())->checkLimit($this->mem_id, $_game_rq->getHAppId(), $_order_data['amount']); if (is_array($_rs)) { $this->returnData($_rs); } $_rdata['url'] = $_rs; /* 苹果下单 直接插入苹果订单表 */ $_from = $_device_rq->getFrom(); if (GameConst::GAME_IOS_SWITCH == $_from && OrderConst::PAY_SWITCH_NO == $_pay_check) { $_data['order_id'] = $_order_id; $_data['mem_id'] = $_mem_rq->getMemId(); $_data['mg_mem_id'] = $_mem_rq->getMgMemId(); $_data['apple_id'] = $_game_rq->getAppleId(); $_data['product_id'] = $_order_rq->getProductId(); $_data['idfv'] = $_device_rq->getMac(); $_data['idfa'] = $_device_rq->getDeviceId(); (new PayAppleModel())->addData($_data); } $this->success(lang('SUCCESS'), $_rdata); } /** * 支付页面数据 * http://doc.1tsdk.com/138?page_id=2954 * 【域名】/pay/info * 【域名】/v8/pay/info */ public function getInfo() { $this->checkLogin(); $_order_rq = $this->setOrderData(); $_pay_token = get_val($this->rq_data, 'pay_token', ''); $_rs = $_order_rq->checkPayToken($_pay_token); if (false == $_rs) { $_code = OrderStatus::TOKEN_ARGS_ERROR; $this->error(OrderStatus::getMsg($_code), [], $_code); } $_order_id = $_order_rq->getOrderId(); $_rdata = (new Sdk())->getPayInfo($_order_id); $this->returnData($_rdata); } /** * 查询支付结果 * http://doc.1tsdk.com/138?page_id=2909 * 【域名】/v8/product/query */ public function read() { try { $_order_rq = $this->setOrderData(); $_order = new Sdk(); $_rdata = $_order->getStatus($_order_rq->getOrderId()); if (false == $_rdata) { $this->error('ERROR'); } if (OrderConst::CP_STATUS_SUC != $_rdata['cp_status'] && OrderConst::PAY_STATUS_SUC == $_rdata['status']) { $_rs = (new Notify())->notify($_order_rq->getOrderId()); if (OrderStatus::NO_ERROR == $_rs['code']) { $_rdata['status'] = OrderConst::PAY_STATUS_SUC; $_rdata['cp_status'] = OrderConst::CP_STATUS_SUC; } } $_rdata['order_id'] = $_order_rq->getOrderId(); $this->success(lang('SUCCESS'), $_rdata); } catch (Exception $_e) { $this->error($_e->getMessage()); } } }