[TOC]
## wx.login(OBJECT)
[【官方说明】](https://developers.weixin.qq.com/miniprogram/dev/api/api-login.html#wxloginobject)
* **一般性说明**:小程序的Client(C端的js文件里的代码)向WX的Server发送request,得到response的信息。request不需指定URL。
* **主要结构**
~~~JavaScript
wx.login({
timeout: 2000, //ms
success({errMsg: ' ', code: ' '}){ ...... },
fail({...}){ ......}
})
~~~
* **作用**
1. 小程序调用wx.login() 获取 **`临时登录凭证code`** ,并回传到开发者服务器。
2. 开发者服务器以code换取 `用户唯一标识openid` 和 `会话密钥session_key`。
3. 之后开发者服务器可以根据用户标识来生成自定义登录态,用于后续业务逻辑中前后端交互时识别用户身份。
## wx.getUserInfo(OBJECT)
[【官方说明】](https://developers.weixin.qq.com/miniprogram/dev/api/open.html)
* **一般性说明**:小程序的Client(C端的js文件里的代码)向WX的Server发送request,得到response的信息。request不需指定URL。
* **主要结构**
~~~JavaScript
wx.getUserInfo({
timeout: 2000, //ms
success({userInfo:{...}, rawData: Str, signature: Str, encryptedData: Str, iv: Str}){ ...... },
fail({...}){ ......}
})
~~~
* **使用注意**
1. 使用` <button open-type="getUserInfo"></button>` 引导用户主动进行授权操作
2. 当用户未授权过,调用该接口将直接报错
3. 当用户授权过,可以使用该接口获取用户信息
* **`userInfo`参数说明**:
~~~JavaScript
//userInfo结构示例
userInfo:{nickName: Str, avatarUrl: Str, gender: Num,
city: Str, province: Str, country: Str, language: Str}
})
~~~
| 参数 | 类型 | 说明 |
| --- | --- | --- |
| nickName | String | 用户昵称 |
| avatarUrl | String | 用户头像,最后一个数值代表正方形头像大小(有0、46、64、96、132数值可选,0代表132\*132正方形头像),用户没有头像时该项为空。若用户更换头像,原有头像URL将失效。|
| gender | String | 用户的性别,值为1时是男性,值为2时是女性,值为0时是未知 |
| city | String | 用户所在城市 |
| province | String | 用户所在省份|
| country | String | 用户所在国家|
| language | String | 用户的语言,简体中文为zh_CN|
## wx.request(OBJECT)
[【官方说明】](https://developers.weixin.qq.com/miniprogram/dev/api/network-request.html)
* **一般性说明**:小程序的Client(C端的js文件里的代码)向小程序的Server发送request,得到response的信息。request必须需指定URL。
* **主要结构**
~~~JavaScript
wx.request({
url: Str,
data: Obj/Str/Arr,
header: Obj,
method: Cons, //OPTIONS, GET(默认值), HEAD, POST, PUT, DELETE, TRACE, CONNECT
dataType: Str, //json(默认) 如果设为json,会尝试对返回的数据做一次 JSON.parse
responseType: Str/Arr,//设置响应的数据类型。合法值:text、arraybuffer
success({data: Obj/Str/Arr, statusCode: Num, header: {...}}){ ...... },
fail({...}){ ......}
})
~~~
`tip`:header中的content-type 默认为 'application/json';
## 关于小程序中网络相关API的说明
[【官方说明】](https://developers.weixin.qq.com/miniprogram/dev/api/api-network.html)
网络API列表:
| API | 说明 |
|--- |--- |
| wx.request | 发起网络请求|
| wx.uploadFile | 上传文件|
| wx.downloadFile | 下载文件|
| wx.connectSocket | 创建 WebSocket 连接|
| wx.onSocketOpen | 监听 WebSocket 打开|
| wx.onSocketError | 监听 WebSocket 错误|
| wx.sendSocketMessage | 发送 WebSocket 消息|
| wx.onSocketMessage | 接受 WebSocket 消息|
| wx.closeSocket | 关闭 WebSocket 连接|
| wx.onSocketClose | 监听 WebSocket 关闭|
在小程序中使用网络相关的 API 时,需要注意下列问题,请开发者提前了解。
1. 服务器域名配置
每个微信小程序需要事先设置一个通讯域名,小程序可以跟指定的域名与进行网络通信。包括普通 HTTPS 请求(`request`)、上传文件(`uploadFile`)、下载文件(`downloadFile`) 和 WebSocket 通信(`connectSocket`)
**配置流程**
服务器域名请在 `小程序后台-设置-开发设置-服务器域名` 中进行配置,配置时需要注意:
* 域名只支持 https (`request`、`uploadFile`、`downloadFile`) 和 wss (`connectSocket`) 协议;
* 域名不能使用 IP 地址或 localhost
* 域名必须经过 ICP 备案;
* 出于安全考虑,`api.weixin.qq.com` 不能被配置为服务器域名,相关API也不能在小程序内调用。
* 开发者应将 `appsecret` 保存到后台服务器中,通过服务器使用 `appsecret` 获取 `accesstoken`,并调用相关 API。
* 对于每个接口,分别可以配置最多 20 个域名
**HTTPS 证书**
小程序必须使用 HTTPS 请求。小程序内会对服务器域名使用的 HTTPS 证书进行校验,如果校验失败,则请求不能成功发起。由于系统限制,不同平台对于证书要求的严格程度不同。为了保证小程序的兼容性,建议开发者按照最高标准进行证书配置,并使用相关工具检查现有证书是否符合要求。
* HTTPS 证书必须有效。证书必须被系统信任,部署SSL证书的网站域名必须与证书颁发的域名一致,证书必须在有效期内;
* iOS 不支持自签名证书;
* iOS 下证书必须满足苹果[ App Transport Security (ATS)](https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CocoaKeys.html#//apple_ref/doc/uid/TP40009251-SW33) 的要求;
* TLS 必须支持 1.2 及以上版本。部分旧 Android 机型还未支持 TLS 1.2,请确保 HTTPS 服务器的 TLS 版本支持1.2及以下版本;
* 部分 CA 可能不被操作系统信任,请开发者在选择证书时注意小程序和各系统的相关通告。
[Chrome 56/57 内核对 WoSign、StartCom 证书限制周知](https://developers.weixin.qq.com/community/develop/doc/800026caeb042e45681583652b70910a)
**跳过域名校验**
在微信开发者工具中,可以临时开启 开发环境不校验请求域名、TLS版本及HTTPS证书 选项,跳过服务器域名的校验。此时,在微信开发者工具中及手机开启调试模式时,不会进行服务器域名的校验。
**在服务器域名配置成功后,建议开发者关闭此选项进行开发,并在各平台下进行测试,以确认服务器域名配置正确。**
> 如果手机上出现 “打开调试模式可以发出请求,关闭调试模式无法发出请求” 的现象,请确认是否跳过了域名校验,并确认服务器域名和证书配置是否正确。
2. 关于请求
* 默认超时时间和最大超时时间都是 60s
* `request`、`uploadFile`、`downloadFile` 的最大并发限制是 10 个
* 网络请求的 referer header 不可设置。其格式固定为 `https://servicewechat.com/{appid}/{version}/page-frame.html`,其中 `{appid}` 为小程序的 appid,`{version}` 为小程序的版本号,版本号为 0 表示为开发版、体验版以及审核版本,版本号为 devtools 表示为开发者工具,其余为正式版本。
* 小程序进入后台运行后(非置顶聊天),如果 5s 内网络请求没有结束,会回调错误信息 fail `interrupted`;在回到前台之前,网络请求接口调用都会无法调用。
3. 关于服务器返回
**返回值编码**
* 建议服务器返回值使用 UTF-8 编码。对于非 UTF-8 编码,小程序会尝试进行转换,但是会有转换失败的可能。
* 小程序会自动对 BOM 头进行过滤。
**回调**
* 只要成功接收到服务器返回,无论statusCode是多少,都会进入success回调。请开发者根据业务逻辑对返回值进行判断。
## 接口调用凭证`access_token`
`access_token` 是全局唯一接口调用凭据,开发者调用各接口时都需使用 access_token,请妥善保存。access_token 的存储至少要保留512个字符空间。access_token 的有效期目前为2个小时,需定时刷新,重复获取将导致上次获取的 access_token 失效。
[【官方说明】](https://developers.weixin.qq.com/miniprogram/dev/api/token.html)
开发者可以使用 AppID 和 AppSecret 调用本接口来获取 access_token。AppID 和 AppSecret 可登录微信公众平台官网-设置-开发设置中获得(需要已经绑定成为开发者,且帐号没有异常状态)。
AppSecret 生成后请自行保存,因为在公众平台每次生成查看都会导致 AppSecret 被重置。注意调用所有微信接口时均需使用 https 协议。如果第三方不使用中控服务器,而是选择各个业务逻辑点各自去刷新 access_token,那么就可能会产生冲突,导致服务不稳定。
接口地址:
`https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET`
## How To ??
### C端扫描二维码(向S端发送信息)后,S端将处理结果推送到C端? webSocket?
### 管理员在C端进行操作后,S端将处理结果推送到有关的C端? webSocket?
- 微信
- 小程序
- 1. 代码组成
- 1.1 JSON配置--'*.json'文件
- 1.2 WXML模板--'*.wxml'文件
- 1.3 WXSS样式--'*.wxss'文件
- 1.4 JavaScript脚本--'*.js'文件
- 2. 客户端运行
- 2.1 逻辑层和渲染层
- 2.1.1 逻辑层--App Service
- 2.1.2 渲染层/视图层--View
- 2.1.3 通信模型
- 2.1.4 数据驱动
- 2.1.5 双线程下的界面渲染
- 2.2 程序与页面
- 2.3 组件
- 2.4 API
- 2.5 事件
- 2.6 兼容
- 3. 应用设计
- 3.1 Flex布局
- 3.2 界面常见的交互反馈
- 3.3 发起HTTPS网络通信--wx.request
- 3.4 微信登录
- 3.5 本地数据缓存
- 3.6 设备能力
- 4. 小程序的协同工作和发布
- 4.1 协同工作
- 4.2 用户体验审视
- 4.3 发布
- 4.4 运营
- 5. 底层框架
- 5.1 双线程模型
- 5.2 组件系统--Exparser框架
- 5.3 原生组件
- 5.4 小程序与客户端通信原理
- 6. 运行和性能优化
- 6.1 启动--代码加载
- 6.2 页面准备
- 6.3 数据通信
- 6.4 视图层渲染
- 6.5 原生组件通信
- 7. 小程序基础库的更新迭代
- 8. 微信开发者工具
- 腾讯云支持
- wafer
- Wafer2 快速开发 Demo - PHP
- WXAPI
- api列表