OauthController.php 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256
  1. <?php
  2. /**
  3. * OauthController.php UTF-8
  4. * 第三方用户登录
  5. *
  6. * @date : 2018/8/9 14:02
  7. *
  8. * @license 这不是一个自由软件,未经授权不许任何使用和传播。
  9. * @author : wuyonghong <wyh@huosdk.com>
  10. * @version : Huosdk 8.0
  11. */
  12. namespace box\api\controller;
  13. use ban\Ban;
  14. use box\common\controller\V2ApiBaseController;
  15. use huo\controller\agent\AgentCache;
  16. use huo\controller\common\HuoCookie;
  17. use huo\controller\game\GameCache;
  18. use huo\controller\integral\MemIa;
  19. use huo\controller\member\Member;
  20. use huo\model\finance\SettleModel;
  21. use huo\model\integral\MemItgLogModel;
  22. use huo\model\member\MemoauthModel;
  23. use huo\model\user\UserModel;
  24. use huolib\constant\AgentConst;
  25. use huolib\constant\CommonConst;
  26. use huolib\constant\IaConst;
  27. use huolib\constant\MpConfConst;
  28. use huolib\constant\OauthConst;
  29. use huolib\status\CommonStatus;
  30. use huolib\status\MemberStatus;
  31. use huomp\controller\member\MemberOut;
  32. use huomp\controller\member\OauthOut;
  33. use huomp\logic\member\HomepageLogic;
  34. use huomp\model\game\GameMiniModel;
  35. use think\Log;
  36. use wxapp\aes\ErrorCode;
  37. use wxapp\aes\WXBizDataCrypt;
  38. class OauthController extends V2ApiBaseController {
  39. function _initialize() {
  40. parent::_initialize();
  41. Log::write(
  42. $this->request->scheme().'://'.$this->request->server('HTTP_HOST').$this->request->server('REQUEST_URI').'?'
  43. .$this->request->getContent(),
  44. Log::LOG
  45. );
  46. }
  47. /**
  48. * http://doc.1tsdk.com/159?page_id=4389
  49. * 小程序登陆
  50. * 【域名】/mp/wx/login
  51. *
  52. * @return mixed
  53. */
  54. public function callbackWeixin() {
  55. $_code = get_val($this->rq_data, 'code');
  56. $_state = get_val($this->rq_data, 'state');
  57. $_game_rq = $this->setGameData();
  58. $_channel_rq = $this->setChannelData();
  59. $_device_rq = $this->setDeviceData();
  60. $_mem_rq = $this->setMemData();
  61. $_rs = (new OauthOut())->oauthLogin(
  62. $_code, $_state, $_game_rq, $_channel_rq, $_device_rq, $_mem_rq
  63. );
  64. if (MemberStatus::NO_ERROR != $_rs['code']) {
  65. $this->error($_rs['msg'], [], $_rs['code']);
  66. }
  67. $_mem_data = $_rs['data'];
  68. $_mem_id = $_mem_data['mem_id'];
  69. if (empty($_mem_id)) {
  70. $_error_code = CommonStatus::INNER_ERROR;
  71. $this->error(CommonStatus::getMsg($_error_code), [], $_error_code);
  72. }
  73. $_is_ban = (new Ban())->checkMemEnv($_mem_id, $_device_rq->getIp());
  74. if ($_is_ban != CommonStatus::NO_ERROR) {
  75. $_error_code = MemberStatus::MEM_ACCOUNT_ANOMALY;
  76. $this->error($_is_ban, [], $_error_code);
  77. }
  78. //返回数据
  79. $_token = HuoCookie::getMemToken();
  80. $_data = [
  81. 'user_token' => $_token,
  82. 'get_novice_award' => CommonConst::CONST_TRUE,
  83. 'get_favorite_award' => CommonConst::CONST_TRUE
  84. ];
  85. $_isReg = isset($_mem_data['is_reg']) ? $_mem_data['is_reg'] : 0;
  86. if (!empty($_isReg)) {
  87. /* 是否领取了新手奖励 1否 2是 */
  88. $_mil_model = new MemItgLogModel();
  89. $_cnt = $_mil_model->getSubCnt($this->mem_id, IaConst::IA_OPEN_GAME);
  90. if ($_cnt == CommonConst::CONST_ZERO) {
  91. $_data['get_novice_award'] = CommonConst::CONST_FALSE;
  92. }
  93. /* 是否领取了收藏奖励 1否 2是 */
  94. $_cnt = $_mil_model->getSubCnt($this->mem_id, IaConst::IA_FAVORITE, $_game_rq->getHAppId());
  95. if ($_cnt == CommonConst::CONST_ZERO) {
  96. $_data['get_favorite_award'] = CommonConst::CONST_FALSE;
  97. }
  98. }
  99. $_homepage_logic = new HomepageLogic();
  100. $_data['auth'] = $_homepage_logic->getAuthSet($_game_rq->getAppVer());
  101. //生成玩家主页
  102. $_homepage_logic->getHomepage($_mem_id);
  103. $_rdata = (new MemberOut())->getBoxMemInfo($_mem_id, $_game_rq->getHAppId(), $_data);
  104. return $this->returnData($_rdata);
  105. }
  106. /**
  107. * http://doc.1tsdk.com/159?page_id=4390
  108. * 小程序上传用户信息
  109. * 【域名】/mp/wx/updateinfo
  110. */
  111. public function upMemInfo() {
  112. $this->checkLogin();
  113. $_game_rq = $this->setGameData();
  114. $_mem_id = $this->mem_id;
  115. $_type = OauthConst::OAUTH_MP;
  116. /* 加解密数据 */
  117. $_encrypted_data = $this->request->param('encrypted_data/s', '');
  118. $_iv = $this->request->param('iv/s', '');
  119. $_wx_id = (new GameMiniModel())->getMpIdByAppId($_game_rq->getHAppId());
  120. $_oauth_data = (new MemoauthModel())->getInfoByAppMemId($_game_rq->getHAppId(), $this->mem_id);
  121. if (empty($_oauth_data) || empty($_oauth_data['access_token'])) {
  122. Log::write(
  123. "func=".__FUNCTION__."&class=".__CLASS__."&mem_id=".$this->mem_id."&wx_id=".$_wx_id."&oauth_data="
  124. .json_encode($_oauth_data)
  125. ."&param="
  126. .$this->request->getContent(),
  127. LOG::ERROR
  128. );
  129. $_error_code = CommonStatus::INVALID_PARAMS;
  130. $this->error(CommonStatus::getMsg($_error_code), [], $_error_code);
  131. }
  132. $_session_key = $_oauth_data['access_token'];
  133. $_pc = new WXBizDataCrypt($_wx_id, $_session_key);
  134. $_err_code = $_pc->decryptData($_encrypted_data, $_iv, $_wx_data);
  135. if (ErrorCode::$OK != $_err_code) {
  136. Log::write(
  137. "func=".__FUNCTION__."&class=".__CLASS__."&err_code=".$_err_code,
  138. LOG::ERROR
  139. );
  140. $_error_code = CommonStatus::INVALID_PARAMS;
  141. $this->error(CommonStatus::getMsg($_error_code), [], $_error_code);
  142. }
  143. $_wx_data = json_decode($_wx_data, true);
  144. $_rdata = (new MemberOut())->upMemInfo($_mem_id, $_oauth_data['openid'], $_wx_data, $_type, $this->device_type);
  145. if (MemberStatus::NO_ERROR != $_rdata['code']) {
  146. $this->returnData($_rdata);
  147. }
  148. $_mem_data = $_rdata['data'];
  149. $this->mem_id = $_mem_data['mem_id'];
  150. $_data['user_token'] = (new Member())->updateToken($this->mem_id, $this->device_type);
  151. //发放收益
  152. $_ext = [
  153. 'app_id' => $_game_rq->getHAppId(),
  154. 'game_id' => $_game_rq->getHAppId()
  155. ];
  156. $_mil_model = new MemItgLogModel();
  157. $_data['is_old_member'] = CommonConst::CONST_TRUE;
  158. $_cnt = $_mil_model->getSubCnt($this->mem_id, IaConst::IA_OPEN_GAME);
  159. if ($_cnt == CommonConst::CONST_ZERO) {
  160. $_data['is_old_member'] = CommonConst::CONST_FALSE;
  161. }
  162. (new MemIa($this->mem_id))->doItgAct(IaConst::IA_OPEN_GAME, $_ext);
  163. $_data['get_novice_award'] = CommonConst::CONST_TRUE;
  164. $_data['get_favorite_award'] = CommonConst::CONST_TRUE;
  165. /* 是否领取了新手奖励 1否 2是 */
  166. $_game_rq = $this->setGameData();
  167. $_cnt = $_mil_model->getSubCnt($this->mem_id, IaConst::IA_OPEN_GAME);
  168. if ($_cnt == CommonConst::CONST_ZERO) {
  169. $_data['get_novice_award'] = CommonConst::CONST_FALSE;
  170. }
  171. /* 是否领取了收藏奖励 1否 2是 */
  172. $_cnt = $_mil_model->getSubCnt($this->mem_id, IaConst::IA_FAVORITE, $_game_rq->getHAppId());
  173. if ($_cnt == CommonConst::CONST_ZERO) {
  174. $_data['get_favorite_award'] = CommonConst::CONST_FALSE;
  175. }
  176. $_homepage_logic = new HomepageLogic();
  177. $_data['auth'] = $_homepage_logic->getAuthSet($_game_rq->getAppVer());
  178. $_rdata = (new MemberOut())->getBoxMemInfo($_mem_id, $_game_rq->getHAppId(), $_data);
  179. $this->returnData($_rdata);
  180. }
  181. /**
  182. * http://doc.1tsdk.com/159?page_id=4391
  183. * 小程序获取用户信息
  184. * 【域名】/mp/wx/getuserinfo
  185. */
  186. public function getMemInfo() {
  187. $this->checkLogin();
  188. $_mem_id = $this->mem_id;
  189. $_device_rq = $this->setDeviceData();
  190. $_is_ban = (new Ban())->checkMemEnv($this->mem_id, $_device_rq->getIp());
  191. if ($_is_ban != CommonStatus::NO_ERROR) {
  192. $_rdata['code'] = MemberStatus::MEM_ACCOUNT_ANOMALY;
  193. $_rdata['msg'] = $_is_ban;
  194. $_rdata['data'] = [];
  195. $this->returnData($_rdata);
  196. exit;
  197. }
  198. $_agent_id = (new UserModel())->getIdByMemId($_mem_id);
  199. $_agent_info = (new AgentCache())->getInfoByAgentId($_agent_id);
  200. if (empty($_agent_info) && $_agent_info['role_id'] != AgentConst::AGENT_ROLE_MP_MEMBER) {
  201. $_error_code = CommonStatus::INVALID_PARAMS;
  202. $this->error(CommonStatus::getMsg($_error_code), [], $_error_code);
  203. }
  204. $_data['get_novice_award'] = CommonConst::CONST_TRUE;
  205. $_data['get_favorite_award'] = CommonConst::CONST_TRUE;
  206. /* 是否领取了新手奖励 1否 2是 */
  207. $_game_rq = $this->setGameData();
  208. $_mil_model = new MemItgLogModel();
  209. $_cnt = $_mil_model->getSubCnt($this->mem_id, IaConst::IA_OPEN_GAME);
  210. if ($_cnt == CommonConst::CONST_ZERO) {
  211. $_data['get_novice_award'] = CommonConst::CONST_FALSE;
  212. }
  213. /* 是否领取了收藏奖励 1否 2是 */
  214. $_cnt = $_mil_model->getSubCnt($this->mem_id, IaConst::IA_FAVORITE, $_game_rq->getHAppId());
  215. if ($_cnt == CommonConst::CONST_ZERO) {
  216. $_data['get_favorite_award'] = CommonConst::CONST_FALSE;
  217. }
  218. /* 是否提现过 */
  219. $_data['red_msg'] = MpConfConst::MP_RED_MSG_ITG;
  220. $_settle_cnt = (new SettleModel())->getCnt($_agent_id);
  221. if (CommonConst::CONST_ZERO >= $_settle_cnt) {
  222. $_data['red_msg'] = MpConfConst::MP_RED_MSG_RP;
  223. }
  224. $_mem_out_model = new MemberOut();
  225. /* 显示红包显示为文字 或数字 */
  226. $_data['rp_type'] = $_mem_out_model->getHomeRp();
  227. $_homepage_logic = new HomepageLogic();
  228. $_data['auth'] = $_homepage_logic->getAuthSet($_game_rq->getAppVer());
  229. $_data['open_game_set'] = $_mem_out_model->getOpenGameSet();
  230. $_rdata = $_mem_out_model->getBoxMemInfo($_mem_id, $_game_rq->getHAppId(), $_data);
  231. $this->returnData($_rdata);
  232. }
  233. /**
  234. * http://doc.1tsdk.com/159?page_id=4653
  235. * 红包上展示的小程序信息915
  236. * 【域名】/mp/red/info
  237. */
  238. public function getRedInfo() {
  239. $_game_rq = $this->setGameData();
  240. $_game_data = GameCache::ins()->getInfoByAppId($_game_rq->getHAppId());
  241. $_rdata = [
  242. 'icon' => cmf_get_image_url($_game_data['icon']),
  243. 'name' => $_game_data['name'],
  244. ];
  245. $_code = CommonStatus::NO_ERROR;
  246. $this->success(CommonStatus::getMsg($_code), $_rdata, $_code);
  247. }
  248. }