微信小程序后端登录注册流程

总结下微信小程序的用户授权登录php后台设计

1.前端授权登录后,调用wx.getUserInfo获取到用户公共信息

将code,encrypted_data,iv传给后端,

2.后端接受参数后

通过code用户登录凭证(有效期五分钟)获取到open_id和session_key(微信秘钥,有些解密需要该参数)

通过encrypted_data,iv,session_key解密出用户个人信息

通过open_id获取unionid查询自己数据库是否存在改用户,不存在则注册新用户

将session_key保存下来,通过某种加密算法或者其他规则生成自己服务器的session,返回给前端作为维持登录状态的session

3.主要代码

//通过登录凭证 code 获取 session_key 和 openid,session_key 是对用户数据进行加密签名的密钥。为了自身应用安全,session_key 不应该在网络上传输。

function jscode2session($js_code) {
    $post = array (
        'appid' =>$app_id,
        'secret' => $secret,
        'js_code'=> $js_code,
        'grant_type'=>'authorization_code',
    );
    $url = "https://api.weixin.qq.com/sns/jscode2session";
    //伪代码,curl提交数据
    $pCurl = curl($url);
    $res = $pCurl -> POST($post);
    $res = json_decode($res,true);
    if($res['openid']&&$res['session_key']){
        //保存session_key;保存到memcache或者redis等nosql中      
        return $res;
    }else{
        return false;
    }
}

拿到open_id后判断用户是否存在,不存在通过session_key,encryptedData,iv解密获取用户个人信息,encryptedData解密结果如下,其中unionId需满足一定条件才返回

unionId为同一个公众号平台下用户的唯一标识,open_id为同一个应用中用户的唯一标识

{
    "openId": "OPENID",
    "nickName": "NICKNAME",
    "gender": GENDER,
    "city": "CITY",
    "province": "PROVINCE",
    "country": "COUNTRY",
    "avatarUrl": "AVATARURL",
    "unionId": "UNIONID",
    "watermark": {
    "appid": "APPID",
        "timestamp": TIMESTAMP
    }
}
//微信小程序解密程序
public static function decryptData($sessionKey,$encryptedData,$iv){
    $aesKey=base64_decode($sessionKey);
    $aesIV=base64_decode($iv);
    $aesCipher=base64_decode($encryptedData);
    $result=openssl_decrypt($aesCipher, "AES-128-CBC", $aesKey, 1, $aesIV);
    $dataObj=json_decode($result,true);
    return $dataObj;
}

其他代码主要是业务逻辑,可根据上面思路自己编写,这里就不贴代码了

你可能感兴趣的:(微信小程序)