微信小程序登录php,thinkphp5开发微信小程序
微信小程序官方给了十分详细的登陆时序图,当然为了安全着想,应该加上签名加密。
微信小程序端
登录:功能(e) {
变那个=这个
wx.login({
成功:函数(资源){
var code=res.code//获取密码
wx.getUserInfo({ //得到原始数据,签名,加密数据
成功:函数(数据){
var原始数据=数据。原始数据;
var签名=data.signature
var加密数据=数据。加密数据;
var iv=data.iv
wx.request({
url:你自己的后台地址,
数据:{
代码:代码,
原始数据:原始数据,
签名:签名,
四:四,
“加密数据”:加密数据
方法:“得到”,
成功:函数(信息){
控制台。日志(信息);
调用wx。登录获取代码1000 .调用wx.getUserInfo获取签名所需的原始数据,签名,加密数据。发起请求将获取的数据发送的后台。
ThinkPHP后台
//开发者使用登陆凭证密码获取会话密钥和信息
$ APPID=
$ app secret=
$ code=I( get。代码’);
$ URL= https://API。微信。QQ。com/SNS/jscode 2会话?appid= .$APPID .机密=。$AppSecret .js_code= .$代码.grant _ type=authorization _ code ;
$ arr=vget($ URL);//一个使用卷曲实现的得到方法请求
$arr=json_decode($arr,true);
$ OpenID=$ arr[ OpenID ];
$ session _ key=$ arr[ session _ key ];
//数据签名校验
$ signature=I( get。签名’);
$ signature 2=sha1($ _ GET[ raw data ].$ session _ key);//记住不应该用东帝汶的网络域名代号中的我方法,会过滤掉必要的数据
如果($签名!=$signature2) {
回声数据签名验证失败!死;
//开发者如需要获取敏感数据,需要对接口返回的加密数据(加密数据)进行对称解密
供应商( PHP。wxbizdatacrypt’);//加载解密文件,在官方有下载
$ encrypted data=$ _ GET[ encrypted data ];
$ iv=$ _ GET[ iv ];
$pc=new WXBizDataCrypt($APPID,$ session _ key);
$ errCode=$ PC-解密数据($加密数据,$iv,$ data);//其中$数据包含用户的所有数据
if ($errCode!=0) {
回声解密数据失败!死;
//生成第三方第三次会议
$ session3rd=null
$ str pol= abcdefghijklmnopqrstuvwxyz 0123456789 abcdefghijklmnopqrstuvwxyz ;
$ max=strlen($ strPol)-1;
for($ I=0;$i $i ){
$session3rd .=$strPol[rand(0,$ max)];
echo $ session3rd
根据登陆凭证密码获取会话密钥和openid。数据签名校验。数据解密。生成第三方第三次会议并返回微信小程序端。
其中卷曲实现的得到方法请求方法
公共函数vget($url){
$ info=curl _ init();
curl_setopt($info,CURLOPT_RETURNTRANSFER,true);
curl_setopt($info,CURLOPT_HEADER,0);
curl_setopt($info,CURLOPT_NOBODY,0);
curl_setopt($info,CURLOPT_SSL_VERIFYPEER,false);
curl_setopt($info,CURLOPT_SSL_VERIFYHOST,false);
curl_setopt($info,CURLOPT_URL,$ URL);
$ output=curl _ exec($ info);
curl _ close($ info);
返回$输出
作者:笃子丹
链接:https://www。金淑。com/p/340 B1 ba 5245 e
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。