微信小程序入门之用户登陆态

微信小程序的设定是不支持session,那么cookie之流肯定是用不了的。微信对wx.request这个API做了修改,小程序发起的请求并不是直接请求我们的后台服务器,而是先通过微信的服务器再发送到我们的后台服务器,既然请求都是要通过微信的服务器发送到我们的服务器,那么我们的服务器也就无从识别请求的发起者了。因此,session在微信小程序的后台开发中是无法使用的。

所以,我使用了比较流行的开发者服务端提供的token来识别用户身份。JSON WEB TOKEN。

登录流程时序

那么根据微信提供的业务流程走:

wx.login({

timeout: 3000 * 10,

success: res => {

if (res.code) {

//发起网络请求

wx.request({

method: 'POST',

url: 'XXXXXX',

data: {

code: res.code

},

success: res => {

var result = res;

wx.setStorageSync('info', result);//不属于开发者交互应该使用同步

}

})

} else {

console.log("获取code失败!");

}

}

})

TP5代码:

public function index()
    {
        $Request=Request::instance();
        
        $post=$Request->post();

        $url='https://api.weixin.qq.com/sns/jscode2session?appid='.$this->options['appId'].'&secret='.$this->options['appKey'].'&js_code='.$post['code'].'&grant_type=authorization_code';

        $con=json_decode($this->http_get($url),JSON_OBJECT_AS_ARRAY); 

        $token=json_encode($this->JWTtoken($con));
        
        $data=['session_key'=>$con['session_key'],'openid'=>$con['openid']];   
        Db::table('wx_user')->insert($data);

        exit($token);
        
    }

    public function http_get($url){
        $ch = curl_init($url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_HEADER, 0);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
        $con=curl_exec($ch);
        curl_close($ch);
        return $con;
    }

    public function JWTtoken($payload){
        $obj = new Jwt();

        $token=$obj->getToken($payload);
        
        return $token;
    }

这里有个地方要注意下,获取缓存的地方,是用同步还是用异步的问题,要搞清。如果要跟服务端交互就得异步,否则用同步写法跟微信服务端交互就可以获取或者储存到本地缓存。

猜你喜欢

转载自blog.csdn.net/qq_37391017/article/details/84203642