zoukankan      html  css  js  c++  java
  • 微信中控网页授权的实现

    大家都知道,微信公众号不同于企业微信(原企业号),一个公众号只有一个应用,只能配一个服务器地址。另一个不同就是,在刷新access_token时,公众号的access_token会更新,旧的会失效。因此,信平台建议使用一个中控服务器来定时刷新access_token,可以使用内存存储或持久化到数据库中。保证在有效时间内,所调用的token相同。

    我做了一个微信中控的小应用,将所有公众号的消息及事件请求接收后,根据消息转发功能,转发到不同的业务系统中。由它定时获取access_token,其它业务系统只有读取的接口,没有刷新的功能,这样保证各个系统在同一时间的access_token都是有效的。

    但对于微信网页授权时,一时找不到思路。后来从网上看了别人的解决思路,试着弄成功了(抱歉时间久远,已经不知道文章来源是哪了)。这里把我自己的实现方法分享给大家,大家如果有更好的思路,欢迎交流。


    所谓网页授权,其实就是用户在微信浏览器中打开页面时,获取到当前登录微信的用户信息。

    对于公众号而言,每个用户对应唯一的openId,这是根据某种算法生成的字符串,即便用户是否关注。

    除了openId这最基本的信息以外,还包括昵称、性别、地区、头像等信息。

    获取用户的信息,有这么几种方式:

    用户关注某个公众号后,根据API获取用户openId列表,根据openId获取其它基本信息。
    用户给公众号发送消息或触发事件,后台解析发送者的openId,根据API获取用户信息
    网页授权只获取用户的openId或包括openId在内的基本信息

    下面介绍微信中控如何接入网页授权的功能,比如我的中控地址为:http://dulinan.cn/wechatserver(真实的没有给提供)

    1.接入网页授权

    微信服务号平台地址:https://mp.weixin.qq.com/

    登入后在 公众号设置->功能设置中,将中控地址填入


    上面设置业务域名,可使得不出现安全提示(输入账号密码之类的)

    上面设置JS接口安全域名,可在该域名下调用微信开放的JS接口

    上面设置网页授权域名,防止与服务器地址不一致时出现redirect_url错误

    前两个可同时设置三个,每月修改三次,最后一个最多只能设置一个。三个要保证和服务器域名相同,通过ICP的备案验证,并.txt文件放根目录下


    2.微信网页授权时序图(具体的代码将在后面介绍,方便大家理解)

    在公众号直接接入业务系统时,时序图是这样的:


    在公众号接入中控时,时序图是这样的:




    时序图中的146需要开发者自行开发,235在中控中已处理好。

    比如有个扫码获取门票的场景:

    1)用户在填写预约信息后,点击预约,后台对预约信息进行保存,同时生成二维码并与此预约信息绑定作为门票进行。

    2)用户扫码后,公众号对此用户发送预约成功的模版消息。

    3)用户点击模版消息,跳转到验票页面。

    其中第3步对应网页授权的点击链接那个环节。

    实现步骤:

    1.填写预约信息进行预约


    2.生成二维码


    3.用户扫码获取预约信息


    4.点击链接进入验票页面



    代码说明:

    1.用户在点击场景3中的模版消息时,模版消息带着一个链接,链接地址为中控的地址的一个方法(这个地址是自平台生成《时序图那块》,直接由自平台发的模版消息),中控根据获取的appid,重定向地址(肯定是业务系统的地址),以及业务系统中的参数(比如这个例子是二维码的ticket),获取code值,并重定向到中控的另一个方法中。

    2.另一个方法接收到code值、重定向地址,以及业务系统中的参数。带着code及业务系统中的参数,重定向到重定向地址中(比如叫a地址的b方法)

    3.进入到业务系统的a地址的b方法后,它需要根据code获取网页授友的access_token,这样带着code,进入到中控中,通过code获取网页授权的access_token,获取到access_token,就可以处理相应的业务了



  • 相关阅读:
    iOS -Swift 3.0 -for(循环语句用法)
    C++ 中的std::vector介绍(转)
    C++ 中的sort排序用法
    iOS获取当前AppStore版本号与更新
    cocos2dx 3.x(获得父类的node型指针调用父类函数this->getParent())
    cocos2dx 3.x(TexturePacker进行图片加密)
    cocos2dx 3.x(屏幕截图的两种方法)
    cocos2dx 3.x(在Mac平台下利用Eclipse打包安卓apk安装包详细教程)
    cocos2dx 3.x(定时器或延时动作自动调用button的点击响应事件)实现自动内测
    cocos2dx 3.x(移动修改精灵坐标MoveTo与MoveBy)
  • 原文地址:https://www.cnblogs.com/dulinan/p/12033064.html
Copyright © 2011-2022 走看看