微信小程序开发-微信登陆流程
我们需要一个标识来记录用户的身份的唯一性,在微信中unionId就是我们所需要的记录唯一ID,那么如何拿到unionId就成了关键,我将项目分为小程序和 后台PHP代码两部分来讲。
从小程序代码说起

简单说下小程序的js代码登陆流程
login -> 获取code -> getUserInfo获取iv和encryptedData -> 传给自己的服务器处理 -> 返回给小程序结果
var API_URL = '自己服务器地址';
Page({
onLoad: function(){
console.log("iv");
wx.login({
success:function(res){
if(res.code){
var code = res.code;
wx.getUserInfo({
success:function(res2){
console.log(res2);
var encryptedData = encodeURTComponent(res2.encryptedData); //一定要把加密串转成URI编码
var iv = res2.iv;
//请求自己的服务器
Login(code,encryptedData,iv);
}
})
}else{
console.log('获取用户登陆状态失败'+ res.errMsg);
}
}
})
}
});
* code: 服务器用来获取sessionKey的必要参数
* IV:加密算法的初始向量,encryptedData: 加密过的字符串。
把code iv encryptedData 传递给我们的服务器
function Login(code,encryptedData,iv){
console.log('code='+code+'&encryptedData='+encryptedData+'&iv='+iv);
//创建一个dialog
wx.showToast({
title:'正在登陆...',
icon:'loading',
duration: 1000
});
//请求服务器
wx.request({
url: API_URL,
data:{
code:code,
encryptedData:encryptedData,
iv:iv
},
method: 'GET', //OPTIONS,GET,HEAD,POST,PUT,DELETE,TRACE,CONNECT
header:{
'content-type':'application/json'
},
success: function(res){
wx.hideToast();
console.log('服务器返回'+res.data);
},
fail:function(){
//wx.hideToast();
},
complete:function(){
//complete
}
})
}
我们所需要的unionId就在encryptedData中,所以服务器需要这些信息来把unionId解析出来。
服务器处理逻辑
先下载微信的解密demo: https://mp.weixin.qq.com/debug/wxadoc/dev/api/signature.html?t=20161122

我们选择php,把除了demo外的三个php文件,放入我们自己的项目,方便以后调用。
讲一下服务器的处理流程:
通过微信的https://api.weixin.qq.com/sns/jscode2session接口获取seesionKey,然后再通过sessionKey和iv来解密encryptedData数据获取UnionID
例
/*登陆*/
public function weixinLogin( $user_id = null ){
global $App_Error_Conf,$Gift_Ids,$Server_Http_Path,$Is_Local,$Test_User,$Good_Vcode,$WeiXin_Xd_Conf;
$validator_result = input_validator(array('code','iv','encryptedData'));
if(!empty($validator_result)){
return response($validator_result);
}
$js_code = $_REQUEST['code'];
$encryptedData = $_REQUEST['encryptedData'];
$iv = $_REQUEST['iv'];
$appid = $WeiXin_Xd_Conf['appid'];
$secret = $WeiXin_Xd_Conf['secret'];
$grant_type = $WeiXin_Xd_Conf['grant_type'];
//从微信获取session_key
$user_info_url = $WeiXin_Xd_Conf['code2session_url'];
$user_info_url = sprintf("%s?appid=%s&js_code=%s&grant_type=%",$user_info_url,$appid,$secret,$js_code,$grand_type);
$weixin_user_data = json_decode(get_url($user_info_url));
$session_key = $weixin_user_data->session_key;
//数据解密
$data='';
$wxBizDataCrypt = new WXBizDataCrypt($appid,$session_key);
$errCode = $wxBizDataCrypt>decryptData($appid,$session_key,$encryptedData,$iv,$data);
}
最后拿到的这个data就是我们解密后的encryptedData,里面会包含unionId.
这样就实现了微信的简单登录。
原文地址:http://blog.csdn.net/sk719887916/article/details/53761107
微信小程序开发-微信登陆流程的更多相关文章
- 微信小程序 开发 微信开发者工具 快捷键
微信小程序已经跑起来了.快捷键设置找了好久没找到,完全凭感觉.图贴出来.大家看看. 我现在用的是0.10.101100的版本,后续版本更新快捷键也应该不会有什么变化. 现在貌似不能修改.如果有同学找到 ...
- 微信小程序开发----微信开发者工具使用
新建项目选择小程序项目,选择代码存放的硬盘路径,填入刚刚申请到的小程序的 AppID,给你的项目起一个好听的名字,最后,勾选 "创建 QuickStart 项目" (注意: 你要选 ...
- 微信小程序开发——微信小程序下拉刷新真机无法弹回
开发工具中下拉之后页面回弹有一定的延迟,这个时间也有点久.真机测试,下拉后连回弹都没有,这个问题要解决,就得在下拉函数里加上停止下拉刷新的API,如下: /** * 下拉刷新 */ onPullDow ...
- 微信小程序开发笔记(一)
一.为什么要学习微信小程序开发 微信小程序是一个可以在微信上打开的轻应用,他是由多个页面组成的程序,跟传统APP比较如下: 优点 1.不需要在应用商店下载,不占用内存空间,即开即用 2.可以在微信内直 ...
- 微信小程序开发心得
微信小程序也已出来有一段时间了,最近写了几款微信小程序项目,今天来说说感受. 首先开发一款微信小程序,最主要的就是针对于公司来运营的,因为,在申请appid(微信小程序ID号)时候,需要填写相关的公司 ...
- 【微信小程序开发•系列文章六】生命周期和路由
这篇文章理论的知识比较多一些,都是个人观点,描述有失妥当的地方希望读者指出. [微信小程序开发•系列文章一]入门 [微信小程序开发•系列文章二]视图层 [微信小程序开发•系列文章三]数据层 [微信小程 ...
- 微信小程序开发日记——高仿知乎日报(下)
本人对知乎日报是情有独钟,看我的博客和github就知道了,写了几个不同技术类型的知乎日报APP 要做微信小程序首先要对html,css,js有一定的基础,还有对微信小程序的API也要非常熟悉 我将该 ...
- 微信小程序开发日记——高仿知乎日报(中)
本人对知乎日报是情有独钟,看我的博客和github就知道了,写了几个不同技术类型的知乎日报APP要做微信小程序首先要对html,css,js有一定的基础,还有对微信小程序的API也要非常熟悉 我将该教 ...
- 微信小程序开发日记——高仿知乎日报(上)
本人对知乎日报是情有独钟,看我的博客和github就知道了,写了几个不同技术类型的知乎日报APP 要做微信小程序首先要对html,css,js有一定的基础,还有对微信小程序的API也要非常熟悉 我将该 ...
随机推荐
- BZOJ_1495_[NOI2006]网络收费_树形DP
BZOJ_1495_[NOI2006]网络收费_树形DP Description 网络已经成为当今世界不可或缺的一部分.每天都有数以亿计的人使用网络进行学习.科研.娱乐等活动.然而, 不可忽视的一点就 ...
- webstorm怎样查找历史记录
在webstorm中 文件界面右键,local History --> show History 上面能看到具体的日期和编写的代码. 如果想回到某一次的代码.把中间的代码按>>移入到 ...
- MongoDB 3.2复制集单节点部署(四)
MongoDB在单节点中也可以做复制集,但是仅限于测试实验,最大的好处就是部署方便快速,可以随便添加新节点,节省资源.在这里我使用的是MongoDB 3.2版本进行复制集实验(但MongoDB配置文件 ...
- springboot中使用@Value读取配置文件
一.配置文件配置 直接配置 在src/main/resources下添加配置文件application.properties 例如修改端口号 #端口号 server.port=8089 分环境配置 在 ...
- html中调用本地exe应用程序
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- fullpage中高度错误的解决方法
今天我再用fullpage写全屏页面的时候,发现在ie中,一整屏的页面总是不能铺满,高度总是少一截儿,各种搜索,找到了个合适的方法,这里记录下,也希望给之后遇到这个问题的人提供一种方式,当然不一定能解 ...
- java读取文件:文本文件
一般使用串行方式读出或者写入文件.总的来说,使用输入流把文件内容读入内存,使用输出流把内存中的信息写出到文件.这些类位于java.io包下.输入和输出的类和方法往往是对应的 文本文件 先了解如何读写文 ...
- flex 在父窗口监听弹出窗口里的某个按钮被点击
flex 在父窗口监听弹出窗口里的某个按钮被点击 这样可以从子窗口拿回数据在父窗口处理数据,不必再子窗口中处理.在某些情形下省去了不少麻烦. /** * 右键菜单项单击事件 * changed by ...
- E20181120-hm
checkerboard n. 西洋跳棋盘; checker n. 方格图案;
- 51nod 1449 砝码称重【天平/进制】
题意: 给你w,n,问你在w^0,w^1,w^2...各种一个,问你能不能用这些砝码和重量为m的东西放在天平上使得天平平衡: 思路: 这个很容易联想到进制: 如果把m放在是一边的话,其实对于砝码就是纯 ...