zoukankan      html  css  js  c++  java
  • 微信之门-授权接口

    微信之门-授权接口

    更新说明:自定义公众号APPID功能现已上线, 通过自定义公众号的APPID, 你可以在微信之门绑定自己的服务号做OAUTH授权, 同时你将得到授权后的 openid 以及微信之门的 wgateid. 查看详细.

    微信打开的网页,是无法持久存贮 cookies 的,你知道吗?
    那么如何辨识唯一用户呢?

    是的,使用微信服务号!服务号拥有高级接口,可以给让网站通过微信的OAuth2授权, 获得用户的 OpenID, 从而辨别一个唯一用户。
    那么,没有微信服务号呢?

    这就是微信之门诞生的原因。

    微信之门已经被调用 42670572 次.

    使用非常简单!
    对于任意需要辨识唯一用户的网站,有两种方式:

    1. 使用WgateJs

    登录系统,在“网站管理”中添加您的域名,点击“生成JS”,将生成的JS,复制在页面head标签中即可。
    WgateJs将会自动检测当前网站是否已获取过wgateid,如果没有,则自动使用 wgate.php api获取,并跳转回当前页面。
    然后使用WgateJs.getWgateid()方法即可获取当前wgateid。详细信息请查看WgateJs
    WgateJs合适静态HTML的网页(如果小游戏等) 或取获取用户 openid或者用户信息。

    2. 使用gate.php接口

    只需要一个页面跳转即可:

    http://www.weixingate.com/gate.php?back=url&force=1
    

    http://www.weixingate.com/#custom_appkey

    更新说明:自定义公众号APPID功能现已上线, 通过自定义公众号的APPID, 你可以在微信之门绑定自己的服务号做OAUTH授权, 同时你将得到授权后的 openid 以及微信之门的

    参数说明:

    • back: 需要跳转到的 url. 需要使用 urlencode(php写法,其它语言也有自己的方法).
    • force: 1,强制必须使用微信授权, 非微信打开网站将会出现微信授权错误页面; 0,不强制使用微信授权,使用非微信打开网站,不能授权时将返回空的wgateid. 默认值: 1
    • info: 是否获取用户信息。可选值:none,不获取用户信息; basic, 获取用户信息。会有微信的授权页面弹出,同一个用户只授权一次; force, 获取用户信息,并且强制显示授权,可用于更新用户信息。跳转返回时不会直接返回用户信息,需使用 wgate_user 接口获取,详情请见下文。
    • appid: 自定义公众号的appid, 需要在用户中心的"微信网关"中添加公众号以及appid, secret等信息.
    • appid_verify: 使用自定义appid时, 需要验证appid的所有权, 请将 appid和secret 字符串连接, 再以md5加密, 为作该参数的值. appid和secret均需要在"微信网关"中的公众号信息中设置.

    注意: info值为 basic,force 时,为控制潜在的风险,需要绑定该域名的用户验证用户手机号,以加强安全性。请到"用户中心->设置用户"中操作。未验证手机号,将会有每天100次的限制。超限的请求会默认使用none作为info的值。

    微信之门会通过微信授权, 拿到用户的 openid, 并转换为 wgateid 作为参数跳转回指定的URL.
    返回参数:

    • wgateid: 获取到的 id
    • wxopenid: 使用自定义appid时, 返回微信用户与之对应的openid.
    • verify: 校验码. 每次的获取 wgateid 的动作都会生成唯一的一个校验码, 网站可以通过这个校验码访问微信之门的校验接口,验证这个wgateid 是否是从微信之门发出的. 以防止恶意行为. 校验码在120秒内有效.

    注意: 使用微信之门的接口, 请先注册用户, 并且在"网站管理" 中添加域名(可以查看实时请求流量哦). 未添加的域名, 将会有每天最多100次的请求限制.

    其它接口

    验证接口:

    http://www.weixingate.com/verify.php?wgateid=用户wgateid&verify=校验码
    

    验证接口用于验证gate.php接口是否真正来自微信之门。返回值为字符串 "true" 或者 "false".

    • wgateid: 必填. 前面获取到的 wgateid
    • verify: 必填. 前面获取到的 verify 校验码
    • jsonp_callback: 可选. 若需要在JS里通过JSONP方式获取时,可设置该参数。具体JSONP的使用方法请参考GOOGLE。

    获取用户信息接口:

    http://www.weixingate.com/wgate_user.php?wgateid=用户wgateid
    

    参数说明:

    • wgateid: wgate接口中返回的用户wgateid.
    • jsonp_callback: 可选. 若需要在JS里通过JSONP方式获取时,可设置该参数。具体JSONP的使用方法请参考GOOGLE。

    对于wgate接口中info参数使用了显示授权方式(basic或者force)的wgateid,
    可以通过此接口获取用户的信息(昵称,性别,位置等),返回数据为JSON格式。
    如需JSONP,请添加jsonp_callback参数,使用方法同verify接口。
    如果该用户ID在系统中不存在,会返回"null"。
    新增: 对于JS调用JSONP方式, 可以不传递wgateid, 直接调用该接口, 会返回当前用户的wgateid或者用户信息(gate.php接口info参数为basic|force时).

    如果你只希望在页面的JS代码中获取wgateid,可以使用WgateJs。
    它可以帮助您做以下几件事情:

    • 自动判断当前页面是否已获取 wgateid,如果没有,则自动使用 wgate.php 接口获取,并跳转回当前页面。
    • 获取当前 wgateid。
    • 获取当前 wgate user 信息。

    如要使用WgateJs,请在用户中心“站点管理”中添加您网站的域名,然后点击“生成JS”,再将生成后的JS放在需要获取wgateid的页面head标签中即可。
    更多属性及方法列表:

    • auto_auth

      获取不到 wgateid 时,自动使用gate.php接口。可选值: true||false

    • gate_options

      使用 gate.php 授权时的参数,例如:WgateJs.gate_options={force:1}

    • ready

      当WgateJs准备就绪时执行的回调方法。例如:WgateJs.ready=function(){...}

    • getWgateid()

      获取当前wgateid的方法。如果获取不到,则返回null。

    • getWgateUser(callback)

      获取当前用户信息。通过callback回调返回。例如:WgateJs.getWgateUser(function(user){...})。
      注意:该方法实际使用了wgate_user.php接口,所以需要设置WgateJs.gate_options中{info:"basic"}或者{info:"force"}

    示例:

      (function() {
        WgateJs = {};
        WgateJs.auto_auth=true;
        WgateJs.gate_options={force:1,info:"basic"};
        WgateJs.ready=function(){
          var wgateid=WgateJs.getWgateid();
          WgateJs.getWgateUser(function(user){console.info(user)});
        }
        var u=(("https:" == document.location.protocol) ? "https" : "http") + "://st.weixingate.com/";
        u=u+'st/10';//注意每个site这里的数字不一样
        var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0]; g.type='text/javascript';
        g.defer=true; g.async=true; g.src=u; s.parentNode.insertBefore(g,s);
      })();
    
    
    
          

    使用了微信之门后, 你可能会有几个新的需求:

    • 现有的一批用户拥有了 wgateid, 但我想对接到新的公众号系统中, 与用户的 openid 连接起来.
    • 我想借用微信之门的授权跳转机制, 使用自己的服务号来获取用户openid.
    • 我想将几个不同的公众号微网站中的用户信息打通, 实现更智能的服务.

    自定义公众号APPID的功能 可以帮助你实现这些功能.
    通过自定义的APPID(使用你自己的认证服务号), 你可以使用微信之门的接口, 同时获取一个微信用户针对你自定义APPID的openid, 以及微信之门的 wgateid.

    操作方法

    • 注册微信之门用户
    • 用户中心->消息网关 中添加要自定义APPID的公众号, 并准备填写 appid, secret
    • 回到微信后台, "开发者中心" 中找到 "网页授权获取用户基本信息" 修改授权回调域名为 "www.weixingate.com"
    • 使用微信之门的 gate.php 接口, 并添加 appid 和 appid_verify (具体请见gate.php接口说明)参数.

    接口返回的参数中, wxopenid 就是自定义APPID产生的 openid, wgateid 也会同时返回.

    微信中debug比较麻烦, 只能在微信中刷新. 对于使用WgateJs的用户, 可以使用alert, JSON.stringify(json) 等方法打印变量.

    WgateJs会使用cookie 作为wgateid的临时存贮, 如遇到"不弹出授权页面"等问题, 可尝试在微信中访问: http://www.weixingate.com/clear_cookie.php 清除cookie, 再测试.
    或者扫描二维码使用DEBUG工具:

    例如:

    http://www.weixingate.com/gate.php?back=http%3A%2F%2Fwww.baidu.com
    授权后将会跳转到:
    http://www.baidu.com?wgateid=用户wgateid&verify=校验码
    

    一个典型的应用场景示例:缘分测试 (使用微信扫描打开)

    (欢迎将您的案例展示在这里,地址请发送到页面的联系邮箱)

    微信之门的设计非常简单, 它能做什么? 不能做什么?

    • 能做: 通过授权获取唯一用户的 wgateid, 并通过显式授权获取用户信息。
    • 不能做: 除了能做的其它任何事情

    综上所述, 微信之门适合需要唯一用户身份辨识需求 不需要依赖微信公众号的网站..

    如果您有什么想法和建议或者意见,欢迎通过下边的联系方式提供给我们,一起来完善它以提供更方便的服务。

    如有疑问, 请联系 cnhuye@gmail.com
    微信方面的讨论 请加群 98749981(验证问题,请填写完整的微信接口的域名: api.weixin.qq.com)

  • 相关阅读:
    [转]C++中const、volatile、mutable的用法
    [转]pugixml使用教程
    [转]xml解析工具的效率比较QDomDocument、TinyXml-2、RapidXml、PugiXml
    [原][spark]帧序列的纹理UV索引,修改spark源码,改变纹理索引方式,支持常规帧序列
    [原][unreal][UE][spark]分析unreal engine 虚幻引擎的粒子编辑器:Cascade
    [转][C++]佛祖保佑,永无bug。C++ BUG解决方案
    [转]VS中的路径宏 OutDir、ProjectDir、SolutionDir各种路径含义
    [转]jsbsim基础概念
    [原][粒子特效][spark]调节器modifier
    项目管理(八)- 控制项目的范围
  • 原文地址:https://www.cnblogs.com/lykbk/p/bgfhfhs353453534534534.html
Copyright © 2011-2022 走看看