1.路由
//授权页面
Route::get('demo', 'DemoController@demo');
//调用页面授权
Route::get('demo/authorize', 'DemoController@wxAuthorize');
//code回调
Route::any('demo/authorize/code', 'DemoController@getCode');2.类
<?php
namespace App\Http\Controllers\Wxapi;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Redis;
class DemoController extends Controller
{
private static $appid = 'wxb9c7fce26c7b9d46'; //你的appid
private static $appsecret = '23997a0866d367f982194ce45c6f6408'; //你的secret
/**
* @return mixed
* 请求也页面
*/
public function demo()
{
return view('wx.demo');
}
/**
* @return mixed
* 获取授权页面
*/
public function wxAuthorize()
{
$isUser = $this->getToken();
if( $isUser != false )
{
//获取用信息
return $this->getUserInfo( $isUser );
}
$url = 'https://open.weixin.qq.com/connect/oauth2/authorize?';
$get['appid'] = static::$appid;
$get['redirect_uri'] = url('api/demo/authorize/code');
$get['response_type'] = 'code';
$get['scope'] = 'snsapi_userinfo';
$get['state'] = 'STATE#wechat_redirect ';
foreach ( $get as $k=>$v )
{
$url.= "$k=".urlencode($v)."&";
}
$url = substr($url, 0, -1);
return redirect($url);
}
/**
* @param Request $request
* 根据code获取token
* 根据token获取用户信息
*/
public function getCode(Request $request)
{
$code = $request->input('code');
$url ="https://api.weixin.qq.com/sns/oauth2/access_token?appid=".static::$appid."&secret=".static::$appsecret."&code=$code&grant_type=authorization_code";
$data = $this->curlGetDate( $url );
if( isset($data->errcode) == false )
{
$token = json_encode($data);
session(['token'=>$token]);
//获取用户信息
return $this->getUserInfo( $data );
}
}
/**
* @return bool
* 刷新token
*/
public function getToken()
{
try{
$dataJson = session('token');
$data = json_decode($dataJson);
$res_url = 'https://api.weixin.qq.com/sns/oauth2/refresh_token?appid='.static::$appid.'&grant_type=refresh_token&refresh_token='.$data->refresh_token;
$resData = $this->curlGetDate($res_url);
$token = json_encode($resData);
session(['token'=>$token]);//保存在session里
return $resData;
}catch (\Exception $e)
{
return false;
}
}
/**
* @param $data
* @return mixed
* 用户信息
*/
public function getUserInfo( $data )
{
$access_token = $data->access_token;
$openid = $data->openid;
$user['access_token'] = $access_token;
$user = 'https://api.weixin.qq.com/sns/userinfo?access_token='.$access_token.'&openid='.$openid.'&lang=zh_CN';
$obj = $this->curlGetDate( $user );
dd($obj);
}
//curl get请求
public function curlGetDate( $url )
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
$output = curl_exec($ch);
curl_close($ch);
return json_decode($output);
}
}填写授权回调页面的域名 (注意只有服务号才可以页面授权)
登录公众平台-->开发者中心-->接口权限表
本文由:xiaoshu168 作者:xiaoshu发表,转载请注明来源!