最近在对接微信小程序
其中有授权登录,可以获取微信用户的昵称及手机号
在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加入群聊,欢迎一起研究技术
转载请注明:laravel微信小程序授权 出自老鄢博客 | 欢迎分享