openid 与 unionid
每一个用户针对每一个公众号会产生一个安全的OpenID
若是须要在多公众号、移动应用之间作用户共通,则需前往微信开放平台,
将这些公众号和应用绑定到一个开放平台帐号下,绑定后,
一个用户虽然对多个公众号和应用有多个不一样的OpenID,
但他对全部这些同一开放平台帐号下的公众号和应用,只有一个UnionIDphp
**************************************************************************************************************************html
access_token
公众平台以access_token为接口调用凭据,来调用接口,全部接口的调用须要先获取access_token,
access_token在2小时内有效,过时须要从新获取,但1天内获取次数有限,开发者需自行存储,
详见获取接口调用凭据(access_token)文档。
access_token是公众号的全局惟一接口调用凭据,公众号调用各接口时都需使用access_token。
开发者须要进行妥善保存。access_token的存储至少要保留512个字符空间。
access_token的有效期目前为2个小时,需定时刷新,重复获取将致使上次获取的access_token失效。web
**************************************************************************************************************************小程序
获取access token
https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140183api
公众号和小程序都可以使用AppID和AppSecret调用本接口来获取access_token。
AppID和AppSecret可在“微信公众平台-开发-基本配置”页中得到(须要已经成为开发者,且账号没有异常状态)。安全
https请求方式: GET
https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET
grant_type 是 获取access_token填写client_credential
appid 是 第三方用户惟一凭证
secret 是 第三方用户惟一凭证密钥,即appsecret
返回:
{"access_token":"ACCESS_TOKEN","expires_in":7200} //正确
{"errcode":40013,"errmsg":"invalid appid"} //错误服务器
-1 系统繁忙,此时请开发者稍候再试
0 请求成功
40001 AppSecret错误或者AppSecret不属于这个公众号,请开发者确认AppSecret的正确性
40002 请确保grant_type字段值为client_credential
40164 调用接口的IP地址不在白名单中,请在接口IP白名单中进行设置。(小程序及小游戏调用不要求IP地址在白名单内。)微信
**************************************************************************************************************************app
公众号主要经过公众号消息会话和公众号内网页来为用户提供服务的,下面分别介绍这两种状况:微信公众平台
一、公众号消息会话
二、公众号内网页
1)网页受权获取用户基本信息:经过该接口,能够获取用户的基本信息(获取用户的OpenID是无需用户赞成的,获取用户的基本信息则需用户赞成)
2)微信JS-SDK:是开发者在网页上经过JavaScript代码使用微信原生功能的工具包,
开发者可使用它在网页上录制和播放微信语音、监听微信分享、上传手机本地图片、拍照等许多能力。
**************************************************************************************************************************
不一样的公众号类型具有不一样的接口权限:
https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1433401084
公众号每次调用接口时,可能得到正确或错误的返回码,
开发者能够根据返回码信息调试接口,排查错误。
https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1433747234
**************************************************************************************************************************
入门指引
公众号类型: 订阅号,服务号,企业号
公众平台官网登陆以后,找到“基本配置”菜单栏
url填写:http://外网IP:端口号/wx 。外网IP请到腾讯云购买成功处查询, http的端口号固定使用80,不可填写其余。
一、需微信接入生效才行
在公众平台官网的开发-基本设置页面,勾选协议成为开发者,点击“修改配置”按钮,填写服务器地址(URL)、Token和EncodingAESKey,其中
URL是开发者用来接收微信消息和事件的接口URL。
Token可由开发者能够任意填写,用做生成签名(该Token会和接口URL中包含的Token进行比对,从而验证安全性)。
EncodingAESKey由开发者手动填写或随机生成,将用做消息体加解密密钥。
开发者提交信息后,微信服务器将发送GET请求到填写的服务器地址URL上,GET请求携带参数以下表所示:
signature 微信加密签名,signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数。
timestamp 时间戳
nonce 随机数
echostr 随机字符串 //请原样返回echostr参数内容
开发者经过检验signature对请求进行校验(下面有校验方式)。
若确认这次GET请求来自微信服务器,请原样返回echostr参数内容,
则接入生效,成为开发者成功,不然接入失败。
二、
用户每次向公众号发送消息、或者产生自定义菜单、或产生微信支付订单等状况时,
开发者填写的服务器配置URL将获得微信服务器推送过来的消息和事件, //获得微信的消息和事件
开发者能够依据自身业务逻辑进行响应,如回复消息。
用户向公众号发送消息时,公众号方收到的消息发送者是一个OpenID,
是使用用户微信号加密后的结果,每一个用户对每一个公众号有一个惟一的OpenID。
另请注意,微信公众号接口必须以http://或https://开头,分别支持80端口和443端口。
三、接收普通消息
当普通微信用户向公众帐号发消息时,微信服务器将POST消息的XML数据包到开发者填写的URL上。
文本消息
-------------------------------------------------
<xml>
<ToUserName>< ![CDATA[toUser] ]></ToUserName>
<FromUserName>< ![CDATA[fromUser] ]></FromUserName>
<CreateTime>1348831860</CreateTime>
<MsgType>< ![CDATA[text] ]></MsgType>
<Content>< ![CDATA[this is a test] ]></Content>
<MsgId>1234567890123456</MsgId>
</xml>
参数 描述
ToUserName 开发者微信号
FromUserName 发送方账号(一个OpenID)
CreateTime 消息建立时间 (整型)
MsgType text
Content 文本消息内容
MsgId 消息id,64位整型
图片消息
-------------------------------------------------
<xml>
<ToUserName>< ![CDATA[toUser] ]></ToUserName>
<FromUserName>< ![CDATA[fromUser] ]></FromUserName>
<CreateTime>1348831860</CreateTime>
<MsgType>< ![CDATA[image] ]></MsgType>
<PicUrl>< ![CDATA[this is a url] ]></PicUrl>
<MediaId>< ![CDATA[media_id] ]></MediaId>
<MsgId>1234567890123456</MsgId>
</xml>
ToUserName 开发者微信号
FromUserName 发送方账号(一个OpenID)
CreateTime 消息建立时间 (整型)
MsgType image
PicUrl 图片连接(由系统生成)
MediaId 图片消息媒体id,能够调用多媒体文件下载接口拉取数据。
MsgId 消息id,64位整型
**************************************************************************************************************************
微信网页受权 (获取用户openid)
https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140842
若是用户在微信客户端中访问第三方网页,公众号能够经过微信网页受权机制,
来获取用户基本信息,进而实现业务逻辑。
一、在微信公众号请求用户网页受权以前, //
开发者须要先到公众平台官网中的“开发 - 接口权限 - 网页服务 - 网页账号 - 网页受权获取用户基本信息”的配置选项中,修改受权回调域名。
请注意,这里填写的是域名(是一个字符串),而不是URL,所以请勿加 http:// 等协议头;
//这一步很是重要,只有配置了这个,才可以经过微信受权进行回调。
二、受权回调域名配置规范为全域名,好比须要网页受权的域名为:www.qq.com,
配置之后此域名下面的页面http://www.qq.com/music.html 、 http://www.qq.com/login.html 均可以进行OAuth2.0鉴权。
但http://pay.qq.com 、 http://music.qq.com 、 http://qq.com没法进行OAuth2.0鉴权
-------------------------------------------------------
关于网页受权的两种scope的区别说明
一、直接进了回调页:
以snsapi_base为scope发起的网页受权,是用来获取进入页面的用户的openid的,
而且是静默受权并自动跳转到回调页的。用户感知的就是直接进入了回调页(每每是业务页面)
二、需用户手动赞成后才进入的
以snsapi_userinfo为scope发起的网页受权,是用来获取用户的基本信息的。但这种受权须要用户手动赞成,而且因为用户赞成过,
因此无须关注,就可在受权后获取该用户的基本信息。(关注了公众号后,才能调用成功的)
三、用户管理类接口中的“获取用户基本信息接口”,是在用户和公众号产生消息交互或关注后事件推送后,(因此要随便发些东西)
才能根据用户OpenID来获取用户基本信息。这个接口,包括其余微信接口,都是须要该用户(即openid)关注了公众号后,才能调用成功的。
--------------------------------------------------------
关于网页受权access_token和普通access_token的区别
一、微信网页受权是经过OAuth2.0机制实现的,在用户受权给公众号后,
公众号能够获取到一个网页受权特有的接口调用凭证(网页受权access_token), //公众号能够获取用户基本信息
经过网页受权access_token能够进行受权后接口调用,如获取用户基本信息;
二、其余微信接口,须要经过基础支持中的“获取access_token”接口来获取到的普通access_token调用。
---------------------------------------------------------
关于特殊场景下的静默受权
一、上面已经提到,对于以snsapi_base为scope的网页受权,就静默受权的,用户无感知;
二、对于已关注公众号的用户,若是用户从公众号的会话或者自定义菜单进入本公众号的网页受权页,
即便是scope为 snsapi_userinfo ,也是静默受权,用户无感知。 //从公众号进入的即便是snsapi_userinfo,默认是不需经用户赞成获取openid
1 第一步:用户赞成受权,获取code
在确保微信公众帐号拥有受权做用域(scope参数)的权限的前提下
(服务号得到高级接口后,默认拥有scope参数中的snsapi_base和snsapi_userinfo),
引导关注者打开以下页面:
https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect
若提示“该连接没法访问”,请检查参数是否填写错误,是否拥有scope参数对应的受权做用域权限。
尤为注意:因为受权操做安全等级较高,因此在发起受权请求时,微信会对受权连接作正则强匹配校验,
若是连接的参数顺序不对,受权页面将没法正常访问
必须?
appid 是 公众号的惟一标识
redirect_uri 是 受权后重定向的回调连接地址, 请使用 urlEncode 对连接进行处理
response_type 是 返回类型,请填写code
scope 是 应用受权做用域,
snsapi_base (不弹出受权页面,直接跳转,只能获取用户openid),
snsapi_userinfo (弹出受权页面,可经过openid拿到昵称、性别、所在地。而且,即便在未关注的状况下,只要用户受权,也能获取其信息 )
state 否 重定向后会带上state参数,开发者能够填写a-zA-Z0-9的参数值,最多128字节
#wechat_redirect 是 不管直接打开仍是作页面302重定向时候,必须带此参数
用户赞成受权后
若是用户赞成受权,页面将跳转至 redirect_uri/?code=CODE&state=STATE。
code说明 : code做为换取access_token的票据,每次用户受权带上的code将不同,code只能使用一次,5分钟未被使用自动过时。
10003 redirect_uri域名与后台配置不一致
10004 此公众号被封禁
10005 此公众号并无这些scope的权限
10006 必须关注此测试号
10009 操做太频繁了,请稍后重试
10010 scope不能为空
10011 redirect_uri不能为空
10012 appid不能为空
10013 state不能为空
10015 公众号未受权第三方平台,请检查受权状态
10016 不支持微信开放平台的Appid,请使用公众号Appid
第二步:经过code换取网页受权access_token
首先请注意,这里经过code换取的是一个特殊的网页受权access_token,与基础支持中的access_token(该access_token用于调用其余接口)不一样。
公众号可经过下述接口来获取网页受权access_token。若是网页受权的做用域为snsapi_base,
则本步骤中获取到网页受权access_token的同时,也获取到了openid,
snsapi_base式的网页受权流程即到此为止。
scope为snsapi_base
https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx520c15f417810387&redirect_uri=https%3A%2F%2Fchong.qq.com%2Fphp%2Findex.php%3Fd%3D%26c%3DwxAdapter%26m%3DmobileDeal%26showwxpaytitle%3D1%26vb2ctag%3D4_2030_5_1194_60&response_type=code&scope=snsapi_base&state=123#wechat_redirect
scope为snsapi_userinfo
https://open.weixin.qq.com/connect/oauth2/authorize?appid=wxf0e81c3bee622d60&redirect_uri=http%3A%2F%2Fnba.bluewebgame.com%2Foauth_response.php&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect
**************************************************************************************************************************