laravel微信小程序授权

发布时间:2022-12-29 22:57:30 阅读:972次

最近在对接微信小程序

其中有授权登录,可以获取微信用户的昵称及手机号

在laravel中如何实现

首先执行composer require overtrue/wechat:~4.0 -vvv

为分取用户openid

获取手机号

以下为代码

<?php namespace Modules\Fission\Http\Controllers;

use App\Http\Controllers\Api\ApiControllerBase;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Http;
use EasyWeChat\Factory;
use Modules\Http\Requests\Code;
use Modules\Http\Requests\FetchPhone;
use Modules\Http\Requests\UpdateUserInfo;
use Modules\Http\Services\UserMiniProgrameService;

class AuthorizationController extends ApiControllerBase
{
    protected $app = null;

    public function __construct()
    {
        $wechat_config = [
            'app_id' => config('app.mini_program_appid'),
            'secret' => config('app.mini_program_secret')
        ];

        $this->app = Factory::miniProgram($wechat_config);
    }

    //授权登录获取openid
    public function fetchOpenid(Code $request){
        $code = $request->input('code');
        $appid = config('app.mini_program_appid');
        $secret = config('app.mini_program_secret');
        $url = "https://api.weixin.qq.com/sns/jscode2session?appid=$appid&secret=$secret&js_code=$code&grant_type=authorization_code";
        $content = Http::post($url);
        $data = json_decode($content,true);
        return $this->jsonData($data);
    }

    //获取手机号
    public function fetchPhone(FetchPhone $request){
        $session_key = $request->input('session_key');
        $iv = $request->input('iv');
        $encryptedData = $request->input('encrypted_data');
        try{
            $res = $this->app->encryptor->decryptData(
                $session_key,
                $iv,
                $encryptedData
            );
            return $this->jsonData($res);
        } catch (\Exception $e) {
            return $this->jsonError('session_key无效');
        }
    }

    //添加用户信息
    public function updateUserInfo(UpdateUserInfo $request){
        $res = UserMiniProgrameService::updateUserInfo($request);
        if(!$res){
            return $this->jsonError('添加失败');
        }
        return $this->jsonData('修改成功');
    }

    //获取用户信息
    public function fetchUserInfo(Request $request){
        if(!$request->openid) return $this->jsonError('openid不能为空');
        $user = UserMiniProgrameService::getUserByOpenid($request['openid']);
        if($user && $user->nickname && $user->mobile){
            $time = time() + 3600*24;
            $user['token'] = auth('miniprogram')->claims(['exp' => $time])->login($user);
            return $this->jsonData($user);
        }else{
            return $this->jsonData($user);
        }
    }

    public function removeOpenid(Request $request){
        UserMiniProgrameService::removeOpenid($request->id);
        return $this->jsonData('删除成功');
    }

    //通过token获取用户信息
    public function fetchUserInfoByToken(){
        $user = auth('miniprogram')->user();
        if($user){
            return $this->jsonData($user);
        }else{
            return $this->jsonError('token无效');
        }
    }
}

详细请看https://www.hongfs.cn/2019/07/php/laravel/laravel-wechat-mini-program-authorization/

如有问题,可以QQ搜索群1028468525加入群聊,欢迎一起研究技术

支付宝 微信

有疑问联系站长,请联系QQ:QQ咨询

转载请注明:laravel微信小程序授权 出自老鄢博客 | 欢迎分享