• 微信公众号开发之网页授权


    微信公共号的开发和传统的web项目开发的主要区别是用户登录授权,而且用户和第三方服务器的交互都经过了微信服务器。

    详细说明就是,用户发送请求,微信服务器接收请求,然后转发给第三方服务器,第三方服务器处理请求,将相应数据发给微信服务器,微信服务器将数据转发给用户。

    需要说明的是,这个流程是针对用户与公众号进行交互时的流程。一般场景下,微信扫描二维码打开链接,或者用户分享链接,用微信打开时,都是启动了微信自带的浏览器,这个时候微信服务器会对访问的网址进行检测,但是并没有对网站的内容进行处理,原封不动的展示给用户了(目前是这样的)。

    首先有几个比较重要的概念:

    • 公众号的appID和
    • 公众号的全局唯一接口调用凭据access_token:这个可以理解为第三方服务器和微信服务器交互的凭据,通俗的说就是门禁卡(有过期时间,过期后需要重新申请)。这个的好处是可以避免每次和微信服务器交互时发送appID和appsecret而造成风险。
    • 用户的openid:这个某个微信用户唯一标识,但是仅仅针对对当前公众号。一个微信用户有无数个openid,对每一个公众号都有一个openid

    目前碰到的比较复杂的问题是获取用户的基本信息。如果获取微信用户的基本信息呢?

    • 开发者到公众平台官网中“开发-接口权限-网页服务-网页账号-网页授权获取用户基本信息”的配置选项中,修改授权回调域名配置(即下面请求中的redirect_uri的域名)。这里填写的是域名(是一个字符串),而不是URL,因此请勿加 http:// 等协议头。
    • 获取code,引导用户打开如下页面https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect ,其中scope有两个值snsapi_base(静默授权用户无感知,只能获取用户的openid)和snsapi_userinfo(弹出窗口让用户确认,如果用户已经关注,也是静默授权)。用户点击同意,页面将跳转至的redirect_uri回调域名,同时携带参数code
    • 获取access_token和用户的openid,这个access_token和之前说的 全局唯一接口调用凭据access_token 不是一个,只是恰好参数名相同而已。需要发送请求至https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code,这样就可以获取到access_tokenopenid
    • 获取用户信息,发送请求至https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN,这样就可以获取到用户信息。

    这样就可以获取用户信息了。

    假如已经获取到了用户的openid,那么通过下面的请求可以直接获取到用户的基本信息:

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

    注意这个access_token是公众号的全局唯一接口调用凭据。

    项目地址如下:https://gitee.com/colin220/weixin_public_platform.git

    公司的项目也是一个微信公众号项目,在用户访问首页时候就会获取用户信息。在本地调试的时候,授权回调域名是一个问题,如何跳到本地localhost:8080是个问题,因此做了一个公用的回调页面,将这个页面放在测试服务器,在这个回调页面上再一次跳转,跳转到localhost:8080/index的页面。

    在获取code的那个步骤中,其实有一个state参数,可以通过这个参数将本地的ip传进去,然后再跳转到本地ip上。

    参考文档:

    https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1445241432

  • 相关阅读:
    【笔记】Cross Join&lag与lead函数
    【笔记】Oracle 窗口函数
    【笔记】greatest/least函数&Round函数
    【笔记】Oracle列转行unpivot&行转列 PIVOT
    【Oracle】ORDER BY 2 DESC,1 ASC,同时对多个数据列进行不同的顺序排序&Oracle中的 (+)
    PostgreSQL 14.4的安装以及使用以及一些安装的异常
    如何设计一个keyvalue存储
    Implementing a KeyValue Store – Part 5: Hash table implementations
    Using existing keyvalue stores as models
    Implementing a KeyValue Store – Part 6: OpenAddressing Hash Tables
  • 原文地址:https://www.cnblogs.com/colin220/p/10601971.html
Copyright © 2020-2023  润新知