OauthController.php 9.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229
  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 mini\sdk\controller;
  13. use ban\Ban;
  14. use huo\controller\common\HuoCookie;
  15. use huo\controller\common\HuoSession;
  16. use huo\controller\game\GameCache;
  17. use huo\controller\pay\PayShow;
  18. use huo\controller\pay\PaySwitch;
  19. use huo\model\member\MemoauthModel;
  20. use huolib\constant\CommonConst;
  21. use huolib\constant\GameConst;
  22. use huolib\constant\OauthConst;
  23. use huolib\constant\OrderConst;
  24. use huolib\status\CommonStatus;
  25. use huolib\status\MemberStatus;
  26. use huolib\tool\SimpleSec;
  27. use huomp\controller\member\MemberOut;
  28. use huomp\controller\member\OauthOut;
  29. use huomp\controller\order\OrderOut;
  30. use huomp\model\game\GameMiniModel;
  31. use mini\common\controller\V2ApiBaseController;
  32. use think\Log;
  33. use wxapp\aes\ErrorCode;
  34. use wxapp\aes\WXBizDataCrypt;
  35. class OauthController extends V2ApiBaseController {
  36. function _initialize() {
  37. parent::_initialize();
  38. // Log::write(
  39. // $this->request->scheme().'://'.$this->request->server('HTTP_HOST').$this->request->server('REQUEST_URI').'?'
  40. // .$this->request->getContent(),
  41. // Log::LOG
  42. // );
  43. }
  44. /**
  45. * http://doc.1tsdk.com/159?page_id=4378
  46. * 小程序登陆
  47. * 【域名】/mp/wx/login
  48. */
  49. public function callbackWeixin() {
  50. $_code = get_val($this->rq_data, 'code');
  51. $_state = get_val($this->rq_data, 'state');
  52. $_game_rq = $this->setGameData();
  53. $_channel_rq = $this->setChannelData();
  54. $_device_rq = $this->setDeviceData();
  55. $_mem_rq = $this->setMemData();
  56. $_rs = (new OauthOut())->oauthLogin(
  57. $_code, $_state, $_game_rq, $_channel_rq, $_device_rq, $_mem_rq
  58. );
  59. if (MemberStatus::NO_ERROR != $_rs['code']) {
  60. $this->error($_rs['msg']);
  61. }
  62. $_mem_data = $_rs['data'];
  63. //$_mg_mem_id = (new HuoSession($this->mem_id, $_game_rq->getHAppId()))->getMgMemId();
  64. $_mg_mem_id = (new MemberOut())->getMgMemId($_game_rq->getHAppId(), $_mem_data['mem_id']);
  65. $_token = HuoCookie::getMemToken();
  66. $_image = (new OrderOut())->getMemAppQrCode($_mem_data['mem_id'], $_game_rq->getHAppId());
  67. if (empty($_image)) {
  68. $_image = '';
  69. }
  70. $_data = [
  71. 'mg_mem_id' => $_mg_mem_id,
  72. 'mem_id' => $_mem_data['mem_id'],
  73. 'agentgame' => $_mem_data['agent_game'],
  74. 'cp_user_token' => SimpleSec::encode($_token, config('CPAUTHCODE')),
  75. 'user_token' => $_token,
  76. 'image' => $_image,
  77. ];
  78. $_is_ban = (new Ban())->checkMemEnv($_mem_data['mem_id'], $_device_rq->getIp());
  79. if ($_is_ban != CommonStatus::NO_ERROR) {
  80. $_error_code = MemberStatus::MEM_ACCOUNT_ANOMALY;
  81. $this->error($_is_ban, [], $_error_code);
  82. }
  83. $_code = CommonStatus::NO_ERROR;
  84. $this->success(CommonStatus::getMsg($_code), $_data, $_code);
  85. }
  86. /**
  87. * http://doc.1tsdk.com/159?page_id=4379
  88. * 小程序上传用户信息
  89. * 【域名】/mp/wx/updateinfo
  90. */
  91. public function upMemInfo() {
  92. $this->checkLogin();
  93. $_mem_id = $this->mem_id;
  94. $_game_rq = $this->setGameData();
  95. /* 加解密数据 */
  96. $_encrypted_data = $this->request->param('encrypted_data/s', '');
  97. $_iv = $this->request->param('iv/s', '');
  98. $_wx_id = (new GameMiniModel())->getMpIdByAppId($_game_rq->getHAppId());
  99. $_oauth_data = (new MemoauthModel())->getInfoByAppMemId($_game_rq->getHAppId(), $this->mem_id);
  100. if (empty($_oauth_data) || empty($_oauth_data['access_token'])) {
  101. Log::write(
  102. "func=".__FUNCTION__."&class=".__CLASS__."&mem_id=".$this->mem_id."&wi_id=".$_wx_id."&oauth_data="
  103. .json_encode($_oauth_data)
  104. ."&param="
  105. .$this->request->getContent(),
  106. LOG::ERROR
  107. );
  108. $_error_code = CommonStatus::INVALID_PARAMS;
  109. $this->error(CommonStatus::getMsg($_error_code).'1', [], $_error_code);
  110. }
  111. $_session_key = $_oauth_data['access_token'];
  112. $_pc = new WXBizDataCrypt($_wx_id, $_session_key);
  113. $_err_code = $_pc->decryptData($_encrypted_data, $_iv, $_wx_data);
  114. if (ErrorCode::$OK != $_err_code) {
  115. $_type = OauthConst::OAUTH_MP;
  116. $_app_id = $_game_rq->getHAppId();
  117. $_oauth_data = (new MemoauthModel())->getInfoByAppMemId($_app_id, $this->mem_id);
  118. $_open_id = $_oauth_data['openid'];
  119. $_rdata = (new MemberOut())->getMemInfo($_mem_id, $_open_id, $_type, $this->token, $_app_id);
  120. $this->returnData($_rdata);
  121. // Log::write(
  122. // "func=".__FUNCTION__."&class=".__CLASS__."&wx_id=".$_wx_id."&session_key=".$_session_key."&err_code="
  123. // .$_err_code."&param="
  124. // .$this->request->getContent(),
  125. // LOG::ERROR
  126. // );
  127. // $_error_code = CommonStatus::INVALID_PARAMS;
  128. // $this->error(CommonStatus::getMsg($_error_code).'2', [], $_error_code);
  129. }
  130. $_wx_data = json_decode($_wx_data, true);
  131. $_type = OauthConst::OAUTH_MP;
  132. $_rdata = (new MemberOut())->upMemInfo(
  133. $_mem_id, $_oauth_data['openid'], $_wx_data, $_type, $this->device_type, $_game_rq->getHAppId()
  134. );
  135. if (CommonStatus::NO_ERROR != $_rdata['code']) {
  136. $this->returnData($_rdata);
  137. }
  138. $this->mem_id = $_rdata['data']['mem_id'];
  139. $_token = HuoCookie::getMemToken();
  140. HuoSession::setAppId($_token, $_game_rq->getHAppId());
  141. //$_mg_mem_id = (new HuoSession($this->mem_id, $_game_rq->getHAppId()))->getMgMemId();
  142. $_mg_mem_id = (new MemberOut())->getMgMemId($_game_rq->getHAppId(), $this->mem_id);
  143. $_rdata['data']['mg_mem_id'] = $_mg_mem_id;
  144. $_image = (new OrderOut())->getMemAppQrCode($_mem_id, $_game_rq->getHAppId());
  145. if (empty($_image)) {
  146. $_image = '';
  147. }
  148. $_rdata['data']['image'] = $_image;
  149. $this->returnData($_rdata);
  150. }
  151. /**
  152. * http://doc.1tsdk.com/159?page_id=4380
  153. * 小程序获取用户信息
  154. * 【域名】/mp/wx/getuserinfo
  155. */
  156. public function getMemInfo() {
  157. $this->checkLogin();
  158. $_channel_rq = $this->setChannelData();
  159. $_mem_rq = $this->setMemData();
  160. $_role_rq = $this->setRoleData();
  161. $_order_rq = $this->setOrderData();
  162. $_device_rq = $this->setDeviceData();
  163. $_game_rq = $this->setGameData();
  164. $_app_id = $_game_rq->getHAppId();
  165. $_oauth_data = (new MemoauthModel())->getInfoByAppMemId($_app_id, $this->mem_id);
  166. $_open_id = $_oauth_data['openid'];
  167. $_mem_id = $this->mem_id;
  168. $_is_ban = (new Ban())->checkMemEnv($this->mem_id, $_device_rq->getIp());
  169. if ($_is_ban != CommonStatus::NO_ERROR) {
  170. $_rdata['code'] = MemberStatus::MEM_ACCOUNT_ANOMALY;
  171. $_rdata['msg'] = $_is_ban;
  172. $_rdata['data'] = [];
  173. $this->returnData($_rdata);
  174. exit;
  175. }
  176. $_type = OauthConst::OAUTH_MP;
  177. $_rdata = (new MemberOut())->getMemInfo($_mem_id, $_open_id, $_type, $this->token, $_app_id);
  178. //$_mg_mem_id = (new HuoSession($this->mem_id, $_app_id))->getMgMemId();
  179. $_mg_mem_id = (new MemberOut())->getMgMemId($_game_rq->getHAppId(), $_mem_id);
  180. $_rdata['data']['mg_mem_id'] = $_mg_mem_id;
  181. HuoSession::setAppId($this->token, $_app_id);
  182. $_image = (new OrderOut())->getMemAppQrCode($_mem_id, $_app_id);
  183. if (empty($_image)) {
  184. $_image = '';
  185. }
  186. $_rdata['data']['image'] = $_image;
  187. $_pay_check = OrderConst::PAY_SWITCH_NO;
  188. /* 判断系统是否切换支付 */
  189. /* 判断支付切换 */
  190. if (GameConst::GAME_MP_GAME == $_game_rq->getPkgName()) {
  191. $_pay_switch = new PaySwitch();
  192. $_pay_check = $_pay_switch->getPaySwitch(
  193. $_order_rq, $_role_rq, $_mem_rq, $_game_rq, $_channel_rq, $_device_rq
  194. );
  195. $_pay_check = $_pay_switch->checkShowPay($_pay_check, $_device_rq);
  196. if ($this->request->ip() == '120.236.141.221') {
  197. $_pay_show = new PayShow();
  198. $_show_status = $_pay_show->getPayShow(
  199. $_order_rq, $_role_rq, $_mem_rq, $_game_rq, $_channel_rq, $_device_rq
  200. );
  201. if (CommonConst::STATUS_NO == $_show_status) {
  202. $_pay_check = OrderConst::PAY_SWITCH_IOS_NO;
  203. }
  204. }
  205. }
  206. if (OrderConst::PAY_SWITCH_NO == $_pay_check
  207. && in_array(
  208. $_game_rq->getHAppId(), ['81234712', '81234716', '81234715']
  209. )) {
  210. $_pay_check = OrderConst::PAY_SWITCH_IOS_NO;
  211. }
  212. /* ip屏蔽处理 */
  213. if ($this->request->ip() == '221.229.173.156') {
  214. $_pay_check = OrderConst::PAY_SWITCH_IOS_NO;
  215. }
  216. $_rdata['data']['check'] = $_pay_check;
  217. /* IOS 充值提示 */
  218. $_game_data = GameCache::ins()->getInfoByAppId($_app_id);
  219. $_rdata['data']['ios_text'] = empty($_game_data['ext_info']['ios_text']) ? ''
  220. : $_game_data['ext_info']['ios_text'];
  221. $this->returnData($_rdata);
  222. }
  223. }