网页关注微信服务号登录

本文基于微信公众号开发平台文档整理出来的

一、公众号(服务号)基本信息获取

1、创建微信公众平台开发账号

https://mp.weixin.qq.com/

2、配置开发信息【这些设置都要开通认证(非个人)】

3、获取测试订阅号

我们个人的订阅号没有办法开通微信认证很多功能不能使用 ,

可以获取测试号进行开发测试

https://developers.weixin.qq.com/doc/offiaccount/Basic_Information/Requesting_an_API_Test_Account.html

由于用户体验和安全性方面的考虑,微信公众号的注册有一定门槛,某些高级接口的权限需要微信认证后才可以获取。

所以,为了帮助开发者快速了解和上手微信公众号开发,熟悉各个接口的调用,我们推出了微信公众帐号测试号,通过手机微信扫描二维码即可获得测试号。

如果服务器没有配置好微信服务器的认证接口会配置失败

我们也可以用 ngrok 将本机的端口,进行内容穿透,变成网络路径

官网: https://www.ngrok.cc/

1558286985@qq.com

zzzzzz

注册之后开通隧道

  • 打开客户端,配置要打开的隧道

4、以上接口为微信的签名认证

微信以 get 请求来验证我们的服务器,

认证成功请原样返回 echostr 参数内容,则接入生效,成为开发者成功,否则接入失败。

认证接口配置成功后,下面的提交按钮会隐藏

5、设置用户关注公众号后的微信服务器回调接口(给我们服务器发送用户信息)

这里填写的是域名(是一个字符串),而不是URL,因此请勿加http://等协议头;

到这里,我们就获取到我们必须用到的测试信息了,包括

  • 公众号appID、appsecret的获取;

  • 关注我们测试的公众号;

  • 配置扫码用户授权后回调的域名。

二、微信授权登录并获取用户基本信息

  • 通过网页授权的方式

  • 第二种【三】但是原来的代码实现方式是根据 ticket 获取微信二维码,来引导用户关注二维码的

关注微信服务号时序图

  

1、用户统一授权,获取 code

[参考博文]  https://blog.csdn.net/qq_34184943/article/details/104836671 

网页是在微信中打开的,那我怎么第三方网站该怎么确定用户是否登陆呢?

其实我们前面扫码的时候传过来一个code,此时我们就可以将获取到到用户信息和code绑定,您可以将这部分信息放入数据或者redis中,然后在我们的网站中根据这code循环获取这部分信息,若查询到了网站则登陆。

  • code 说明:

code作为换取access_token的票据,每次用户授权带上的code将不一样,code只能使用一次,5分钟未被使用自动过期。


  • 获取 code 的链接:

https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect
​
  • 参数说明:

    • appid公众号的唯一标识(这个就是我们前面申请的)

    • redirect_uri 授权后重定向的回调链接地址(我们前面申请的)

    • response_type 返回类型,请填写code

    • scope 应用授权作用域,snsapi_base (不弹出授权页面,直接跳转,只能获取用户openid),

    • scope = snsapi_userinfo (弹出授权页面,可通过openid拿到昵称、性别、所在地。并且,即使在未关注的情况下,只要用户授权,也能获取其信息)

    • state 重定向后会带上state参数,开发者可以填写a-zA-Z0-9的参数值,最多128字节,该值会被微信原样返回,我们可以将其进行比对,防止别人的攻击。

    • #wechat_redirect 直接在微信打开链接,可以不填此参数。做页面302重定向时候,必须带此参数

2、通过 code 换取网页授权的 access_token

  • 获取链接:

https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code
  • 参数说明

参数是否必须说明
appid公众号的唯一标识
secret公众号的appsecret
code填写第一步获取的code参数
grant_type填写为authorization_code
  • 只有获取code的链接必须是在微信客户端中点开的,获取access_token和用户信息可以直接在网页打开即可

  • 返回说明

{
   "access_token":"ACCESS_TOKEN",
   "expires_in":7200,
   "refresh_token":"REFRESH_TOKEN",
   "openid":"OPENID",
   "scope":"SCOPE"
}
参数描述
access_token网页授权接口调用凭证,注意:此access_token与基础支持的access_token不同
expires_inaccess_token接口调用凭证超时时间,单位(秒)
refresh_token用户刷新access_token
openid用户唯一标识
scope用户授权的作用域,使用逗号(,)分隔

3、 根据 openid 查看用户是否已经关注过我们的服务号

获取用户基本信息(包括UnionID机制)

接口调用请求说明 http请求方式: GET https://api.weixin.qq.com/cgi-bin/user/info?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN

参数说明

参数是否必须说明
access_token调用接口凭证
openid普通用户的标识,对当前公众号唯一
lang返回国家地区语言版本,zh_CN 简体,zh_TW 繁体,en 英语

返回说明 参数说明

参数说明
subscribe用户是否订阅该公众号标识,值为0时,代表此用户没有关注该公众号,拉取不到其余信息。
openid用户的标识,对当前公众号唯一
nickname用户的昵称
sex用户的性别,值为1时是男性,值为2时是女性,值为0时是未知
city用户所在城市
country用户所在国家
province用户所在省份
language用户的语言,简体中文为zh_CN
headimgurl用户头像,最后一个数值代表正方形头像大小(有0、46、64、96、132数值可选,0代表640*640正方形头像),用户没有头像时该项为空。若用户更换头像,原有头像URL将失效。
subscribe_time用户关注时间,为时间戳。如果用户曾多次关注,则取最后关注时间
unionid只有在用户将公众号绑定到微信开放平台帐号后,才会出现该字段。
remark公众号运营者对粉丝的备注,公众号运营者可在微信公众平台用户管理界面对粉丝添加备注
groupid用户所在的分组ID(兼容旧的用户分组接口)
tagid_list用户被打上的标签ID列表
subscribe_scene返回用户关注的渠道来源,ADD_SCENE_SEARCH 公众号搜索,ADD_SCENE_ACCOUNT_MIGRATION 公众号迁移,ADD_SCENE_PROFILE_CARD 名片分享,ADD_SCENE_QR_CODE 扫描二维码,ADD_SCENE_PROFILE_LINK 图文页内名称点击,ADD_SCENE_PROFILE_ITEM 图文页右上角菜单,ADD_SCENE_PAID 支付后关注,ADD_SCENE_WECHAT_ADVERTISEMENT 微信广告,ADD_SCENE_OTHERS 其他
qr_scene二维码扫码场景(开发者自定义)
qr_scene_str二维码扫码场景描述(开发者自定义)

4、根据第三步中返回的 subscribe 值,判断是否跳转到关注页面

  • subscribe = 0 表示未关注

  • 引导用户进入公众号

  • 按下图获取关注链接方式,手机上获取不到了

https://mp.weixin.qq.com/mp/profile_ext?action=home&__biz=MzU3MjU5MDIyOQ==&scene=124&uin=&key=&devicetype=Windows+10+x64&version=63030073&lang=zh_CN&a8scene=7&fontgear=2

5、刷新 access_token(如果需要 ,有效时间为 12 小时)

  • 请求地址

    https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID

可以在浏览器中直接执行这个。

  • 参数说明

    参数描述
    access_token网页授权接口调用凭证,注意:此access_token与基础支持的access_token不同
    openid用户的唯一标识

  • 返回数据

    {
       "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"
    }
参数描述
openid用户的唯一标识
nickname用户昵称
sex用户的性别,值为1时是男性,值为2时是女性,值为0时是未知
province用户个人资料填写的省份
city普通用户个人资料填写的城市
country国家,如中国为CN
headimgurl用户头像,最后一个数值代表正方形头像大小(有0、46、64、96、132数值可选,0代表640*640正方形头像),用户没有头像时该项为空。若用户更换头像,原有头像URL将失效。
privilege用户特权信息,json 数组,如微信沃卡用户为(chinaunicom)
unionid只有在用户将公众号绑定到微信开放平台帐号后,才会出现该字段。详见:获取用户个人信息(UnionID机制)

6、通过access_token、openid获取用户信息

7、获取 access_token

获取地址: https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=wxcab027276d79d267&secret=0d484cff8acb9c50eb7f8fb1e2bd73fe

调用方式: get

调用参数:

正确返回:

{
    "access_token": "47_v7gEVDwACEqGN-vLPnJ0IXfvpN6_kfg3J4zuEuL-XlxLuOVliCMJEchGGfJOpew-zd2NyswA5M8XVz6d0k1LtFXy4yj-PSNNgNA_uvwz6LoWcvdBrT-iGQSZb3sj6dSnM3qpEU_5Cww3rfuGYIYbAGAFPF",
    "expires_in": 7200
}

三、根据 Tiket 获取公众号的二维码引导用户关注公众号

appID : wxcab027276d79d267

appsecret : 0d484cff8acb9c50eb7f8fb1e2bd73fe

1、获取 access_token

参数是否必须说明
grant_type获取access_token填写client_credential
appid第三方用户唯一凭证
secret第三方用户唯一凭证密钥,即appsecret

正确返回:

{
    "access_token": "47_TD5FaYmYu9ElK_CUA7bl-9jIZKP6c0YOdY95k5pW4J2OVZV4qnPlo0PXyg-QJddo_QENkHFfxxAnBVR1mdtyvSxN2Y7Uw6ADehgCIpDWBANsJhU-2BnLb0lkuGuolAr-t8P6KttmaIYi11HiRKDaAEAWPI",
    "expires_in": 7200
}

2、 创建二维码ticket

  • 分两种 tiket ,一种临时的,但是数量无限;第二种永久的,但是只能由10 万个。

临时二维码请求说明

http请求方式: POST URL: https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token=TOKEN POST数据格式:json POST数据例子:{"expire_seconds": 604800, "action_name": "QR_SCENE", "action_info": {"scene": {"scene_id": 123}}} 或者也可以使用以下POST数据创建字符串形式的二维码参数:{"expire_seconds": 604800, "action_name": "QR_STR_SCENE", "action_info": {"scene": {"scene_str": "test"}}}

永久二维码请求说明

http请求方式: POST URL: https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token=TOKEN POST数据格式:json POST数据例子:{"action_name": "QR_LIMIT_SCENE", "action_info": {"scene": {"scene_id": 123}}} 或者也可以使用以下POST数据创建字符串形式的二维码参数: {"action_name": "QR_LIMIT_STR_SCENE", "action_info": {"scene": {"scene_str": "test"}}}

参数说明

param := {"expire_seconds": 600, "action_name": "QR_SCENE", "action_info": {"scene": {"scene_id": 123}}}

参数说明
expire_seconds该二维码有效时间,以秒为单位。 最大不超过2592000(即30天),此字段如果不填,则默认有效期为30秒。
action_name二维码类型,QR_SCENE为临时的整型参数值,QR_STR_SCENE为临时的字符串参数值,QR_LIMIT_SCENE为永久的整型参数值,QR_LIMIT_STR_SCENE为永久的字符串参数值
action_info二维码详细信息
scene_id场景值ID,临时二维码时为32位非0整型,永久二维码时最大值为100000(目前参数只支持1--100000)
scene_str场景值ID(字符串形式的ID),字符串类型,长度限制为1到64

  • 返回说明

正确的Json返回结果:

{
    "ticket": "gQEP8DwAAAAAAAAAAS5odHRwOi8vd2VpeGluLnFxLmNvbS9xLzAyOGsyRlYyZEtlbkUxZmcxN3h4MTAAAgR4vwdhAwRYAgAA",
    "expire_seconds": 600,
    "url": "http://weixin.qq.com/q/028k2FV2dKenE1fg17xx10"
}
参数说明
ticket获取的二维码ticket,凭借此ticket可以在有效时间内换取二维码。
expire_seconds该二维码有效时间,以秒为单位。 最大不超过2592000(即30天)。
url二维码图片解析后的地址,开发者可根据该地址自行生成需要的二维码图片

3、 生成二维码

4、扫描带参数二维码事件——来获取用户信息

事件的回调方法就是我们在 配置认证的方法

oje6X6JuCi1c14HkK2PkEpEpCPLM

  1. 如果用户还未关注公众号,则用户可以关注公众号,关注后微信会将带场景值关注事件推送给开发者。

  2. 如果用户已经关注公众号,则微信会将带场景值扫描事件推送给开发者。

  • 1、用户未关注时,进行关注后的事件推送

推送XML数据包示例:

<xml>
  <ToUserName><![CDATA[toUser]]></ToUserName>
  <FromUserName><![CDATA[FromUser]]></FromUserName>
  <CreateTime>123456789</CreateTime>
  <MsgType><![CDATA[event]]></MsgType>
  <Event><![CDATA[subscribe]]></Event>
  <EventKey><![CDATA[qrscene_123123]]></EventKey>
  <Ticket><![CDATA[TICKET]]></Ticket>
</xml>

参数说明:

参数描述
ToUserName开发者微信号
FromUserName发送方帐号(一个OpenID)
CreateTime消息创建时间 (整型)
MsgType消息类型,event
Event事件类型,subscribe
EventKey事件KEY值,qrscene_为前缀,后面为二维码的参数值
Ticket二维码的ticket,可用来换取二维码图片
  • 2. 用户已关注时的事件推送

推送XML数据包示例:

<xml>
  <ToUserName><![CDATA[toUser]]></ToUserName>
  <FromUserName><![CDATA[FromUser]]></FromUserName>
  <CreateTime>123456789</CreateTime>
  <MsgType><![CDATA[event]]></MsgType>
  <Event><![CDATA[SCAN]]></Event>
  <EventKey><![CDATA[SCENE_VALUE]]></EventKey>
  <Ticket><![CDATA[TICKET]]></Ticket>
</xml> 

参数说明:

参数描述
ToUserName开发者微信号
FromUserName发送方帐号(一个OpenID)
CreateTime消息创建时间 (整型)
MsgType消息类型,event
Event事件类型,SCAN
EventKey事件KEY值,是一个32位无符号整数,即创建二维码时的二维码scene_id
Ticket二维码的ticket,可用来换取二维码图片

5、 根据 OpenID 获取用户信息

GET https://api.weixin.qq.com/cgi-bin/user/info?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN

参数说明

参数是否必须说明
access_token调用接口凭证
openid普通用户的标识,对当前公众号唯一
lang返回国家地区语言版本,zh_CN 简体,zh_TW 繁体,en 英语

返回说明

参数说明

参数说明
subscribe用户是否订阅该公众号标识,值为0时,代表此用户没有关注该公众号,拉取不到其余信息。
openid用户的标识,对当前公众号唯一
nickname用户的昵称
sex用户的性别,值为1时是男性,值为2时是女性,值为0时是未知
city用户所在城市
country用户所在国家
province用户所在省份
language用户的语言,简体中文为zh_CN
headimgurl用户头像,最后一个数值代表正方形头像大小(有0、46、64、96、132数值可选,0代表640*640正方形头像),用户没有头像时该项为空。若用户更换头像,原有头像URL将失效。
subscribe_time用户关注时间,为时间戳。如果用户曾多次关注,则取最后关注时间
unionid只有在用户将公众号绑定到微信开放平台帐号后,才会出现该字段。
remark公众号运营者对粉丝的备注,公众号运营者可在微信公众平台用户管理界面对粉丝添加备注
groupid用户所在的分组ID(兼容旧的用户分组接口)
tagid_list用户被打上的标签ID列表
subscribe_scene返回用户关注的渠道来源,ADD_SCENE_SEARCH 公众号搜索,ADD_SCENE_ACCOUNT_MIGRATION 公众号迁移,ADD_SCENE_PROFILE_CARD 名片分享,ADD_SCENE_QR_CODE 扫描二维码,ADD_SCENE_PROFILE_LINK 图文页内名称点击,ADD_SCENE_PROFILE_ITEM 图文页右上角菜单,ADD_SCENE_PAID 支付后关注,ADD_SCENE_WECHAT_ADVERTISEMENT 微信广告,ADD_SCENE_OTHERS 其他
qr_scene二维码扫码场景(开发者自定义)
qr_scene_str二维码扫码场景描述(开发者自定义)

{"xml":

{ "ToUserName": {"#cdata-section":"gh_7c126a2c8e36"},

"FromUserName":{"#cdata-section":"oje6X6JuCi1c14HkK2PkEpEpCPLM"},

"CreateTime":"1627962494",

"MsgType":{"#cdata-section":"event"},

"Event":{"#cdata-section":"SCAN"},

"EventKey":{"#cdata-section":"123"},

"Ticket":{"#cdata-section":"gQHz7zwAAAAAAAAAAS5odHRwOi8vd2VpeGluLnFxLmNvbS9xLzAyS1p0QlZoZEtlbkUxYmItODF4MTAAAgRzvAhhAwRYAgAA"}}}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值