Laravel 微信小程序登录(前后端分离)

微信开发者工具、开发者账号、小程序文档。

使用JWT—auth。

API接口:login、post

请求:code、rowData。(code使用一次换一次,比较麻烦。)

返回参数:id 、token。

自定义类:WeChat.php

<?php

namespace App\Helpers;


class WeChat
{
    /**
     * 获取session_key
     * @param $code
     * @return array|mixed
     */
    public static function sessionKey($code)
    {
        /**
         * code 换取 session_key
         * ​这是一个 HTTPS 接口,开发者服务器使用登录凭证 code 获取 session_key 和 openid。
         * 其中 session_key 是对用户数据进行加密签名的密钥。为了自身应用安全,session_key 不应该在网络上传输。
         */
        $url = 'https://api.weixin.qq.com/sns/jscode2session';
        $result = json_decode(Http::curl($url, [
            'appid' => env("WX_APPID"),
            'secret' => env("WX_SECRET"),
            'grant_type' => 'authorization_code',
            'js_code' => $code
        ]), true);
        return isset($result['errcode']) ? [] : $result;
    }
}

定义路由:

Route::post('v1/login', 'Api\User\AuthController@login');

定义登录控制器:

php artisan make:controller Api/User/AuthController

<?php

namespace App\Http\Controllers\Api\User;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\Models\Api\User;

class AuthController extends Controller
{
    //用户登录
    public function login(Request $request)
    {
        $user = User::login($request);
        if ($user) {
            $data = [
                'id' => $user->id,
                'token' => $user->getToken(),
            ];
            $data["userInfo"] = $user->checkUserInfo();
            return $this->success("登陆成功", 200, $data);
        }
        return $this->error("code已使用!", 403);
    }
    public function guard()
    {
        return auth("api");
    }
}

User 模型类操作:

 //用户登录  小程序
    public static function login($request)
    {
        // 微信登录 获取session_key
        // dd($request->code);
        $session = WeChat::sessionKey($request->code);
        // dd($session);
        if (!$session) return false;
        // dd($request->rawData);
        $userInfo = json_decode($request->rawData, true);
        // dd($userInfo);

        $user = self::register($session['openid'], $userInfo);
        $user->token = auth("api")->tokenById($user->id);
        return $user;
    }
    /**
     * 自动注册用户
     * @param $open_id
     * @param $data
     * @param int $referee_id
     * @return mixed
     */
    private static function register($open_id, $data, $referee_id = null)
    {
        //dd($data);
        // dd($data);
        $data["nickName"] = preg_replace('/[\xf0-\xf7].{3}/', '', $data["nickName"]);
        $data["activity"]  = Carbon::now()->toDateString();
        $user = self::updateOrCreate(['open_id' => $open_id], $data);
        // dd($user);
        return $user;
    }


    /**
     * 获取token
     * @return mixed
     */
    public function getToken()
    {
        return $this->token;
    }

 

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值