刚开始接触小程序时,都会通过微信开发者工具建立一个快速启动模版,点击获取头像昵称,会获取自己的相关信息,如下图。
这里的信息是如何获取的?打开快速启动模版的源码可以看到wx.getUserInfo这个方法:
wx.getUserInfo({
success: res => {
app.globalData.userInfo = res.userInfo
this.setData({
userInfo: res.userInfo,
hasUserInfo: true
})
}
})
response内容:

综上,我们通过wx.getUserInfo方法,访问微信服务器拿到数据信息。
***********************************
ps:
附:官方说明
在使用wx.getUserInfo
wx.getUserInfo() 调用这个方法获取用户信息时,之前会在小程序上自动弹出授权窗口,但是现在改了,这个方法依然可以使用,但是不会自动弹出授权窗口了。
就是说, 以前没有授权的情况下,调用方法,自动弹出授权窗口,授权后拿到用户信息,而现在,调用时会先给你提示,点击继续使用直接报错!!
如何解决呢?
在页面上加上授权按钮 <button open-type="getUserInfo">授权</button>,点击授权弹出授权弹窗,确认授权后在调用wx.getUserInfo(),返回正常。
***********************************
接正文:
类似 wx.getUserInfo,wx.getSetting 都是封装好的方法直接调用微信服务器,而小程序环境内一般的业务请求要如何发送呢?
通过
wx.request
wx.request({
url: 'test.php', //仅为示例,并非真实的接口地址
data: {
x: '',
y: ''
},
header: {
'content-type': 'application/json' // 默认值
},
success: function(res) {
console.log(res.data)
}
})
那么现在问题来了!!!
只有 wx.request 能发送请求有啥用啊,任何一个业务流程都需要有 会话 来保证流程完整的一步一步的走下去,小程序中如何保持会话 ??? --(用cookie?呵呵,小程序不支持);
***********************************
ps:
当然,
现在有一些小程序插件是可以让请求带上cookie的, 感兴趣的同学可以研究下:
***********************************
接正文:
在网页开发中,一个正常的业务流程:
- 登陆产生
sessionid放在cookie中。 - 后续请求都会带上
sessionid保持会话。

而小程序是不支持cookie的,下面就来看下在不支持cookie的情况下,要如何保持会话:
首先第一步肯定是要先登录啦!!
此文对上图有一个不错的解释:手把手教会你小程序登录鉴权
下面通过具体代码来看下,何如实现登陆,及后续请求带上登陆信息保持会话。
***********************************
ps:
下面的服务端代码都是基于腾讯云实验室提供的基于 CentOS 搭建微信小程序服务,可以作为参考。
里面有两种选择:

使用第二种方式同学,这里有一篇我之前搭建环境踩坑总结可以参考:
***********************************
接正文:
下载: 客户端增强sdk
里面提供了:登陆,请求,会话。。。等等方法
├── wafer-client-sdk
| ├── lib
| | ├── constants.js
| | ├── login.js
| | ├── request.js
| | ├── session.js
| | ├── tunnel.js
| | ├── utils.js
| | └── wxTunnel.js
└── ...
login.js 中:
登陆以后,在发起业务请求时:
上述为登陆客户端的实现,看下服务端的实现:
通过上述,对小程序与服务器通信有了一个大概的认识,在开发的过程中有一个新问题!!
-
上述代码中, 每次发送请求都需要通过登录鉴权的中间件。这个跟业务逻辑好像根本无关。
-
如果存在类似客服通信的信道需求,也需要写在业务服务器上。
上述两点会不会让业务服务器变的非常混乱。(会!!)
所以基于这两点,腾讯云推出了 wafer 解决方案。
把会话服务,信道服务单独抽出作为一层,使业务逻辑清晰很多。

上述的会话服务器,信道服务器如果个人自己搭建的话,成本很高。
-
首先需要有三台服务器: 业务服务器,会话服务器,信道服务器。
-
每台服务器都需要单独的运维部署,耗时耗力。
自己尝试搭建过,感觉太复杂了,最终还是放下了。。。。。。有兴趣的同学可以试试,下面是官方参考文档:
因为wafer刚出来的时候是针对企业用户的,所以搭建成本是相对可以接受的,后来wafer2的诞生,对个人用户放开,考虑到个人的开发成本,贴心的推出了牛X的:
通过开发者工具的腾讯云模块实现自动部署:

下面为一站式部署的一个官方DEMO(教程详细这里就不再多赘述了):
总结:
通过此篇大致的了解到小程序云与服务器独有的通信机制,结合文中的一些官方DEMO, 可以很好的掌握其中的原理。
==========================================================================================
后话:
为了让小程序开发者更加方便快捷的进行开发,又推出了 小程序云,宗旨是:让云能力将会成为小程序的基础能力。
- 下面是相关文档介绍: