MemberMiniAppFaceService.php 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * Author: 芸众商城 www.yunzshop.com
  5. * Date: 17/2/23
  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\models\Store;
  13. use app\common\services\Session;
  14. use app\frontend\models\MemberShopInfo;
  15. use app\frontend\modules\member\models\MemberMiniAppModel;
  16. use app\frontend\modules\member\models\MemberUniqueModel;
  17. use app\frontend\modules\member\models\McMappingFansModel;
  18. use app\frontend\modules\member\models\SubMemberModel;
  19. use Illuminate\Contracts\Encryption\DecryptException;
  20. class MemberMiniAppFaceService extends MemberService
  21. {
  22. const LOGIN_TYPE = 12; //小程序
  23. public function __construct()
  24. {}
  25. public function login()
  26. {
  27. include dirname(__FILE__ ) . "/../vendors/wechat/wxBizDataCrypt.php";
  28. $uniacid = \YunShop::app()->uniacid;
  29. $min_set = \Setting::get('plugin.min_app');
  30. if (is_null($min_set) || 0 == $min_set['switch']) {
  31. return show_json(0,'未开启小程序');
  32. }
  33. $para = \YunShop::request();
  34. $data = array(
  35. 'appid' => $min_set['key'],
  36. 'secret' => $min_set['secret'],
  37. 'js_code' => $para['code'],
  38. 'grant_type' => 'authorization_code',
  39. );
  40. $url = 'https://api.weixin.qq.com/sns/jscode2session';
  41. $user_info = \Curl::to($url)
  42. ->withData($data)
  43. ->asJsonResponse(true)
  44. ->get();
  45. $data = ''; //json
  46. if (!empty($para['info'])) {
  47. $json_data = json_decode($para['info'], true);
  48. $pc = new \WXBizDataCrypt($min_set['key'], $user_info['session_key']);
  49. $errCode = $pc->decryptData($json_data['encryptedData'], $json_data['iv'], $data);
  50. }
  51. \Log::debug('-------------min errcode-------', [$errCode]);
  52. if ($errCode == 0) {
  53. $json_user = json_decode($data, true);
  54. } else {
  55. return show_json(0,'登录认证失败');
  56. }
  57. if (!empty($json_user)) {
  58. if (isset($json_user['unionId'])) {
  59. $json_user['unionid'] = $json_user['unionId'];
  60. }
  61. $json_user['openid'] = $json_user['openId'];
  62. $json_user['nickname'] = $json_user['nickName'];
  63. $json_user['headimgurl'] = $json_user['avatarUrl'];
  64. $json_user['sex'] = $json_user['gender'];
  65. //Login
  66. $member_id = $this->memberLogin($json_user);
  67. Session::set('member_id', $member_id);
  68. $random = $this->wx_app_session($user_info);
  69. $result = array('session' => $random, 'wx_token' =>session_id(), 'uid' => $member_id);
  70. if (app('plugins')->isEnabled('store-cashier')) {
  71. $yz_member = MemberShopInfo::getMemberShopInfo($member_id);
  72. $store_member = Store::uniacid()->where('uid', $yz_member->member_id)->first();
  73. if (!$store_member) {
  74. return show_json(-1, "您不是店长");
  75. }
  76. $data = [
  77. 'store_id' => $store_member->id,
  78. 'store_name' => $store_member->store_name,
  79. 'goods_id' => $store_member->cashier_id,
  80. 'shop_name' => \Setting::get('shop.shop.name') ?: '未设置商城名称',
  81. ];
  82. $variable = $result;
  83. $variable['store'] = $data;
  84. return show_json(1, $result, $variable);
  85. } else {
  86. return show_json(-1,"未开启门店插件");
  87. }
  88. } else {
  89. return show_json(0, '获取用户信息失败');
  90. }
  91. }
  92. /**
  93. * 小程序登录态
  94. *
  95. * @param $user_info
  96. * @return string
  97. */
  98. function wx_app_session($user_info)
  99. {
  100. if (empty($user_info['session_key']) || empty($user_info['openid'])) {
  101. return show_json(0,'用户信息有误');
  102. }
  103. $random = md5(uniqid(mt_rand()));
  104. $_SESSION['wx_app'] = array($random => iserializer(array('session_key'=>$user_info['session_key'], 'openid'=>$user_info['openid'])));
  105. return $random;
  106. }
  107. public function createMiniMember($json_user, $arg)
  108. {
  109. $user_info = MemberMiniAppModel::getUserInfo($json_user['openid']);
  110. if (!empty($user_info)) {
  111. MemberMiniAppModel::updateUserInfo($json_user['openid'],array(
  112. 'nickname' => $json_user['nickname'],
  113. 'avatar' => $json_user['headimgurl'],
  114. 'gender' => $json_user['sex'],
  115. ));
  116. } else {
  117. MemberMiniAppModel::insertData(array(
  118. 'uniacid' => $arg['uniacid'],
  119. 'member_id' => $arg['member_id'],
  120. 'openid' => $json_user['openid'],
  121. 'nickname' => $json_user['nickname'],
  122. 'avatar' => $json_user['headimgurl'],
  123. 'gender' => $json_user['sex'],
  124. ));
  125. }
  126. }
  127. /**
  128. * 公众号开放平台授权登陆
  129. *
  130. * @param $uniacid
  131. * @param $userinfo
  132. * @return array|int|mixed
  133. */
  134. public function unionidLogin($uniacid, $userinfo, $upperMemberId = NULL)
  135. {
  136. $member_id = parent::unionidLogin($uniacid, $userinfo, $upperMemberId = NULL, self::LOGIN_TYPE);
  137. return $member_id;
  138. }
  139. public function updateMemberInfo($member_id, $userinfo)
  140. {
  141. parent::updateMemberInfo($member_id, $userinfo);
  142. $record = array(
  143. 'openid' => $userinfo['openid'],
  144. 'nickname' => stripslashes($userinfo['nickname'])
  145. );
  146. MemberMiniAppModel::updateData($member_id, $record);
  147. }
  148. public function addMemberInfo($uniacid, $userinfo)
  149. {
  150. $uid = parent::addMemberInfo($uniacid, $userinfo);
  151. //$this->addMcMemberFans($uid, $uniacid, $userinfo);
  152. $this->addFansMember($uid, $uniacid, $userinfo);
  153. return $uid;
  154. }
  155. public function addMcMemberFans($uid, $uniacid, $userinfo)
  156. {
  157. McMappingFansModel::insertData($userinfo, array(
  158. 'uid' => $uid,
  159. 'acid' => $uniacid,
  160. 'uniacid' => $uniacid,
  161. 'salt' => Client::random(8),
  162. ));
  163. }
  164. public function addFansMember($uid, $uniacid, $userinfo)
  165. {
  166. MemberMiniAppModel::insertData(array(
  167. 'uniacid' => $uniacid,
  168. 'member_id' => $uid,
  169. 'openid' => $userinfo['openid'],
  170. 'nickname' => $userinfo['nickname'],
  171. 'avatar' => $userinfo['headimgurl'],
  172. 'gender' => $userinfo['sex'],
  173. ));
  174. }
  175. public function getFansModel($openid)
  176. {
  177. $model = MemberMiniAppModel::getUId($openid);
  178. if (!is_null($model)) {
  179. $model->uid = $model->member_id;
  180. }
  181. return $model;
  182. }
  183. /**
  184. * 会员关联表操作
  185. *
  186. * @param $uniacid
  187. * @param $member_id
  188. * @param $unionid
  189. */
  190. public function addMemberUnionid($uniacid, $member_id, $unionid)
  191. {
  192. MemberUniqueModel::insertData(array(
  193. 'uniacid' => $uniacid,
  194. 'unionid' => $unionid,
  195. 'member_id' => $member_id,
  196. 'type' => self::LOGIN_TYPE
  197. ));
  198. }
  199. /**
  200. * 验证登录状态
  201. *
  202. * @return bool
  203. */
  204. public function checkLogged($login = null)
  205. {
  206. return MemberService::isLogged();
  207. }
  208. }