Connect.php 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313
  1. <?php
  2. namespace app\api\controller;
  3. use think\facade\Lang;
  4. /**
  5. * ============================================================================
  6. * DSMall多用户商城
  7. * ============================================================================
  8. * 版权所有 2014-2028 长沙德尚网络科技有限公司,并保留所有权利。
  9. * 网站地址: http://www.csdeshang.com
  10. * ----------------------------------------------------------------------------
  11. * 这不是一个自由软件!您只能在不用于商业目的的前提下对程序代码进行修改和使用 .
  12. * 不允许对程序代码以任何形式任何目的的再发布。
  13. * ============================================================================
  14. * 第三方登录控制器
  15. */
  16. class Connect extends MobileMall
  17. {
  18. public function initialize()
  19. {
  20. parent::initialize(); // TODO: Change the autogenerated stub
  21. Lang::load(base_path() . 'home/lang/' . config('lang.default_lang') . '/login.lang.php');
  22. }
  23. /**
  24. * @api {POST} api/Connect/get_sms_captcha 短信动态码
  25. * @apiVersion 1.0.0
  26. * @apiGroup Connect
  27. *
  28. * @apiParam {String} phone 手机号
  29. * @apiParam {String} type 短信类型 1为注册,2为登录,3为找回密码
  30. *
  31. * @apiSuccess {String} code 返回码,10000为成功
  32. * @apiSuccess {String} message 返回消息
  33. * @apiSuccess {Object} result 返回数据
  34. * @apiSuccess {Int} result.sms_time 发送倒计时
  35. */
  36. public function get_sms_captcha()
  37. {
  38. $state = lang('send_fail');
  39. $sms_mobile = input('param.phone');
  40. if (strlen($sms_mobile) == 11) {
  41. $log_type = input('param.type');//短信类型:1为注册,2为登录,3为找回密码
  42. $state = 'true';
  43. $member_model = model('member');
  44. $member = $member_model->getMemberInfo(array('member_mobile' => $sms_mobile));
  45. $sms_captcha = rand(100000, 999999);
  46. switch ($log_type) {
  47. case '1':
  48. if (config('ds_config.sms_register') != 1) {
  49. $state = lang('system_obile_registration_function');
  50. }
  51. if (!empty($member)) {//检查手机号是否已被注册
  52. $state = '当前手机号已被注册,请更换其他号码。';
  53. }
  54. $mailmt_code = 'register';
  55. break;
  56. case '2':
  57. if (config('ds_config.sms_login') != 1) {
  58. $state = lang('enable_mobile_phone_login');
  59. }
  60. if (empty($member)) {//检查手机号是否已绑定会员
  61. $state = lang('check_correct_number');
  62. }
  63. $mailmt_code = 'login';
  64. break;
  65. case '3':
  66. if (config('ds_config.sms_password') != 1) {
  67. $state = lang('mobile_back_password');
  68. }
  69. if (empty($member)) {//检查手机号是否已绑定会员
  70. $state = lang('check_correct_number');
  71. }
  72. $mailmt_code = 'reset_password';
  73. break;
  74. default:
  75. $state = lang('param_error');
  76. break;
  77. }
  78. if ($state == 'true') {
  79. $smslog_model = model('smslog');
  80. $mailtemplates_model = model('mailtemplates');
  81. $tpl_info = $mailtemplates_model->getTplInfo(array('mailmt_code' => $mailmt_code));
  82. $param = array();
  83. $param['code'] = $sms_captcha;
  84. $ten_param = array($param['code']);
  85. $message = ds_replace_text($tpl_info['mailmt_content'], $param);
  86. $smslog_param = array(
  87. 'ali_template_code' => $tpl_info['ali_template_code'],
  88. 'ali_template_param' => $param,
  89. 'ten_template_code' => $tpl_info['ten_template_code'],
  90. 'ten_template_param' => $ten_param,
  91. 'message' => $message,
  92. );
  93. $result = $smslog_model->sendSms($sms_mobile, $smslog_param, $log_type, $sms_captcha, $member['member_id'], $member['member_name']);
  94. if ($result['state']) {
  95. ds_json_encode(10000, lang('send_success'), array('sms_time' => 60));
  96. exit;
  97. } else {
  98. $state = $result['message'];
  99. }
  100. }
  101. }
  102. ds_json_encode(10001, $state);
  103. }
  104. /**
  105. * 验证注册动态码
  106. */
  107. public function check_sms_captcha()
  108. {
  109. $state = lang('validation_fails');
  110. $phone = input('param.phone');
  111. $captcha = input('param.captcha');
  112. $log_type = input('param.type');
  113. if (strlen($phone) == 11) {
  114. $state = 'true';
  115. $condition = array();
  116. $condition[] = array('smslog_phone', '=', $phone);
  117. $condition[] = array('smslog_captcha', '=', $captcha);
  118. $condition[] = array('smslog_type', '=', $log_type);
  119. $smslog_model = model('smslog');
  120. $sms_log = $smslog_model->getSmsInfo($condition);
  121. if (empty($sms_log) || ($sms_log['smslog_smstime'] < TIMESTAMP - 1800)) {//半小时内进行验证为有效
  122. $state = lang('dynamic_code_expired');
  123. ds_json_encode(10001, $state);
  124. }
  125. ds_json_encode(10000, '', $state);
  126. }
  127. ds_json_encode(10001, $state);
  128. }
  129. /**
  130. * @api {POST} api/Connect/sms_register 手机注册
  131. * @apiVersion 1.0.0
  132. * @apiGroup Connect
  133. *
  134. * @apiParam {String} phone 手机号
  135. * @apiParam {String} captcha 验证码
  136. * @apiParam {String} password 密码
  137. * @apiParam {Int} inviter_id 推荐人id
  138. * @apiParam {String} client 客户端类型
  139. *
  140. * @apiSuccess {String} code 返回码,10000为成功
  141. * @apiSuccess {String} message 返回消息
  142. * @apiSuccess {Object} result 返回数据
  143. * @apiSuccess {Int} result.state 注册状态 1成功0失败
  144. * @apiSuccess {String} result.username 用户名称
  145. * @apiSuccess {String} result.key 用户token
  146. * @apiSuccess {Object} result.info 用户信息
  147. * @apiSuccess {Int} result.info.member_id 用户ID
  148. * @apiSuccess {Object} result.info.member_name 用户名称
  149. * @apiSuccess {Object} result.info.member_truename 真实姓名
  150. * @apiSuccess {Object} result.info.member_avatar 头像
  151. * @apiSuccess {Object} result.info.member_points 积分
  152. * @apiSuccess {Object} result.info.member_email 邮箱
  153. * @apiSuccess {Object} result.info.member_mobile 手机号
  154. * @apiSuccess {Object} result.info.member_qq QQ
  155. * @apiSuccess {Object} result.info.member_ww 旺旺
  156. */
  157. public function sms_register()
  158. {
  159. $phone = input('post.phone');
  160. $captcha = input('post.captcha');
  161. $password = input('post.password');
  162. $client = input('post.client');
  163. $inviter_id = intval(input('post.inviter_id'));
  164. $logic_connect_api = model('connectapi', 'logic');
  165. $state_data = $logic_connect_api->smsRegister($phone, $captcha, $password, $client, $inviter_id);
  166. if ($state_data['state'] == '1') {
  167. $state_data['info'] = $this->getMemberUser($state_data['info']);
  168. ds_json_encode(10000, '', $state_data);
  169. } else {
  170. ds_json_encode(10001, $state_data['msg']);
  171. }
  172. }
  173. /**
  174. * 手机验证码登录
  175. */
  176. public function sms_login()
  177. {
  178. $member_mobile = input('post.usermobile');
  179. $mobilecode = input('post.mobilecode');
  180. $client = input('post.client');
  181. if (empty($member_mobile) || empty($mobilecode)) {
  182. ds_json_encode(10001, lang('param_error'));
  183. }
  184. if (config('ds_config.sms_login') != 1) {
  185. ds_json_encode(10001, lang('enable_mobile_phone_login'));
  186. }
  187. $condition = array();
  188. $condition[] = array('smslog_phone', '=', $member_mobile);
  189. $condition[] = array('smslog_captcha', '=', $mobilecode);
  190. $condition[] = array('smslog_type', '=', 2);
  191. $smslog_model = model('smslog');
  192. $sms_log = $smslog_model->getSmsInfo($condition);
  193. if (empty($sms_log) || ($sms_log['smslog_smstime'] < TIMESTAMP - 1800)) {//半小时内进行验证为有效
  194. ds_json_encode(10001, lang('dynamic_code_expired'));
  195. }
  196. $member_model = model('member');
  197. $member = $member_model->getMemberInfo(array('member_mobile' => $member_mobile)); //获取当前手机号的用户信息
  198. if (!empty($member)) {
  199. if (!$member['member_state']) {//1为启用 0 为禁用
  200. ds_json_encode(10001, lang('login_index_account_stop'));
  201. }
  202. $token = $member_model->getBuyerToken($member['member_id'], $member['member_name'], $client);
  203. if ($token) {
  204. $result = array();
  205. $result['token'] = $token;
  206. $result['info'] = $this->getMemberUser($member);
  207. //是否有卖家账户
  208. $seller_model = model('seller');
  209. $seller_info = $seller_model->getSellerInfo(array('member_id' => $member['member_id']));
  210. if ($seller_info) {
  211. $token = Sellerlogin::_get_seller_token($seller_info['seller_id'], $seller_info['seller_name'], $client);
  212. if (!$token) {
  213. ds_json_encode(10001, lang('login_fail'));
  214. }
  215. //读取店铺信息
  216. $store_model = model('store');
  217. $store_info = $store_model->getStoreInfoByID($seller_info['store_id']);
  218. $result['seller_token'] = $token;
  219. $result['seller_info'] = $this->getSellerUser($seller_info, $store_info);
  220. $result['info']['store_id'] = $store_info['store_id'];
  221. }
  222. ds_json_encode(10000, '', $result);
  223. } else {
  224. ds_json_encode(10001, lang('param_error'));
  225. }
  226. } else {
  227. ds_json_encode(10001, lang('mobile_not_exist'));
  228. }
  229. }
  230. /**
  231. * @api {POST} api/Connect/find_password 手机找回密码
  232. * @apiVersion 1.0.0
  233. * @apiGroup Connect
  234. *
  235. * @apiHeader {String} X-DS-KEY 用户授权token
  236. *
  237. * @apiParam {String} phone 手机号
  238. * @apiParam {String} captcha 验证码
  239. * @apiParam {String} password 密码
  240. * @apiParam {String} client 用户端 wap手机端
  241. *
  242. * @apiSuccess {String} code 返回码,10000为成功
  243. * @apiSuccess {String} message 返回消息
  244. * @apiSuccess {Object} result 返回数据
  245. * @apiSuccess {Int} result.state 找回密码状态 1成功0失败
  246. * @apiSuccess {String} result.username 用户名称
  247. * @apiSuccess {String} result.key 用户token
  248. * @apiSuccess {Int} result.info.member_id 用户ID
  249. * @apiSuccess {String} result.info.member_name 用户名称
  250. * @apiSuccess {String} result.info.member_truename 真实姓名
  251. * @apiSuccess {String} result.info.member_avatar 头像
  252. * @apiSuccess {String} result.info.member_points 积分
  253. * @apiSuccess {String} result.info.member_email 邮箱
  254. * @apiSuccess {String} result.info.member_mobile 手机号
  255. * @apiSuccess {String} result.info.member_qq QQ
  256. * @apiSuccess {String} result.info.member_ww 旺旺
  257. */
  258. public function find_password()
  259. {
  260. $phone = input('post.phone');
  261. $captcha = input('post.captcha');
  262. $password = input('post.password');
  263. $client = input('post.client');
  264. $logic_connect_api = model('connectapi', 'logic');
  265. $state_data = $logic_connect_api->smsPassword($phone, $captcha, $password, $client);
  266. if ($state_data['state']) {
  267. unset($state_data['state']);
  268. unset($state_data['msg']);
  269. $state_data['info'] = $this->getMemberUser($state_data['info']);
  270. ds_json_encode(10000, '', $state_data);
  271. } else {
  272. ds_json_encode(10001, $state_data['msg']);
  273. }
  274. }
  275. /**
  276. * 登录开关状态
  277. */
  278. public function get_state()
  279. {
  280. $logic_connect_api = model('connectapi', 'logic');
  281. $state_array = $logic_connect_api->getStateInfo();
  282. $key = input('param.t');
  283. if (trim($key) != '' && array_key_exists($key, $state_array)) {
  284. ds_json_encode(10000, '', $state_array[$key]);
  285. } else {
  286. ds_json_encode(10001, lang('param_error'));
  287. }
  288. }
  289. }