微信登录接口

开发须知

1.概念区分

  • 因为接触到微信开发的知识,必然会接触 OpenID 与 UnionID 的使用,以下为微信官方文档的的介绍,请注意区分:
  • 在关注者与公众号产生消息交互后,公众号可获得关注者的 OpenID(加密后的微信号,每个用户对每个公众号的 OpenID 是唯一的。对于不同公众号,同一用户的 OpenID 不同)。
  • 公众号可通过相应接口来根据 OpenID 获取用户基本信息,包括昵称、头像、性别、所在城市、语言和关注时间。
  • 请注意,如果开发者有在多个公众号,或在公众号、移动应用之间统一用户帐号的需求,需要前往微信开放平台(open.weixin.qq.com)绑定公众号后,才可利用 UnionID 机制来满足上述需求。
  • 简单概括来讲:
  • OpenID 是普通用户的标识,对当前开发者帐号唯一。一个 OpenID 对应一个公众号。
  • UnionID 是用户统一标识。针对一个 微信开放平台帐号 下的应用,同一用户的 UnionID 是唯一的。

2.归纳整理

  • 绕了这个圈,也就是说,微信公众号开发与微信开发平台开发是有差别的
  • 想让同一个微信用户使用不同平台(如PC端、app、微信小程序等)的网站登录,需要进行账号绑定,而这个绑定的账号不能以 OpenID 区分,而需要用 UnionID 区分。

3.典型问题

  • 附录一个常见的设计问题,主要在于开发前的知识使用不够全面,而造成后续拓展的影响,当然,这也是我遇到的问题,希望可以给各位敲个警钟。
    微信登录接口_第1张图片

4、微信链接

  • 微信公众平台
  • 微信开放平台
  • 微信支付平台

申请接口流程

1、 微信公众号接口申请

  • 注册首先要去微信公众平台去注册帐号 微信公众平台

    • 具体注册帐号,请参考网上教程
    • 必须要求是必须是企业用户
    • 这一篇是我自己申请的订阅号,可以参考下申请流程开通个人微信公众号
  • 绑定运营者微信号当客户注册完之后,把他的帐号密码拿过来,自己进去先绑定一个自己的微信号(这样以便以后直接用自己的帐号就能进行登录。一个微信帐号只能绑定5个微信公众号管理员)

    • 设置->安全中心->管理员和运营者设置->绑定运营者微信号
      微信登录接口_第2张图片
  • 基本配置把微信公众号的基本信息拿过来。最主要的还是把appid和appsecret给设置好

    • 开发->基本配置->公众号开发信息
      微信登录接口_第3张图片
  • 公众号设置接着设置微信公众号和自己网站对接

    • 公众号设置->功能设置->业务域名js接口安全域名网页授权域名
      微信登录接口_第4张图片
  • 接口调试工具调试接口程序的方法

    • 开发->开发者中心->开发者文档在线接口调试工具web开发者工具
      微信登录接口_第5张图片
以上是申请操作
申请成功后获得微信公众号测试key
Appid:123456
AppSecret:000000000

2、 微信电脑接口申请

接口申请,必须要先微信公众平台注册申请,然后在去公众开放平台注册申请。
具体可以参考第一步操作。和第三步操作

以上是申请操作
申请成功后获得微信电脑登录测试key:
Apppid:456789
Appsecret:1000000000

3、 同时申请两个端,可进行绑定 关联

如果只是需要微信公众号端登录的话,可以不用设置的很麻烦。如果需要两种方式登录的话,就需要去微信开放平台进行绑定

  • 首先要去微信开放平台去注册帐号https://open.weixin.qq.com/

  • 如果需要在微信开放平台上面操作,请先在微信公众平台上申请一个帐号(参考:1、 微信公众号接口申请

  • 先进行帐号绑定

    • 帐号中心->基本资料开发者资质
      微信登录接口_第6张图片
  • 在进行接口绑定申请,当然这个申请完之后,以后的微信登录他都会返回一个特定的微信单独帐号的一个码(简称uid)

    • 微信公众号:管理中心->公众帐号
    • 微信电脑登录:网站应用->创建网站应用(创建完之后要设置授权回调域:www.xxx.com
      微信登录接口_第7张图片
  • 绑定成功之后,获取他的APPIDAPPSECRET,每次登录都是需要获取这个不一样的id
    微信登录接口_第8张图片


以上就是申请流程。
下面可就操作,如何用php程序和他对接
上面的配置一定要配置好
公众号设置:
业务域名:www.meetes.top
JS接口安全域名:www.meetes.top
网页授权域名:www.meetes.top

微信公众号登录:
Appid:123456
AppSecret:000000000

微信电脑扫码登录:
Appid:456789
AppSecret:100000000


程序业务流程

  • 电脑扫一扫登录:

    • https://open.weixin.qq.com/connect/qrconnect?appid='.$appid.'&redirect_uri=https://www.baidu.com&response_type=code&scope=snsapi_login&state=1#wechat_redirect
  • 微信公众号登录:

    • https://open.weixin.qq.com/connect/oauth2/authorize?appid='.$appid.'&redirect_uri=https://www.baidu.com&response_type=code&scope=snsapi_userinfo&state=2#wechat_redirect

我CSDN里有几篇是关于这个的,想了解更多的,可以去我的CSDN里看看

微信网页授权登录

大概思路流程是这样的:通过程序链接->从微信那边授权->获取微信那边返回的用户信息->然后进行组装->组装好插入到我们的数据库当中就行了

  • 通过OAuth2.0方式弹出授权页面获得用户基本信息(什么是OAuth2.0?)

    • 简要概述什么是OAuth2.0:

    • OAuth是一个开放协议,允许用户让第三方应用以安全且标准的方式获取该用户在某一网站、移动或桌面应用上存储的私密的资源(如用户个人信息、照片、视频、联系人列表),而无需将用户名和密码提供给第三方应用。

    • OAuth 2.0是OAuth协议的下一版本,但不向后兼容OAuth 1.0。 OAuth 2.0关注客户端开发者的简易性,同时为Web应用,桌面应用和手机,和起居室设备提供专门的认证流程。
    • OAuth允许用户提供一个令牌,而不是用户名和密码来访问他们存放在特定服务提供者的数据。每一个令牌授权一个特定的网站(例如,视频编辑网站)在特定的时段(例如,接下来的2小时内)内访问特定的资源(例如仅仅是某一相册中的视频)。这样,OAuth允许用户授权第三方网站访问他们存储在另外的服务提供者上的信息,而不需要分享他们的访问许可或他们数据的所有内容。
  • 获得微信公众平台关注用户的基本信息,包括昵称、头像、性别、国家、省份、城市、语言。

第一步:用户同意授权,获取code

  • 在确保微信公众账号拥有授权作用域(scope参数)的权限的前提下(服务号获得高级接口后,默认带有scope参数中的snsapi_base和snsapi_userinfo),

  • 引导关注者打开如下页面:

1
2
https://open.weixin.qq.com/connect/oauth2/authorize?appid= `APPID` &redirect_uri= `REDIRECT_URI` &response_type=code&scope=SCOPE&state=STATE#wechat_redirect 
(若提示“该链接无法访问”,请检查参数是否填写错误,是否拥有scope参数对应的授权作用域权限。)
  • 参数说明:
    微信登录接口_第9张图片
  • 用户同意授权后
    • 如果用户同意授权,页面将跳转至 redirect_uri/?code=CODE&state=STATE。若用户禁止授权,则重定向后不会带上code参数,仅会带上state参数redirect_uri?state=STATE
    • code说明 : code作为换取access_token的票据,每次用户授权带上的code将不一样,code只能使用一次,5分钟未被使用自动过期。
  • 将该链接回复给关注用户,用户点击后,弹出应用授权界面
    微信登录接口_第10张图片

第二步:通过code换取网页授权access_token

  • 首先请注意,这里通过code换取的网页授权access_token,与基础支持中的access_token不同。公众号可通过下述接口来获取网页授权access_token。

  • 如果网页授权的作用域为snsapi_base,则本步骤中获取到网页授权access_token的同时,也获取到了openid,snsapi_base式的网页授权流程即到此为止。

  • 获取code后,请求以下链接获取,请求方法:GET

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
access_token:  https://api.weixin.qq.com/sns/oauth2/access_token?appid= `APPID` &secret=SECRET&code= `CODE` &grant_type=authorization_code

``` 

* 参数说明
  ![参数说明](/images/categories/wechat/2018/03/0320_04.png)

* 返回说明

```JS
正确时返回的JSON数据包如下:
{

  "access_token":"ACCESS_TOKEN",

   "expires_in":7200,

  "refresh_token":"REFRESH_TOKEN",

   "openid":"OPENID",

   "scope":"SCOPE"

}
  • 返回参数说明
    微信登录接口_第11张图片

  • 错误时微信会返回JSON数据包如下(示例为Code无效错误):

    • {“errcode”:40029,”errmsg”:”invalid code”}

第三步:刷新access_token(如果需要)(一般是不会用到这一步的)(忽略)

  • 由于access_token拥有较短的有效期,当access_token超时后,可以使用refresh_token进行刷新,refresh_token拥有较长的有效期(7天、30天、60天、90天),当refresh_token失效的后,需要用户重新授权。

  • 请求方法:GET

  • 获取第二步的refresh_token后,请求以下链接获取access_token:

1
https://api.weixin.qq.com/sns/oauth2/refresh_token?appid= `APPID` &grant_type=refresh_token&refresh_token= `REFRESH_TOKEN`
  • 参数说明:
    微信登录接口_第12张图片

  • 返回说明:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
正确时返回的JSON数据包如下:
{

  "access_token":"ACCESS_TOKEN",

   "expires_in":7200,

  "refresh_token":"REFRESH_TOKEN",

   "openid":"OPENID",

   "scope":"SCOPE"

}
  • 返回参数说明
    微信登录接口_第13张图片

  • 错误时微信会返回JSON数据包如下(示例为Code无效错误):

    • {“errcode”:40029,”errmsg”:”invalid code”}

第四步:拉取用户信息(需scope为snsapi_userinfo)

  • 如果网页授权作用域为snsapi_userinfo,则此时开发者可以通过access_token和openid拉取用户信息了。
  • http:GET(请使用https协议)
1
https://api.weixin.qq.com/sns/userinfo?access_token= `ACCESS_TOKEN` &openid= `OPENID` &lang=zh_CN

注意:这里调用的接口千万不要用下面这个:
http请求方式: GET
https://api.weixin.qq.com/cgi-bin/user/info?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN(这个接口是用基础access_token和openID
来获取用户信息,前提是用户必须已经关注该公众号)

  • 参数说明
    微信登录接口_第14张图片

  • 返回说明:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
正确时返回的JSON数据包如下:
{

   "openid":" OPENID",

   " nickname": NICKNAME,

   "sex":"1",

   "province":"PROVINCE"

   "city":"CITY",

   "country":"COUNTRY",

    "headimgurl":    "http://wx.qlogo.cn/mmopen/g3MonUZtNHkdmzicIlibx6iaFqAc56vxLSUfpb6n5WKSYVY0ChQKkiaJSgQ1dZuTOgvLLrhJbERQQ4eMsv84eavHiaiceqxibJxCfHe/46",

     "privilege":[

     "PRIVILEGE1"

     "PRIVILEGE2"

    ],

    "unionid":"o6_bmasdasdsad6_2sgVt7hMZOPfL"

}
  • 返回参数说明
    微信登录接口_第15张图片

  • 错误时微信会返回JSON数据包如下(示例为openid无效):

    • {“errcode”:40003,”errmsg”:”invalid openid “}

你可能感兴趣的:(微信开发)