大致问题是
storage权限放开后
密钥出现问题
RuntimeException
No application encryption key has been specified.
配好秘钥之后报
Uncaught ReflectionException: Class view does not exist Container.php on line 752
最好的解决办法是
找到php.ini文件,搜索putenv关键字,不要禁止就OK了
分类 php语言 下的文章
大致问题是
storage权限放开后
密钥出现问题
RuntimeException
No application encryption key has been specified.
配好秘钥之后报
Uncaught ReflectionException: Class view does not exist Container.php on line 752
最好的解决办法是
找到php.ini文件,搜索putenv关键字,不要禁止就OK了
{"errcode":40001,"errmsg":"invalid credential, access_token is invalid or not latest, hints: [ req_id: SiLDHzyFe-4YxG9a ]"}这个错误提示很明显吧,提示说token 错误或失效
我研究了研究,没问题呀
得到openid 和 access_token这两个值,就判断用户是否真的登录了,这两个值也是立马得到立马拿去验证了,不会吧
地址:
https://api.weixin.qq.com/sns/auth
$params = "access_token=".$access_token."&openid=".$openid."&lang=zh_CN";
$url = "https://api.weixin.qq.com/sns/auth?".$params;
应该也没有问题呀!
那问题是出在哪呢!这可急死人了,找了一大堆
改了地址:https://api.weixin.qq.com/sns/userinfo(获取用户详细信息)
其实都一样的,我都拿到了openid,只需要验证一下就好了
最后忙了一个下午,才发现,我是封装了一个办法,把$access_token,$openid这两个参数传反了
最后附上代码
api代码(PHP)
public static function weixinUserCheck($openid,$access_token){
$params = "access_token=".$access_token."&openid=".$openid."&lang=zh_CN";
$url = "https://api.weixin.qq.com/sns/auth?".$params;
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true) ;
curl_setopt($curl, CURLOPT_BINARYTRANSFER, true) ;
curl_setopt($curl, CURLINFO_HEADER_OUT, true);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
// 执行
$data = curl_exec($curl);
curl_close($curl);
return json_decode($data,true);
}
app端代码
getuserinfoh5appwx: function(){
let thisApp = this;
uni.showLoading({
title: '数据加载中',
mask: false
});
uni.login({
success:function(loginRes){
console.log(1,loginRes);
uni.getUserInfo({
success:function(res){
let user = res.userInfo;
let data = {};
data.avatar = user.avatarUrl;
data.name = user.nickName;
data.sex = user.gender;
data.access_token = loginRes.authResult.access_token;
data.openid = loginRes.authResult.openid;
data.appToken = "weixinApp";
util.request('login',function(user){
thisApp.$Storage.setSelfUser(user,function(){
uni.hideLoading();
uni.switchTab({
url: '/pages/person/person'
});
});
},'post',data);
}
})
},
});
},
如果在父类写了一个方法,write(),里面写了如下异常处理
try {
$this->validate($request,['id'=>'required'],['id.required'=>'请刷新页面再试']);
}catch (ValidationException $e) {
return $this->error($this->format_exception_error($e));
}
子类继承了方法,使用parent::write();这样是可以正确异常处理的
如果把异常处理写成一个类方法,$this调用是不管用
同样,子类$this调用更不可以了,也不知道是这个laravel 这个异常处理有问题还是不能这样处理,以后还学研究
微信登录中可以从微信中获取到code,iv,encryptedData,signature
看着别人拿着这些去验证用户是否真的登录了
研究了好久,code可以获取唯一标识openid就可以确定用户
也许是微信平台考虑到路由重定向安全问题等,需要session验证
不管了,就这样
$appid = ('WXAPPID');
$appsecret = ('WXSECRET');
$grant_type = "authorization_code"; //授权(必填)
$params = "appid=".$appid."&secret=".$appsecret."&js_code=".$code."&grant_type=".$grant_type;
$url = "https://api.weixin.qq.com/sns/jscode2session?".$params;
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true) ;
curl_setopt($curl, CURLOPT_BINARYTRANSFER, true) ;
curl_setopt($curl, CURLINFO_HEADER_OUT, true);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
// 执行
$data = curl_exec($curl);
curl_close($curl);
return json_encode($data,true);
->select(DB::raw('sum(line_score) as score,student_id'))
->groupBy('student_id')
->get();
现在才注意,sum里面不能加引号,单引双引嵌套使用都不行,直接不加就OK了,或``这个是可以的