validate()) { return $this->getModelError(); } $res = FlashStorage::getCache("m{$this->cx_mch_id}_c{$this->code}"); if ($this->code_expires == 1 || $res === false) { $res = $this->code2session($this->code); if ($res['code'] != 0) return $res; FlashStorage::setCache("m{$this->cx_mch_id}_c{$this->code}", $res, 864000); } if ($res['code'] != 0) { return $res; } $access_token = $res['data']['access_token']; $openid = $res['data']['openid']??''; $user_oauth = UserOauth::findOne([ 'cx_mch_id' => $this->cx_mch_id, 'is_delete' => 0, 'openid' => $openid ]); if (empty($user_oauth)) { $user_oauth = new UserOauth(); $user_oauth->cx_mch_id = 0; $user_oauth->type = 'wxoa'; $user_oauth->openid = $openid; $user_oauth->created_at = time(); $user_oauth->user_id = 0; $user_oauth->is_delete = 0; $res = $user_oauth->save(); if (!$res) { return ['code' => 1, 'msg' => '登陆失败']; } } $data = ['code' => 0, 'msg' => '登陆成功', 'openid' => $openid]; return $data; } /*** * 用户数据解密 */ private function curl_wechat_user($access_token, $openid) { $api = "https://api.weixin.qq.com/sns/userinfo?access_token=" . $access_token . "&openid=" . $openid . "&lang=zh_CN"; $this->wechat_mp->curl->get($api); if ($this->wechat_mp->curl->error_code != 0) { return [ 'code' => 1, 'msg' => "err_code:{$this->wechat_mp->curl->error_code}err_msg:{$this->wechat_mp->curl->error_msg}" ]; } $resp = $this->wechat_mp->curl->response; $res = json_decode($resp, true); if (!isset($res['nickname']) || !isset($res['headimgurl'])) { return [ 'code' => 1, 'msg' => isset($res['errmsg']) ? $res['errmsg'] : 'error' ]; } return [ 'code' => 0, 'msg' => 'ok', 'data' => $res ]; } private function code2session($code) { $api = "https://api.weixin.qq.com/sns/oauth2/access_token?appid={$this->wechat_mp->appId}&secret={$this->wechat_mp->appSecret}&code=" . $code . "&grant_type=authorization_code"; $this->wechat_mp->curl->get($api); if ($this->wechat_mp->curl->error_code != 0) { return [ 'code' => 1, 'msg' => "err_code:{$this->wechat_mp->curl->error_code}err_msg:{$this->wechat_mp->curl->error_msg}" ]; } $resp = $this->wechat_mp->curl->response; $res = json_decode($resp, true); if (!isset($res['access_token']) || !isset($res['openid'])) { return [ 'code' => 1, 'msg' => isset($res['errmsg']) ? $res['errmsg'] : 'error' ]; } return [ 'code' => 0, 'msg' => 'ok', 'data' => $res ]; } }