美文网首页微信开发
微信开发系列——公众号内嵌H5页面获取code,拿到openID

微信开发系列——公众号内嵌H5页面获取code,拿到openID

作者: 爆发吧小宇宙 | 来源:发表于2019-01-16 09:41 被阅读0次

    如果在微信客户端中访问第三方网页,公众号可以通过微信网页授权机制,来获取用户基本信息,进而实现业务逻辑。
    我们要进行授权,先要经过用户授权(静默授权和授权页弹出授权两种,具体看文档中scope解析)拿到 code ,再用 code 去换取网页授权 access_token, 使用access_token 去拿到用户的信息。

    1. 准备工作

    关于微信网页授权的官方文档说明:
    https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140842
    先熟悉下流程,每个字段的含义,以及注意事项。先把域名和环境配好。才能正式去获取授权。

    2. 处理过程

    1、官方文档中获取code参数示例:

    scope 为 snsapi_base

    https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx520c15f417810387&redirect_uri=https%3A%2F%2Fchong.qq.com%2Fphp%2Findex.php%3Fd%3D%26c%3DwxAdapter%26m%3DmobileDeal%26showwxpaytitle%3D1%26vb2ctag%3D4_2030_5_1194_60&response_type=code&scope=snsapi_base&state=123#wechat_redirect
    

    scope 为 snsapi_userinfo

    https://open.weixin.qq.com/connect/oauth2/authorize?appid=wxf0e81c3bee622d60&redirect_uri=http%3A%2F%2Fnba.bluewebgame.com%2Foauth_response.php&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect
    

    2、我的项目中只需要拿到 openID,所以采用的授权作用域为 scope = snsapi_base(不弹出授权页面,直接跳转,只能获取用户 openid )。
    需要注意的是,redirect_uri 填自己部署项目的域名(注意该链接一定要使用urlencode 转换一下),不然除了第一个参数后面的参数传不过去(微信中其他URL中参数配置也是这样)。

    获取地址的步骤和参数配置我就不赘述了,文档里说的很清楚。在重定向成功后解析code,这里方法贴一下:

    /**
     * 根据参数名 获取 URL 路径中的参数
     * @param {String} name 要读取的参数名称
     */
    function getUrlParam (name) {
      var reg = new RegExp('(^|&)' + name + '=([^&]*)(&|$)')
      let url = window.location.href.split('#')[0]
      let search = url.split('?')[1]
      if (search) {
        var r = search.substr(0).match(reg)
        if (r !== null) return unescape(r[2])
        return null
      } else {
        return null
      }
    }
    

    getUrlParam('code') 调用一下就能拿到 code 结果,然后用这个 code 去调后台的接口让后台去微信后台拿openID。

    或者用这个方法:

    function GetRequest() {
    var url = location.search; //获取url中"?"符后的字符串
    var theRequest = new Object();
    if (url.indexOf("?") != -1) {
    var str = url.substr(1);
    strs = str.split("&");
    for(var i = 0; i < strs.length; i ++) {
    theRequest[strs[i].split("=")[0]]=(strs[i].split("=")[1]);
    }
    }
    return theRequest;
    }
    console.log( GetRequest());
    
    作者:阿布_0caf
    链接:https://www.jianshu.com/p/b5929770f92d
    來源:简书
    简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
    
    遇到的问题
    • 提示 redirect_uri 域名与后台配置不一致,参考官方文档(前面的文档链接)如下片段:


      报错 redirect_uri 域名与后台配置不一致配置
    • 后台 access_token 拿不到,提示和白名单 IP 有关,则参考微信返回报错,将提示的IP加入白名单。

    3. 测试方案

    • 公众号测试号
      如果需要先测试,可以参考我写的公众号测试号的文章:微信开发系列——使用公众号测试号测试公众号webAPP

    • 微信开发者工具
      打开微信开发者工具,将模式切换到公众号网页版调试,在地址栏中输入要测试的地址,进行验证。


      微信开发者工具调试模式

    相关文章

      网友评论

        本文标题:微信开发系列——公众号内嵌H5页面获取code,拿到openID

        本文链接:https://www.haomeiwen.com/subject/leupdqtx.html