MemberDouyinService.php 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * Author: 芸众商城 www.yunzshop.com
  5. * Date: 19/11/4
  6. * Time: 上午11:20
  7. */
  8. namespace app\frontend\modules\member\services;
  9. use app\common\exceptions\AppException;
  10. use app\common\helpers\Client;
  11. use app\common\models\MemberGroup;
  12. use app\common\services\Session;
  13. use app\frontend\modules\member\models\MemberDouyinModel;
  14. use app\frontend\modules\member\models\MemberMiniAppModel;
  15. use app\frontend\modules\member\models\MemberUniqueModel;
  16. use app\frontend\modules\member\models\McMappingFansModel;
  17. use app\frontend\modules\member\models\SubMemberModel;
  18. class MemberDouyinService extends MemberService
  19. {
  20. const LOGIN_TYPE = 11; //小程序
  21. public function __construct()
  22. {
  23. }
  24. public function login()
  25. {
  26. $uniacid = \YunShop::app()->uniacid;
  27. $min_set = \Setting::get('plugin.toutiao-mini');
  28. if (is_null($min_set) || 0 == $min_set['switch']) {
  29. return show_json(0,'未开启头条小程序');
  30. }
  31. $para = request()->all();
  32. $data = array(
  33. 'appid' => $min_set['key'],
  34. 'secret' => $min_set['secret'],
  35. 'code' => $para['code'],
  36. );
  37. $url = 'https://developer.toutiao.com/api/apps/jscode2session';
  38. $user_info = \Curl::to($url)
  39. ->withData($data)
  40. ->asJsonResponse(true)
  41. ->get();
  42. //$data = ''; //json
  43. if (!empty($para['info'])) {
  44. $json_user = json_decode($para['info'], true);
  45. $json_user = $json_user['userInfo'];
  46. }
  47. $json_user['openid'] = $user_info['openid'];
  48. $json_user['nickname'] = $json_user['nickName'];
  49. $json_user['headimgurl'] = $json_user['avatarUrl'];
  50. $json_user['sex'] = $json_user['gender'];
  51. //Login
  52. $member_id = $this->memberLogin($json_user);
  53. Session::set('member_id', $member_id);
  54. $random = $this->douyin_session($user_info);
  55. $result = array('session' => $random, 'dy_token' =>session_id(), 'uid' => $member_id);
  56. return show_json(1, $result, $result);
  57. }
  58. /**
  59. * 小程序登录态
  60. *
  61. * @param $user_info
  62. * @return string
  63. */
  64. function douyin_session($user_info)
  65. {
  66. if (empty($user_info['session_key']) || empty($user_info['openid'])) {
  67. return show_json(0,'用户信息有误');
  68. }
  69. $random = md5(uniqid(mt_rand()));
  70. $_SESSION['douyin'] = array($random => iserializer(array('session_key'=>$user_info['session_key'], 'openid'=>$user_info['openid'])));
  71. return $random;
  72. }
  73. public function createDouyinMember($json_user, $arg)
  74. {
  75. $user_info = MemberDouyinModel::getUserInfo($json_user['openid']);
  76. if (!empty($user_info)) {
  77. MemberDouyinModel::updateUserInfo($json_user['openid'],array(
  78. 'nickname' => $json_user['nickname'],
  79. 'avatar' => $json_user['headimgurl'],
  80. 'gender' => $json_user['sex'],
  81. ));
  82. } else {
  83. MemberDouyinModel::insertData(array(
  84. 'uniacid' => $arg['uniacid'],
  85. 'member_id' => $arg['member_id'],
  86. 'openid' => $json_user['openid'],
  87. 'nickname' => $json_user['nickname'],
  88. 'avatar' => $json_user['headimgurl'],
  89. 'gender' => $json_user['sex'],
  90. ));
  91. }
  92. }
  93. /**
  94. * 公众号开放平台授权登陆
  95. *
  96. * @param $uniacid
  97. * @param $userinfo
  98. * @return array|int|mixed
  99. */
  100. public function unionidLogin($uniacid, $userinfo, $upperMemberId = NULL)
  101. {
  102. $member_id = parent::unionidLogin($uniacid, $userinfo, $upperMemberId = NULL, self::LOGIN_TYPE);
  103. return $member_id;
  104. }
  105. public function updateMemberInfo($member_id, $userinfo)
  106. {
  107. parent::updateMemberInfo($member_id, $userinfo);
  108. $record = array(
  109. 'openid' => $userinfo['openid'],
  110. 'nickname' => stripslashes($userinfo['nickname'])
  111. );
  112. MemberDouyinModel::updateData($member_id, $record);
  113. }
  114. public function addMemberInfo($uniacid, $userinfo)
  115. {
  116. $uid = parent::addMemberInfo($uniacid, $userinfo);
  117. //$this->addMcMemberFans($uid, $uniacid, $userinfo);
  118. $this->addFansMember($uid, $uniacid, $userinfo);
  119. return $uid;
  120. }
  121. public function addMcMemberFans($uid, $uniacid, $userinfo)
  122. {
  123. McMappingFansModel::insertData($userinfo, array(
  124. 'uid' => $uid,
  125. 'acid' => $uniacid,
  126. 'uniacid' => $uniacid,
  127. 'salt' => Client::random(8),
  128. ));
  129. }
  130. public function addFansMember($uid, $uniacid, $userinfo)
  131. {
  132. MemberDouyinModel::insertData(array(
  133. 'uniacid' => $uniacid,
  134. 'member_id' => $uid,
  135. 'openid' => $userinfo['openid'],
  136. 'nickname' => $userinfo['nickname'],
  137. 'avatar' => $userinfo['headimgurl'],
  138. 'gender' => $userinfo['sex'],
  139. ));
  140. }
  141. public function getFansModel($openid)
  142. {
  143. $model = MemberDouyinModel::getUId($openid);
  144. if (!is_null($model)) {
  145. $model->uid = $model->member_id;
  146. }
  147. return $model;
  148. }
  149. /**
  150. * 会员关联表操作
  151. *
  152. * @param $uniacid
  153. * @param $member_id
  154. * @param $unionid
  155. */
  156. public function addMemberUnionid($uniacid, $member_id, $unionid)
  157. {
  158. MemberUniqueModel::insertData(array(
  159. 'uniacid' => $uniacid,
  160. 'unionid' => $unionid,
  161. 'member_id' => $member_id,
  162. 'type' => self::LOGIN_TYPE
  163. ));
  164. }
  165. /**
  166. * 验证登录状态
  167. *
  168. * @return bool
  169. */
  170. public function checkLogged($login = null)
  171. {
  172. return MemberService::isLogged();
  173. }
  174. }