CpRoleController.php 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198
  1. <?php
  2. /**
  3. * CpController.php UTF-8
  4. * CP玩家校验
  5. *
  6. * @date : 2018/10/13 17:52
  7. *
  8. * @license 这不是一个自由软件,未经授权不许任何使用和传播。
  9. * @author : wuyonghong <wyh@huosdk.com>
  10. * @version : HuoMp 1.0
  11. */
  12. namespace mini\sdk\controller;
  13. use huo\controller\common\HuoSession;
  14. use huo\controller\game\Game;
  15. use huo\controller\member\Role;
  16. use huo\model\log\MemRoleLogModel;
  17. use think\Controller;
  18. class CpRoleController extends Controller {
  19. private $mg_mem_id;
  20. private $mem_id;
  21. private $app_id;
  22. private $event;
  23. private $server_id;
  24. private $server_name;
  25. private $role_id;
  26. private $role_name;
  27. private $role_level;
  28. private $role_vip;
  29. private $sign;
  30. private $app_key;
  31. private $combat_num;
  32. function _initialize() {
  33. parent::_initialize();
  34. }
  35. private function cpReturn($status = '0', $msg = '请求参数错误') {
  36. $_rdata = array(
  37. 'status' => $status,
  38. 'msg' => $msg
  39. );
  40. echo json_encode($_rdata);
  41. exit;
  42. }
  43. /**
  44. * CP游戏角色信息上报
  45. * http://doc.1tsdk.com/160?page_id=4831
  46. * 【域名】/cp/role/report
  47. *
  48. */
  49. public function report() {
  50. /* 1 查询是否具有访问权限 */
  51. $_rs = $this->checkAuth();
  52. if (false == $_rs) {
  53. $this->cpReturn('100', '没有接口访问权限');
  54. }
  55. $_url_data = $this->request->param();
  56. $this->app_id = get_val($_url_data, 'app_id');
  57. $this->mg_mem_id = get_val($_url_data, 'mem_id');
  58. $this->event = get_val($_url_data, 'event');
  59. $this->server_id = get_val($_url_data, 'server_id');
  60. $this->server_name = get_val($_url_data, 'server_name');
  61. $this->role_id = get_val($_url_data, 'role_id');
  62. $this->role_name = get_val($_url_data, 'role_name');
  63. $this->role_level = get_val($_url_data, 'role_level');
  64. $this->combat_num = get_val($_url_data, 'combat_num');
  65. $this->role_vip = get_val($_url_data, 'role_vip');
  66. $this->sign = get_val($_url_data, 'sign');
  67. /* 0 检查参数 */
  68. $this->checkParam();
  69. /* 11 校验APPID */
  70. $this->checkAppid();
  71. /* 15 校验玩家 */
  72. $this->checkUser();
  73. /* 12 校验签名 */
  74. $this->verifySign();
  75. /* 16 检查访问次数 */
  76. $this->checkCnt();
  77. $_rs = $this->insertData();
  78. if (false !== $_rs) {
  79. $this->cpReturn('1', '上报成功');
  80. }
  81. }
  82. public function insertData() {
  83. $_role_class = new Role();
  84. $_role_model = new MemRoleLogModel();
  85. $_data['app_id'] = $this->app_id;
  86. $_data['mg_mem_id'] = $this->mg_mem_id;
  87. $_data['server_id'] = $this->server_id;
  88. $_data['server_name'] = $this->server_name;
  89. $_data['role_id'] = $this->role_id;
  90. $_data['role_name'] = $this->role_name;
  91. $_data['role_level'] = $this->role_level;
  92. $_data['role_vip'] = $this->role_vip;
  93. $_data['combat_num'] = $this->combat_num;
  94. $_data['money'] = 0;
  95. $_data['last_login_time'] = time();
  96. $_data['create_time'] = time();
  97. $_role_model->insertLog($_data);
  98. $_role_class->updateData($_data);
  99. }
  100. /**
  101. * @return bool
  102. */
  103. private function checkAppid() {
  104. $_app_key = (new Game())->getAppKey($this->app_id);
  105. if (empty($_app_key)) {
  106. $this->cpReturn('11', '游戏ID(app_id)错误');
  107. }
  108. $this->app_key = $_app_key;
  109. return true;
  110. }
  111. /**
  112. * @return bool
  113. */
  114. private function checkUser() {
  115. $_mg_mem_id = (new HuoSession($this->mem_id, $this->app_id))->getMgMemId();
  116. if ($_mg_mem_id != $this->mg_mem_id) {
  117. $this->cpReturn('15', '玩家未登陆');
  118. }
  119. return true;
  120. }
  121. /**
  122. * 1 校验参数
  123. */
  124. private function checkParam() {
  125. if (empty($this->app_id) || $this->app_id < 0) {
  126. $this->cpReturn('0', '请求参数为空 app_id');
  127. }
  128. if (empty($this->mg_mem_id) || $this->mg_mem_id < 0) {
  129. $this->cpReturn('0', '请求参数为空 mem_id');
  130. }
  131. if (empty($this->sign)) {
  132. $this->cpReturn('0', '请求参数为空 sign');
  133. }
  134. if (empty($this->event) || $this->event < 0) {
  135. $this->cpReturn('0', '请求参数错误 event');
  136. }
  137. }
  138. /**
  139. * 校验权限
  140. *
  141. * @return bool
  142. */
  143. private function checkAuth() {
  144. // $this->cpReturn('100','没有接口访问权限');
  145. return true;
  146. }
  147. /**
  148. * 检查次数
  149. *
  150. * @return bool
  151. */
  152. private function checkCnt() {
  153. // $this->cpReturn('16','访问太频繁,超过访问次数');
  154. $_cnt = HuoSession::getCpReleReportCnt($this->mg_mem_id);
  155. if (empty($_cnt)) {
  156. $_cnt = 0;
  157. }
  158. $_cnt++;
  159. HuoSession::setCpReleReportCnt($this->mg_mem_id, $_cnt);
  160. return true;
  161. }
  162. /*12 校验签名 */
  163. private function verifySign() {
  164. $_signstr = "app_id=".$this->app_id.
  165. "&combat_num=".$this->combat_num.
  166. "&event=".$this->event.
  167. "&mem_id=".$this->mg_mem_id.
  168. "&role_id=".$this->role_id.
  169. "&role_name=".$this->role_name.
  170. "&role_level=".$this->role_level.
  171. "&role_vip=".$this->role_vip.
  172. "&server_id=".$this->server_id.
  173. "&server_name=".$this->server_name.
  174. "&app_key=".$this->app_key;
  175. $_verify_sign = md5($_signstr);
  176. if ($this->sign != $_verify_sign) {
  177. $this->cpReturn('12', '签名校验不通过');
  178. }
  179. return true;
  180. }
  181. }