12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- <?php
- namespace app\system\controller\event;
- use think\Controller;
- use app\common\model\SystemMemberMiniapp;
- use app\common\model\SystemUser;
- use app\common\event\User;
- use app\common\facade\WechatMp as Mp;
- use encrypter\Encrypter;
- use filter\Filter;
- use Exception;
- class WechatMp extends Controller{
-
- public function putWechat(){
- try {
- $app = $this->request->param('app/d');
- $scope = $this->request->param('scope/d',1);
- $url = $this->request->param('url');
- $official = Mp::isTypes($app);
- if(!$official){
- $this->error('请先授权您的公众号');
- }
- $response = $official->oauth->scopes([$scope ? 'snsapi_userinfo' : 'snsapi_base'])->redirect(url('system/event.wechatMp/getWechat',['app' => $app,'url' => $url],true,true));
- return $response->send();
- }catch (Exception $e) {
- $this->error('授权失败');
- }
- }
-
-
- public function getWechat(){
- $app = $this->request->param('app/d');
- $code = $this->request->param('code');
- $url = $this->request->param('url');
- if(empty($code)){
- return $this->redirect('system/event.wechatMp/putWechat',['app' => $app,'url' => $url]);
- }
-
- $miniapp = SystemMemberMiniapp::where(['id' => $app])->find();
- if(!$miniapp){
- $this->error('未找到已授权应用');
- }
- $official = Mp::isTypes($app);
- if(!$official){
- $this->error('请先授权您的公众号');
- }
- $rel = $official->oauth->user();
- $result = SystemUser::where(['member_miniapp_id' => $miniapp->miniapp_id,'official_uid' => $rel->getID()])->find();
- if(empty($result)){
- $nickName = Filter::filter_Emoji($rel->getName());
- $data['miniapp_id'] = $app;
- $data['wechat_uid'] = empty($rel['unionid']) ? '' : $rel['unionid'];
- $data['official_uid'] = $rel->getID();
- $data['nickname'] = $nickName ?? '微信-'.time();
- $data['avatar'] = $rel->getAvatar();
- $data['miniapp_uid'] = '';
- $data['session_key'] = '';
- $uid = SystemUser::wechatReg($data,false);
- if(!$uid){
- return $this->redirect(Encrypter::cpDecode($url));
- }
- User::setLogin(['id'=> $uid,'nickname'=>$rel->getName()]);
- }else{
- User::setLogin($result);
- }
- return $this->redirect(Encrypter::cpDecode($url));
- }
- }
|