Member.php 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626
  1. <?php
  2. namespace app\common\model;
  3. use app\common\model\jarc\User;
  4. use think\facade\Db;
  5. /**
  6. * ============================================================================
  7. * DSMall多用户商城
  8. * ============================================================================
  9. * 版权所有 2014-2028 长沙德尚网络科技有限公司,并保留所有权利。
  10. * 网站地址: http://www.csdeshang.com
  11. * ----------------------------------------------------------------------------
  12. * 这不是一个自由软件!您只能在不用于商业目的的前提下对程序代码进行修改和使用 .
  13. * 不允许对程序代码以任何形式任何目的的再发布。
  14. * ============================================================================
  15. * 数据层模型
  16. */
  17. class Member extends BaseModel
  18. {
  19. public $page_info;
  20. /**
  21. * 会员详细信息(查库)
  22. * @access public
  23. * @author csdeshang
  24. * @param array $condition 条件
  25. * @param string $field 字段
  26. * @return array
  27. */
  28. public function getMemberInfo($condition, $field = '*')
  29. {
  30. $res = Db::name('member')->field($field)->where($condition)->find();
  31. return $res;
  32. }
  33. /**
  34. * 取得会员详细信息(优先查询缓存)
  35. * 如果未找到,则缓存所有字段
  36. * @access public
  37. * @author csdeshang
  38. * @param int $member_id 会员ID
  39. * @return array
  40. */
  41. public function getMemberInfoByID($member_id)
  42. {
  43. // $member_info = rcache($member_id, 'member');
  44. $member_info = '';
  45. if (empty($member_info)) {
  46. $member_info = $this->getMemberInfo(['member_id' => $member_id], '*');
  47. if (empty($member_info)) {
  48. return [];
  49. }
  50. $member_info['point'] = 0;
  51. if (!empty($member_info['member_wxunionid'])) {
  52. $user = User::where('union_id', $member_info['member_wxunionid'])->find();
  53. if (!empty($user)) {
  54. $member_info['point'] = $user['score'];
  55. }
  56. }
  57. // wcache($member_id, $member_info, 'member');
  58. }
  59. return $member_info;
  60. }
  61. /**
  62. * 会员列表
  63. * @access public
  64. * @author csdeshang
  65. * @param array $condition 条件
  66. * @param string $field 字段
  67. * @param number $pagesize 分页
  68. * @param string $order 排序
  69. * @return array
  70. */
  71. public function getMemberList($condition = [], $field = '*', $pagesize = 0, $order = 'member_id desc')
  72. {
  73. if ($pagesize) {
  74. $member_list = Db::name('member')->where($condition)->order($order)->paginate(['list_rows' => $pagesize, 'query' => request()->param()], false);
  75. $this->page_info = $member_list;
  76. return $member_list->items();
  77. } else {
  78. return Db::name('member')->where($condition)->order($order)->select()->toArray();
  79. }
  80. }
  81. /**
  82. * 会员数量
  83. * @access public
  84. * @author csdeshang
  85. * @param array $condition 查询条件
  86. * @return int
  87. */
  88. public function getMemberCount($condition)
  89. {
  90. return Db::name('member')->where($condition)->count();
  91. }
  92. /**
  93. * 编辑会员
  94. * @access public
  95. * @author csdeshang
  96. * @param array $condition 检索条件
  97. * @param array $data 数据
  98. * @return bool
  99. */
  100. public function editMember($condition, $data, $member_id = 0)
  101. {
  102. $update = Db::name('member')->where($condition)->update($data);
  103. if ($update && $member_id) {
  104. dcache($member_id, 'member');
  105. }
  106. return $update;
  107. }
  108. /**
  109. * 登录时创建会话SESSION
  110. * @access public
  111. * @author csdeshang
  112. * @param type $member_info 会员信息
  113. * @param type $reg 规则
  114. * @return type
  115. */
  116. public function createSession($member_info = [], $reg = false)
  117. {
  118. if (empty($member_info) || !is_array($member_info)) {
  119. return;
  120. }
  121. $member_gradeinfo = model('member')->getOneMemberGrade(intval($member_info['member_exppoints']));
  122. $member_info = array_merge($member_info, $member_gradeinfo);
  123. session('is_login', '1');
  124. session('member_id', $member_info['member_id']);
  125. session('member_name', $member_info['member_name']);
  126. session('member_nickname', $member_info['member_nickname']);
  127. session('member_email', $member_info['member_email']);
  128. session('is_buy', isset($member_info['is_buylimit']) ? $member_info['is_buylimit'] : 1);
  129. session('avatar', $member_info['member_avatar']);
  130. session('level', isset($member_info['level']) ? $member_info['level'] : '');
  131. session('level_name', isset($member_info['level_name']) ? $member_info['level_name'] : '');
  132. session('member_exppoints', $member_info['member_exppoints']); //经验值
  133. session('member_points', $member_info['member_points']); //积分值
  134. // 头衔COOKIE
  135. $this->set_avatar_cookie();
  136. $seller_info = model('seller')->getSellerInfo(['member_id' => session('member_id')]);
  137. if ($seller_info) {
  138. session('store_id', $seller_info['store_id']);
  139. } else {
  140. session('store_id', NULL);
  141. }
  142. if (trim($member_info['member_qqopenid'])) {
  143. session('openid', $member_info['member_qqopenid']);
  144. }
  145. if (trim($member_info['member_sinaopenid'])) {
  146. session('slast_key.uid', $member_info['member_sinaopenid']);
  147. }
  148. if (trim($member_info['member_wxopenid'])) {
  149. session('wxopenid', $member_info['member_wxopenid']);
  150. }
  151. if (trim($member_info['member_wxunionid'])) {
  152. session('wxunionid', $member_info['member_wxunionid']);
  153. }
  154. if (!$reg) {
  155. //添加会员积分
  156. $this->addPoint($member_info);
  157. //添加会员经验值
  158. $this->addExppoint($member_info);
  159. }
  160. if (!empty($member_info['member_logintime'])) {
  161. $update_info = [
  162. 'member_loginnum' => ($member_info['member_loginnum'] + 1),
  163. 'member_logintime' => TIMESTAMP,
  164. 'member_old_logintime' => $member_info['member_logintime'],
  165. 'member_login_ip' => request()->ip(),
  166. 'member_old_login_ip' => $member_info['member_login_ip'],
  167. ];
  168. $this->editMember(['member_id' => $member_info['member_id']], $update_info, $member_info['member_id']);
  169. }
  170. cookie('cart_goods_num', '', -3600);
  171. // cookie中的浏览记录存入数据库
  172. model('goodsbrowse')->mergeGoodsbrowse(session('member_id'), session('store_id'));
  173. if (isset($member_info['auto_login']) && ($member_info['auto_login'] == 1)) {
  174. $this->auto_login();
  175. }
  176. }
  177. /**
  178. * 7天内自动登录
  179. * @access public
  180. * @author csdeshang
  181. */
  182. public function auto_login()
  183. {
  184. // 自动登录标记 保存7天
  185. cookie('auto_login', ds_encrypt(session('member_id'), MD5_KEY), 7 * 24 * 60 * 60);
  186. }
  187. /**
  188. * 设置cookie
  189. * @access public
  190. * @author csdeshang
  191. */
  192. public function set_avatar_cookie()
  193. {
  194. cookie('member_avatar', session('avatar'), 365 * 24 * 60 * 60);
  195. }
  196. /**
  197. * 获取会员信息
  198. * @access public
  199. * @author csdeshang
  200. * @param array $condition 会员条件
  201. * @param string $field 显示字段
  202. * @return array 数组格式的返回结果
  203. */
  204. public function infoMember($condition, $field = '*')
  205. {
  206. if (empty($condition))
  207. return false;
  208. $member_info = Db::name('member')->where($condition)->field($field)->find();
  209. return $member_info;
  210. }
  211. /**
  212. * 注册
  213. * @access public
  214. * @author csdeshang
  215. * @param type $register_info
  216. * @return type
  217. */
  218. public function register($register_info)
  219. {
  220. // 验证用户名是否重复
  221. $check_member_name = $this->getMemberInfo(['member_name' => $register_info['member_name']]);
  222. if (is_array($check_member_name) and count($check_member_name) > 0) {
  223. return ['error' => '用户名已存在'];
  224. }
  225. $insert_id = $this->addMember($register_info);
  226. if ($insert_id) {
  227. $this->addMemberAfter($insert_id, $register_info);
  228. $member_info = Db::name('member')->where('member_id', $insert_id)->find();
  229. //是否有注册红包
  230. $bonus_model = model('bonus');
  231. $bonus = Db::name('bonus')->where('bonus_type', 2)->where('bonus_state', 1)->where('bonus_begintime', '<', TIMESTAMP)->where('bonus_endtime', '>', TIMESTAMP)->find();
  232. if ($bonus) {
  233. //获取未领取单个红包
  234. $bonusreceive = Db::name('bonusreceive')->where('bonus_id', $bonus['bonus_id'])->where('member_id', 0)->find();
  235. if (!empty($bonusreceive)) {
  236. $res = $bonus_model->receiveBonus($member_info, $bonus, $bonusreceive, '领取注册红包');
  237. if (!$res['code']) {
  238. return ['error' => $res['msg']];
  239. }
  240. }
  241. }
  242. return $member_info;
  243. } else {
  244. return ['error' => '注册失败'];
  245. }
  246. }
  247. /**
  248. * 新增用户后,赠送积分,添加相册等其他操作,主要是针对于 新增用户注册获得积分,等奖励信息的处理
  249. * @access public
  250. * @author csdeshang
  251. * @param type $member_id 会员ID
  252. * @param type $member_info 会员信息
  253. * @return type
  254. */
  255. public function addMemberAfter($member_id, $member_info)
  256. {
  257. //添加会员积分
  258. if (config('ds_config.points_isuse')) {
  259. model('points')->savePointslog('regist', ['pl_memberid' => $member_id, 'pl_membername' => $member_info['member_name']], false);
  260. }
  261. if (isset($member_info['inviter_id'])) {
  262. //向上查询3级更新分销成员数
  263. Db::name('inviter')->where('inviter_id=' . $member_info['inviter_id'])->inc('inviter_1_quantity')->update();
  264. $inviter_2 = Db::name('member')->where('member_id=' . $member_info['inviter_id'])->value('inviter_id');
  265. if ($inviter_2) {
  266. Db::name('inviter')->where('inviter_id=' . $inviter_2)->inc('inviter_2_quantity')->update();
  267. $inviter_3 = Db::name('member')->where('member_id=' . $inviter_2)->value('inviter_id');
  268. if ($inviter_3) {
  269. Db::name('inviter')->where('inviter_id=' . $inviter_3)->inc('inviter_3_quantity')->update();
  270. }
  271. }
  272. //添加邀请人(推荐人)会员积分
  273. $inviter_name = ds_getvalue_byname('member', 'member_id', $member_info['inviter_id'], 'member_name');
  274. if ($inviter_name) {
  275. model('points')->savePointslog('inviter', [
  276. 'pl_memberid' => $member_info['inviter_id'], 'pl_membername' => $inviter_name,
  277. 'invited' => $member_info['member_name'],
  278. ]);
  279. }
  280. }
  281. }
  282. /**
  283. * 注册商城会员
  284. * @access public
  285. * @author csdeshang
  286. * @param array $data 会员信息
  287. * @return array 数组格式的返回结果
  288. */
  289. public function addMember($data)
  290. {
  291. if (empty($data)) {
  292. return false;
  293. }
  294. try {
  295. Db::startTrans();
  296. $member_info = [];
  297. $member_info['member_name'] = $data['member_name'];
  298. $member_info['member_password'] = md5(trim($data['member_password']));
  299. if (isset($data['member_email'])) {
  300. $member_info['member_email'] = $data['member_email'];
  301. }
  302. $member_info['member_addtime'] = TIMESTAMP;
  303. $member_info['member_logintime'] = TIMESTAMP;
  304. $member_info['member_old_logintime'] = TIMESTAMP;
  305. $member_info['member_login_ip'] = request()->ip();
  306. $member_info['member_old_login_ip'] = $member_info['member_login_ip'];
  307. $member_info['member_paypwd'] = md5('123456');//注册会员默认支付密码为123456
  308. if (isset($data['member_truename'])) {
  309. $member_info['member_truename'] = $data['member_truename'];
  310. }
  311. if (isset($data['member_nickname'])) {
  312. $member_info['member_nickname'] = $data['member_nickname'];
  313. } else {
  314. $member_info['member_nickname'] = config('ds_config.site_name') . '_' . rand(100000, 999999);
  315. }
  316. if (isset($data['member_qq'])) {
  317. $member_info['member_qq'] = $data['member_qq'];
  318. }
  319. if (isset($data['member_sex'])) {
  320. $member_info['member_sex'] = $data['member_sex'];
  321. }
  322. if (isset($data['member_avatar'])) {
  323. $member_info['member_avatar'] = $data['member_avatar'];
  324. }
  325. if (isset($data['member_qqopenid'])) {
  326. $member_info['member_qqopenid'] = $data['member_qqopenid'];
  327. }
  328. if (isset($data['member_qqinfo'])) {
  329. $member_info['member_qqinfo'] = $data['member_qqinfo'];
  330. }
  331. if (isset($data['member_sinaopenid'])) {
  332. $member_info['member_sinaopenid'] = $data['member_sinaopenid'];
  333. }
  334. if (isset($data['member_sinainfo'])) {
  335. $member_info['member_sinainfo'] = $data['member_sinainfo'];
  336. }
  337. //添加邀请人(推荐人)会员积分
  338. if (isset($data['inviter_id']) && intval($data['inviter_id']) > 0) {
  339. $member_info['inviter_id'] = intval($data['inviter_id']);
  340. }
  341. // 手机注册登录绑定
  342. if (isset($data['member_mobilebind'])) {
  343. $member_info['member_mobile'] = $data['member_mobile'];
  344. $member_info['member_mobilebind'] = $data['member_mobilebind'];
  345. }
  346. if (isset($data['member_wxunionid'])) {
  347. $member_info['member_wxunionid'] = $data['member_wxunionid'];
  348. $member_info['member_wxinfo'] = $data['member_wxinfo'];
  349. $member_info['member_wxopenid'] = $data['member_wxopenid'];
  350. }
  351. $insert_id = Db::name('member')->insertGetId($member_info);
  352. if (!$insert_id) {
  353. throw new \think\Exception('', 10006);
  354. }
  355. // 添加默认相册
  356. $insert = [];
  357. $insert['ac_name'] = '买家秀';
  358. $insert['member_id'] = $insert_id;
  359. $insert['ac_des'] = '买家秀默认相册';
  360. $insert['ac_sort'] = 255;
  361. $insert['ac_isdefault'] = 1;
  362. $insert['ac_uploadtime'] = TIMESTAMP;
  363. $result = Db::name('snsalbumclass')->insertGetId($insert);
  364. Db::commit();
  365. return $insert_id;
  366. } catch (Exception $e) {
  367. Db::rollback();
  368. return false;
  369. }
  370. }
  371. /**
  372. * 会员登录检查
  373. * @access public
  374. * @author csdeshang
  375. * @return bool
  376. */
  377. public function checkloginMember()
  378. {
  379. if (session('is_login') == '1') {
  380. @header("Location: " . (string)url('home/Member/index'));
  381. exit();
  382. }
  383. }
  384. /**
  385. * 检查会员是否允许举报商品
  386. * @access public
  387. * @author csdeshang
  388. * @param type $member_id 会员id
  389. * @return boolean
  390. */
  391. public function isMemberAllowInform($member_id)
  392. {
  393. $condition = [];
  394. $condition[] = ['member_id', '=', $member_id];
  395. $member_info = $this->getMemberInfo($condition, 'inform_allow');
  396. if (intval($member_info['inform_allow']) === 1) {
  397. return true;
  398. } else {
  399. return false;
  400. }
  401. }
  402. /**
  403. * 添加会员积分
  404. * @access public
  405. * @author csdeshang
  406. * @param type $member_info 会员信息
  407. * @return type
  408. */
  409. public function addPoint($member_info)
  410. {
  411. if (!config('ds_config.points_isuse') || empty($member_info))
  412. return;
  413. //一天内只有第一次登录赠送积分
  414. if (trim(@date('Y-m-d', $member_info['member_logintime'])) == trim(date('Y-m-d')))
  415. return;
  416. //加入队列
  417. $queue_content = [];
  418. $queue_content['member_id'] = $member_info['member_id'];
  419. $queue_content['member_name'] = $member_info['member_name'];
  420. \mall\queue\QueueClient::push('addPoint', $queue_content);
  421. }
  422. /**
  423. * 添加会员经验值
  424. * @access public
  425. * @author csdeshang
  426. * @param unknown $member_info 会员信息
  427. */
  428. public function addExppoint($member_info)
  429. {
  430. if (empty($member_info))
  431. return;
  432. //一天内只有第一次登录赠送经验值
  433. if (trim(@date('Y-m-d', $member_info['member_logintime'])) == trim(date('Y-m-d')))
  434. return;
  435. //加入队列
  436. $queue_content = [];
  437. $queue_content['member_id'] = $member_info['member_id'];
  438. $queue_content['member_name'] = $member_info['member_name'];
  439. \mall\queue\QueueClient::push('addExppoint', $queue_content);
  440. }
  441. /**
  442. * 取得会员安全级别
  443. * @access public
  444. * @author csdeshang
  445. * @param array $member_info 会员信息
  446. */
  447. public function getMemberSecurityLevel($member_info = [])
  448. {
  449. $tmp_level = 0;
  450. if ($member_info['member_emailbind'] == '1') {
  451. $tmp_level += 1;
  452. }
  453. if ($member_info['member_mobilebind'] == '1') {
  454. $tmp_level += 1;
  455. }
  456. if ($member_info['member_paypwd'] != '') {
  457. $tmp_level += 1;
  458. }
  459. return $tmp_level;
  460. }
  461. /**
  462. * 获得会员等级
  463. * @access public
  464. * @author csdeshang
  465. * @param bool $show_progress 是否计算其当前等级进度
  466. * @param int $exppoints 会员经验值
  467. * @param array $cur_level 会员当前等级
  468. * @return type
  469. */
  470. public function getMemberGradeArr($show_progress = false, $exppoints = 0, $cur_level = '')
  471. {
  472. $member_grade = config('ds_config.member_grade') ? unserialize(config('ds_config.member_grade')) : [];
  473. //处理会员等级进度
  474. if ($member_grade && $show_progress) {
  475. $is_max = false;
  476. if ($cur_level === '') {
  477. $cur_gradearr = $this->getOneMemberGrade($exppoints, false, $member_grade);
  478. $cur_level = $cur_gradearr['level'];
  479. }
  480. foreach ($member_grade as $k => $v) {
  481. if ($cur_level == $v['level']) {
  482. $v['is_cur'] = true;
  483. }
  484. $member_grade[$k] = $v;
  485. }
  486. }
  487. return $member_grade;
  488. }
  489. /**
  490. * 获得某一会员等级
  491. * @access public
  492. * @author csdeshang
  493. * @param int $exppoints 会员经验值
  494. * @param bool $show_progress 是否计算其当前等级进度
  495. * @param array $member_grade 会员等级
  496. * @return type
  497. */
  498. public function getOneMemberGrade($exppoints, $show_progress = false, $member_grade = [])
  499. {
  500. if (!$member_grade) {
  501. $member_grade = config('ds_config.member_grade') ? unserialize(config('ds_config.member_grade')) : [];
  502. }
  503. if (empty($member_grade)) {//如果会员等级设置为空
  504. $grade_arr['level'] = -1;
  505. $grade_arr['level_name'] = '暂无等级';
  506. return $grade_arr;
  507. }
  508. $exppoints = intval($exppoints);
  509. $grade_arr = [];
  510. if ($member_grade) {
  511. foreach ($member_grade as $k => $v) {
  512. if ($exppoints >= $v['exppoints']) {
  513. $grade_arr = $v;
  514. }
  515. }
  516. }
  517. //计算提升进度
  518. if ($show_progress == true) {
  519. if (intval($grade_arr['level']) >= (count($member_grade) - 1)) {//如果已达到顶级会员
  520. $grade_arr['downgrade'] = $grade_arr['level'] - 1; //下一级会员等级
  521. $grade_arr['downgrade_name'] = isset($member_grade[$grade_arr['downgrade']]) ? $member_grade[$grade_arr['downgrade']]['level_name'] : '';
  522. $grade_arr['downgrade_exppoints'] = isset($member_grade[$grade_arr['downgrade']]) ? $member_grade[$grade_arr['downgrade']]['exppoints'] : '';
  523. $grade_arr['upgrade'] = $grade_arr['level']; //上一级会员等级
  524. $grade_arr['upgrade_name'] = isset($member_grade[$grade_arr['upgrade']]) ? $member_grade[$grade_arr['upgrade']]['level_name'] : '';
  525. $grade_arr['upgrade_exppoints'] = isset($member_grade[$grade_arr['upgrade']]) ? $member_grade[$grade_arr['upgrade']]['exppoints'] : '';
  526. $grade_arr['less_exppoints'] = 0;
  527. $grade_arr['exppoints_rate'] = 100;
  528. } else {
  529. $grade_arr['downgrade'] = $grade_arr['level']; //下一级会员等级
  530. $grade_arr['downgrade_name'] = $member_grade[$grade_arr['downgrade']]['level_name'];
  531. $grade_arr['downgrade_exppoints'] = $member_grade[$grade_arr['downgrade']]['exppoints'];
  532. $grade_arr['upgrade'] = $member_grade[$grade_arr['level'] + 1]['level']; //上一级会员等级
  533. $grade_arr['upgrade_name'] = $member_grade[$grade_arr['upgrade']]['level_name'];
  534. $grade_arr['upgrade_exppoints'] = $member_grade[$grade_arr['upgrade']]['exppoints'];
  535. $grade_arr['less_exppoints'] = $grade_arr['upgrade_exppoints'] - $exppoints;
  536. $grade_arr['exppoints_rate'] = round(($exppoints - $member_grade[$grade_arr['level']]['exppoints']) / ($grade_arr['upgrade_exppoints'] - $member_grade[$grade_arr['level']]['exppoints']) * 100, 2);
  537. }
  538. }
  539. return $grade_arr;
  540. }
  541. /**
  542. * 登录生成token
  543. * @access public
  544. * @author csdeshang
  545. * @param type $member_id 会员id
  546. * @param type $member_name 会员名字
  547. * @param type $client 客户端
  548. * @return type
  549. */
  550. public function getBuyerToken($member_id, $member_name, $client, $openid = '')
  551. {
  552. $mbusertoken_model = model('mbusertoken');
  553. //重新登录后以前的令牌失效
  554. $condition = [];
  555. $condition[] = ['member_id', '=', $member_id];
  556. $condition[] = ['member_clienttype', '=', $client];
  557. $mbusertoken_model->delMbusertoken($condition);
  558. //生成新的token
  559. $mb_user_token_info = [];
  560. $token = md5($member_name . strval(TIMESTAMP) . strval(rand(0, 999999)));
  561. $mb_user_token_info['member_id'] = $member_id;
  562. $mb_user_token_info['member_name'] = $member_name;
  563. $mb_user_token_info['member_token'] = $token;
  564. $mb_user_token_info['member_logintime'] = TIMESTAMP;
  565. $mb_user_token_info['member_clienttype'] = $client;
  566. if (!empty($openid)) {
  567. $mb_user_token_info['member_openid'] = $openid;
  568. }
  569. $result = $mbusertoken_model->addMbusertoken($mb_user_token_info);
  570. if ($result) {
  571. return $token;
  572. } else {
  573. return null;
  574. }
  575. }
  576. }