微信开发者工具、开发者账号、小程序文档。
使用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;
}