微信JS-SDK说明文档

openid 与 unionid
每个用户针对每个公众号会产生一个安全的OpenID
如果需要在多公众号、移动应用之间做用户共通,则需前往微信开放平台,
将这些公众号和应用绑定到一个开放平台账号下,绑定后,
一个用户虽然对多个公众号和应用有多个不同的OpenID,
但他对所有这些同一开放平台账号下的公众号和应用,只有一个UnionID

**************************************************************************************************************************

access_token
公众平台以access_token为接口调用凭据,来调用接口,所有接口的调用需要先获取access_token,
access_token在2小时内有效,过期需要重新获取,但1天内获取次数有限,开发者需自行存储,
详见获取接口调用凭据(access_token)文档。
access_token是公众号的全局唯一接口调用凭据,公众号调用各接口时都需使用access_token。
开发者需要进行妥善保存。access_token的存储至少要保留512个字符空间。
access_token的有效期目前为2个小时,需定时刷新,重复获取将导致上次获取的access_token失效。

**************************************************************************************************************************

获取access token
https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140183

公众号和小程序均可以使用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地址在白名单内。)

**************************************************************************************************************************

公众号主要通过公众号消息会话和公众号内网页来为用户提供服务的,下面分别介绍这两种情况:

1、公众号消息会话
2、公众号内网页
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,不可填写其他。

1、需微信接入生效才行

在公众平台官网的开发-基本设置页面,勾选协议成为开发者,点击“修改配置”按钮,填写服务器地址(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参数内容,
则接入生效,成为开发者成功,否则接入失败。

2、
用户每次向公众号发送消息、或者产生自定义菜单、或产生微信支付订单等情况时,
开发者填写的服务器配置URL将得到微信服务器推送过来的消息和事件,  //得到微信的消息和事件
开发者可以依据自身业务逻辑进行响应,如回复消息。

用户向公众号发送消息时,公众号方收到的消息发送者是一个OpenID,
是使用用户微信号加密后的结果,每个用户对每个公众号有一个唯一的OpenID。
另请注意,微信公众号接口必须以http://或https://开头,分别支持80端口和443端口。

3、接收普通消息
当普通微信用户向公众账号发消息时,微信服务器将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

如果用户在微信客户端中访问第三方网页,公众号可以通过微信网页授权机制,
来获取用户基本信息,进而实现业务逻辑。

1、在微信公众号请求用户网页授权之前,   //
开发者需要先到公众平台官网中的“开发 - 接口权限 - 网页服务 - 网页帐号 - 网页授权获取用户基本信息”的配置选项中,修改授权回调域名。
请注意,这里填写的是域名(是一个字符串),而不是URL,因此请勿加 http:// 等协议头;
//这一步非常重要,只有配置了这个,才能够通过微信授权进行回调。

2、授权回调域名配置规范为全域名,比如需要网页授权的域名为: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的区别说明
1、直接进了回调页:
   以snsapi_base为scope发起的网页授权,是用来获取进入页面的用户的openid的,
   并且是静默授权并自动跳转到回调页的。用户感知的就是直接进入了回调页(往往是业务页面)

2、需用户手动同意后才进入的
   以snsapi_userinfo为scope发起的网页授权,是用来获取用户的基本信息的。但这种授权需要用户手动同意,并且由于用户同意过,
   所以无须关注,就可在授权后获取该用户的基本信息。(关注了公众号后,才能调用成功的)

3、用户管理类接口中的“获取用户基本信息接口”,是在用户和公众号产生消息交互或关注后事件推送后,(所以要随便发些东西) 
   才能根据用户OpenID来获取用户基本信息。这个接口,包括其他微信接口,都是需要该用户(即openid)关注了公众号后,才能调用成功的。

--------------------------------------------------------

关于网页授权access_token和普通access_token的区别

1、微信网页授权是通过OAuth2.0机制实现的,在用户授权给公众号后,
   公众号可以获取到一个网页授权特有的接口调用凭证(网页授权access_token),  //公众号可以获取用户基本信息
   通过网页授权access_token可以进行授权后接口调用,如获取用户基本信息;

2、其他微信接口,需要通过基础支持中的“获取access_token”接口来获取到的普通access_token调用。

---------------------------------------------------------
关于特殊场景下的静默授权
1、上面已经提到,对于以snsapi_base为scope的网页授权,就静默授权的,用户无感知;
2、对于已关注公众号的用户,如果用户从公众号的会话或者自定义菜单进入本公众号的网页授权页,
   即使是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

**************************************************************************************************************************
 

转载于:https://my.oschina.net/u/2277088/blog/3031909

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值