On this page
微信小程序登录
控制器层:application\api\v1\User.php
php
// 微信小程序登录
public function wxLogin(Request $request){
$url = "https://api.weixin.qq.com/sns/jscode2session";
// 参数
$params['appid']= config('api.wx.appid');
$params['secret']= config('api.wx.secret');
$params['js_code']= $request -> param('code');
$params['grant_type']= 'authorization_code';
// 微信API返回的session_key 和 openid
$arr = httpWurl($url, $params, 'POST');
$arr = json_decode($arr,true);
// 判断是否成功
if(isset($arr['errcode']) && !empty($arr['errcode'])){
return self::showResCodeWithOutData($arr['errmsg']);
}
// 拿到数据
$request->provider = 'weixin';
$request->openid = $arr['openid'];
$request->expires_in = 1000000;
//第三方登录
$user =(new UserModel())->otherlogin();
return self::showResCode('登录成功',$user);
}
公共方法:application/common.php
php
function httpWurl($url, $params, $method = 'GET', $header = array(), $multi = false){
date_default_timezone_set('PRC');
$opts = array(
CURLOPT_TIMEOUT => 30,
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_SSL_VERIFYHOST => false,
CURLOPT_HTTPHEADER => $header,
CURLOPT_COOKIESESSION => true,
CURLOPT_FOLLOWLOCATION => 1,
CURLOPT_COOKIE =>session_name().'='.session_id(),
);
/* 根据请求类型设置特定参数 */
switch(strtoupper($method)){
case 'GET':
$opts[CURLOPT_URL] = $url . '?' . http_build_query($params);
break;
case 'POST':
//判断是否传输文件
$params = $multi ? $params : http_build_query($params);
$opts[CURLOPT_URL] = $url;
$opts[CURLOPT_POST] = 1;
$opts[CURLOPT_POSTFIELDS] = $params;
break;
default:
TApiException('不支持的请求方式!');
}
/* 初始化并执行curl请求 */
$ch = curl_init();
curl_setopt_array($ch, $opts);
$data = curl_exec($ch);
$error = curl_error($ch);
curl_close($ch);
if($error) TApiException('请求发生错误:' . $error);
return $data;
}
路由层:route\route.php
php
Route::group('api/:v1/',function(){
// 微信小程序登录
Route::post('wxlogin','api/v1.User/wxLogin');
})