Userapple.php 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. <?php
  2. namespace app\api\model\user;
  3. use think\facade\Cache;
  4. use app\common\exception\BaseException;
  5. use app\common\model\user\User as UserModel;
  6. use app\api\model\plus\agent\Referee as RefereeModel;
  7. use app\common\model\user\Grade as GradeModel;
  8. use app\api\model\plus\invitationgift\Partake;
  9. /**
  10. * 用户模型类
  11. */
  12. class Userapple extends UserModel
  13. {
  14. private $token;
  15. /**
  16. * 隐藏字段
  17. */
  18. protected $hidden = [
  19. 'open_id',
  20. 'is_delete',
  21. 'app_id',
  22. 'create_time',
  23. 'update_time'
  24. ];
  25. /**
  26. * 用户登录
  27. */
  28. public function login($post)
  29. {
  30. // 自动注册用户
  31. $refereeId = isset($post['referee_id']) ? $post['referee_id'] : null;
  32. //邀请好友
  33. $invitation_id = isset($post['invitation_id']) ? $post['invitation_id'] : 0;
  34. $user_id = $this->register($post, $refereeId, $invitation_id);
  35. // 生成token (session3rd)
  36. $this->token = $this->token($post['openId']);
  37. // 记录缓存, 7天
  38. Cache::tag('cache')->set($this->token, $user_id, 86400 * 7);
  39. return $user_id;
  40. }
  41. /**
  42. * 获取token
  43. */
  44. public function getToken()
  45. {
  46. return $this->token;
  47. }
  48. /**
  49. * 生成用户认证的token
  50. */
  51. private function token($openid)
  52. {
  53. $app_id = self::$app_id;
  54. // 生成一个不会重复的随机字符串
  55. $guid = \getGuidV4();
  56. // 当前时间戳 (精确到毫秒)
  57. $timeStamp = microtime(true);
  58. // 自定义一个盐
  59. $salt = 'token_salt';
  60. return md5("{$app_id}_{$timeStamp}_{$openid}_{$guid}_{$salt}");
  61. }
  62. /**
  63. * 自动注册用户
  64. */
  65. private function register($data, $refereeId, $invitation_id)
  66. {
  67. //通过unionid查询用户是否存在
  68. $user = null;
  69. if (!$user) {
  70. // 通过open_id查询用户是否已存在
  71. $user = self::detail(['app_user' => $data['openId']]);
  72. }
  73. if ($user) {
  74. $model = $user;
  75. } else {
  76. $model = $this;
  77. $data['referee_id'] = $refereeId;
  78. $data['reg_source'] = 'apple';
  79. //默认等级
  80. $data['grade_id'] = GradeModel::getDefaultGradeId();
  81. }
  82. $this->startTrans();
  83. try {
  84. // 保存/更新用户记录
  85. if (!$model->save(array_merge($data, [
  86. 'app_user' => $data['openId'],
  87. 'app_id' => self::$app_id
  88. ]))
  89. ) {
  90. throw new BaseException(['msg' => '用户注册失败']);
  91. }
  92. if (!$user && $refereeId > 0) {
  93. // 记录推荐人关系
  94. RefereeModel::createRelation($model['user_id'], $refereeId);
  95. //更新用户邀请数量
  96. (new UserModel())->setIncInvite($refereeId);
  97. //邀请好友送好礼
  98. $invitation_id > 0 && (new Partake())->addPartake($invitation_id, $refereeId, $model['user_id']);
  99. }
  100. $this->commit();
  101. } catch (\Exception $e) {
  102. $this->rollback();
  103. throw new BaseException(['msg' => $e->getMessage()]);
  104. }
  105. return $model['user_id'];
  106. }
  107. }