socialite->create('alipay')->tokenFromCode($this->authCode); \Yii::warning($user); } /** * 用户登录注册 * @return array|mixed|null */ public function analysisPhone() { \Yii::getLogger()->log("支付宝配置",Logger::LEVEL_ERROR); if (!$this->validate()) { return [ 'code' => 1, 'msg' => $this->getErrorSummary(false)[0] ]; } $response = Json::decode($this->response); if (empty($response['response'])) { return [ 'code' => 1, 'msg' => 'response 不能为空' ]; } if(is_isv()){ $aop = new AopClient(); // $store = StoreAliMini::find()->where(['id'=>$this->mini_id])->one(); $aop->appId = Option::get("alipay_appid",0,'saas')['value'];; $aop->rsaPrivateKey = Option::get("alipay_app_private_key",0,'saas')['value']; $aop->alipayrsaPublicKey=Option::get("alipay_public_key",0,'saas')['value']; $aop->apiVersion = '1.0'; $aop->signType = "RSA2"; $aop->postCharset="utf-8"; $aop->format='json'; $request = new AlipaySystemOauthTokenRequest(); $request->setGrantType("authorization_code"); $request->setCode($this->authCode); $auth_token = Option::get("ali_template_token",0,'saas')['value']; if(!empty($this->mini_id)){ $mini = StoreAliMini::findOne($this->mini_id); $auth_token = !empty($mini->auth_token)?$mini->auth_token:$auth_token; } $result = $aop->execute ($request, null, $auth_token); //第三方应用代小程序模板调用接口必须传入 $result = json_encode($result); $result = json_decode($result,true); $token = $result['alipay_system_oauth_token_response']; }else{ // 获取user_id $token = $this->socialite->create('alipay')->tokenFromCode($this->authCode); } \Yii::getLogger()->log($token,Logger::LEVEL_ERROR); if (empty($token['user_id'])) { return [ 'code' => 1, 'msg' => '获取user_id失败' ]; } $alipay_config = self::getAlipayConfig(); if (empty($alipay_config) && !is_isv()) { return [ 'code' => 1, 'msg' => '支付宝配置信息不能为空' ]; } $aes_key = $alipay_config['aes_key']; if(is_isv()){ $aes_key = Option::get("ali_template_aes",0,'saas')['value'];//支付宝三方小程序模板AES密钥 if(!empty($this->mini_id)){ $mini = StoreAliMini::findOne($this->mini_id); $aes_key = !empty($mini->aes_key)?$mini->aes_key:$aes_key; } } $result = openssl_decrypt(base64_decode($response['response']), 'AES-128-CBC', base64_decode($aes_key), OPENSSL_RAW_DATA); // 获取手机号解密 if (!$result) { return [ 'code' => 1, 'msg' => '解密失败' ]; } $res = Json::decode($result); if ($res['code'] != '10000') { return $res; } $mobile = $res['mobile']; // 创建平台会员saas_user $saas_user = SaasUser::find()->where(['mobile' => $mobile, 'is_delete' => SaasUser::DELETE_STATUS_FALSE])->one(); if (!$saas_user) { $saas_user = new SaasUser(); $saas_user->access_token = \Yii::$app->security->generateRandomString(); $saas_user->avatar = \Yii::$app->request->hostInfo . \Yii::$app->request->baseUrl . '/web/v1/statics/images/avatar.png'; $saas_user->mobile = $mobile; $saas_user->name = substr_replace($mobile, '****', 3, 4); $saas_user->store_id = $this->store_id; $saas_user->save(); } $user = User::findOne(['store_id' => $this->store_id, 'binding' => $mobile]); if (!$user) { $user = new User(); $user->type = User::USER_TYPE_NORMAL; $user->binding = $mobile; $user->avatar_url = \Yii::$app->request->hostInfo . '/web/v1/statics/images/avatar.png'; $user->username = \Yii::$app->security->generateRandomString(); $user->nickname = substr_replace($mobile, '******', 3, 2); $user->password = \Yii::$app->security->generatePasswordHash(\Yii::$app->security->generateRandomString(), 5); $user->auth_key = \Yii::$app->security->generateRandomString(); $user->access_token = \Yii::$app->security->generateRandomString(); $user->is_delete = User::USER_NOT_DELETE; $user->alipay_open_id = $token['user_id']; $user->store_id = $this->store_id; $user->platform = User::USER_FROM_ALIPAY; // 支付宝 if (!$user->save()) { return [ 'code' => 1, 'msg' => '登录失败', 'data' => $user->getErrorSummary(false)[0] ]; } } else { if (empty($user->alipay_open_id)) { $user->alipay_open_id = $token['user_id']; $user->save(); } } if ($user->blacklist == '1') { return [ 'code' => 1, 'msg' => '您的账号已被限制登录!', ]; } $share = $share_user = null; if ($this->share_user_id > 0) { // 绑定上下级 $bindForm = new BindForm(); $bindForm->store_id = $this->store_id; $bindForm->user_id = $user->id; $bindForm->parent_id = $this->share_user_id; $bindForm->condition = 0; $bindForm->save(); } if ($user->parent_id > 0) { $share = Share::findOne(['user_id' => $user->parent_id]); $share_user = User::findOne(['id' => $share->user_id]); } $data = [ 'nickname' => $saas_user->name, 'binding' => $saas_user->mobile, 'id' => $user->id, 'is_distributor' => $user->is_distributor ? $user->is_distributor : 0, 'avatar_url' => $saas_user->avatar, 'errCode' => 0, 'parent' => $share ? ($share->name ? $share->name : $share_user->nickname) : '总店', 'money' => $user->money ? $user->money : 0, 'blacklist' => $user->blacklist ? $user->blacklist : 0, 'access_token' => $saas_user->access_token, 'level' => $user->level ? $user->level : -1, 'is_clerk' => $user->is_clerk === null ? 0 : $user->is_clerk, 'integral' => $user->integral === null ? 0 : $user->integral, 'is_saas_clerk' => (int)$user->is_saas_clerk, ]; return [ 'code' => 0, 'msg' => '登录成功', 'data' => $data, ]; } }