获取用户信息_获取用户信息 通过touser - CSDN
精华内容
参与话题
  • 微信开放平台提供了网站扫码登录的接口,用于获取用户基本信息(头像,昵称)方便网站快速接入微信登录,快捷登录。需要使用登录接口,需要成为微信开放平台认证开发者(300元)才可以获得这个接口权限。 准备工作...

    微信开放平台提供了网站扫码登录的接口,用于获取用户基本信息(头像,昵称)方便网站快速接入微信登录,快捷登录。需要使用登录接口,需要成为微信开放平台认证开发者(300元)才可以获得这个接口权限。

    准备工作:

    1、准备APPID、APPSECRET
    2、准备接口地址
    3、准备REDIRECT_URI

    获取code接口

    https://open.weixin.qq.com/connect/qrconnect?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect

    获取acess_token、openid接口

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

    获取用户信息接口:

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

    流程:

    1、获取CODE
    2、获取access_token、openid
    3、获取用户信息

    操作:

    1、请求CODE

    参数说明

     

    通过接口地址,拼接以上参数进行访问即可

    https://open.weixin.qq.com/connect/qrconnect?appid=APPID&redirect_uri=这里填写redirect_uri&response_type=code&scope=SCOPE&state=STATE#wechat_redirect

    redirect_uri说明
    这是点击上面地址扫码后跳转的地址,跳转的地址回给你带上两个参数,code和state参数。

    state说明
    用于保持请求和回调的状态,授权请求后原样带回给第三方。该参数可用于防止csrf攻击(跨站请求伪造攻击),建议第三方带上该参数,可设置为简单的随机数加session进行校验。

    可以自己生成随机字符串,为了简单学习,我这里用时间戳进行MD5加密简单生成

    <?php
    $data = time();
    $state = MD5($data);
    ?>

    例如你的redirect_uri是http://www.baidu.com/login.php,那么扫码后,跳转的地址会是这样的。

    http://www.baidu.com/login.php?code=生成的code&state=生成的state

    当然redirect_uri需要进行urlEncode编码。

    <?php
    $redirect_uri = urlEncode("http://www.baidu.com/login.php");
    ?>

    最终获取CODE的访问链接就是这样的:

    <?php
    $appid = "填写你的APPID";
    $redirect_uri = UrlEncode("http://www.baidu.com/login.php");
    $data = time();
    $state = MD5($data);
    //跳转页面
    echo "<script>location.href=\"https://open.weixin.qq.com/connect/qrconnect?appid=$appid&redirect_uri=$redirect_uri&response_type=code&scope=snsapi_login&state=$state#wechat_redirect\";</script>";
    ?>

    然后就跳转到了一个扫码的页面了:

    2、获取access_token和openid

    通过curl向接口发起请求即可

    <?php
    //从redirect_uri得到code
    $code = $_GET["code"];
    $appid = "填写你的";
    $secret = "填写你的";
    
    //获取access_token和openid
    $url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=$appid&secret=$secret&code=$code&grant_type=authorization_code";
    function post($url) {
            $ch = curl_init();
            curl_setopt($ch, CURLOPT_URL, $url);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
            curl_setopt($ch, CURLOPT_POST, 1);
            curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
            curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
            $rst = curl_exec($ch);
            curl_close($ch);
            return $rst;
    }
    
    //发送请求
    $result = post($url);
    //返回接口的数据
    $arr = json_decode($result,true);
    //解析json,单独把openid和access_token取出来待会用
    $openid = $arr['openid'];
    $token = $arr['access_token'];
    ?>

    3、获取用户信息

    <?php
    //这里是接着上面的代码的
    //获取用户信息需要openid 和 access_token
    //获取用户信息
    $getinfourl = "https://api.weixin.qq.com/sns/userinfo?access_token=$token&openid=$openid";
    function getinfo($getinfourl) {
            $ch = curl_init();
            curl_setopt($ch, CURLOPT_URL, $getinfourl);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
            curl_setopt($ch, CURLOPT_POST, 1);
            curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
            curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
            $rst = curl_exec($ch);
            curl_close($ch);
            return $rst;
    }
    
    //发送请求获取用户信息
    $info_result = getinfo($getinfourl);
    //返回接口的数据
    // echo $info_result;
    $info_arr = json_decode($info_result,true);
    $nickname = $info_arr['nickname'];
    $headimgurl = $info_arr['headimgurl'];
    
    //显示头像和昵称
    echo "<img src=\"$headimgurl\"/>";
    echo "<h2>$nickname<h2>";
    ?>

    完整代码

    code.php

    <?php
    $appid = "填写你的";
    $redirect_uri = UrlEncode("http://www.baidu.com/login.php");
    $data = time();
    $state = MD5($data);
    
    echo "<script>location.href=\"https://open.weixin.qq.com/connect/qrconnect?appid=$appid&redirect_uri=$redirect_uri&response_type=code&scope=snsapi_login&state=$state#wechat_redirect\";</script>";
    
    ?>

    login.php

    <!DOCTYPE html>
    <html>
    <head>
        <title>登录成功!</title>
        <style type="text/css">
            *{margin:0px;padding: 0px;}
            #headimg{
                width: 180px;
                height: 180px;
                margin:100px auto 10px;
                border-radius: 100%;
            }
    
            #headimg img{
                width: 180px;
                height: 180px;
                border-radius: 100%;
            }
    
            h2{
                text-align: center;
            }
    
            p{
                text-align: center;
                font-size: 38px;
                font-weight: bold;
                margin-top: 20px;
            }
        </style>
    </head>
    <body>
    
    </body>
    </html>
    
    <?php
    $code = $_GET["code"];
    $appid = "填写你的";
    $secret = "填写你的";
    
    //获取access_token和openid
    $url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=$appid&secret=$secret&code=$code&grant_type=authorization_code";
    function post($url) {
            $ch = curl_init();
            curl_setopt($ch, CURLOPT_URL, $url);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
            curl_setopt($ch, CURLOPT_POST, 1);
            curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
            curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
            $rst = curl_exec($ch);
            curl_close($ch);
            return $rst;
    }
    
    //发送请求
    $result = post($url);
    //返回接口的数据
    $arr = json_decode($result,true);
    $openid = $arr['openid'];
    $token = $arr['access_token'];
    
    //获取用户信息
    $getinfourl = "https://api.weixin.qq.com/sns/userinfo?access_token=$token&openid=$openid";
    function getinfo($getinfourl) {
            $ch = curl_init();
            curl_setopt($ch, CURLOPT_URL, $getinfourl);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
            curl_setopt($ch, CURLOPT_POST, 1);
            curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
            curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
            $rst = curl_exec($ch);
            curl_close($ch);
            return $rst;
    }
    
    //发送请求获取用户信息
    $info_result = getinfo($getinfourl);
    //返回接口的数据
    // echo $info_result;
    $info_arr = json_decode($info_result,true);
    $nickname = $info_arr['nickname'];
    $headimgurl = $info_arr['headimgurl'];
    $errcode = $info_arr['errcode'];
    
    if ($errcode == "41001") {
        echo "<p>登录失效,请重新扫码登录<p>";
        echo "<p><a href=\"code.php\">登录</a><p>";
    }else{
        echo "<div id=\"headimg\"><img src=\"$headimgurl\"/></div>";
        echo "<h2>$nickname<h2>";
        echo "<p>登录成功<p>";
    }
    ?>

    DEMO:http://www.likeyunba.com/WX-OPEN-LOGIN/code.php

    时间:2018-1-26
    作者:TANKING
    网站:http://likeyunba.com

    学习交流微信:face6009

    展开全文
  • 尽管有这么多专业的研究方法,获取全面、真实的用户信息仍然是一件非常有难度的事情。首先,面对众多的研究方法,要针对性的选择、巧妙的搭配已有研究方法。研究方法之众,也从侧面反映了一个问题——每一种方法,都...

    本文来自网易云社区


    作者:任琼瑶

    从最常用的访谈法、测试法、问卷法到针对性较强的卡片分类、情绪板、体验地图等方法, 用户研究的方法非常多样化。尽管有这么多专业的研究方法,获取全面、真实的用户信息仍然是一件非常有难度的事情。

    首先,面对众多的研究方法,要针对性的选择、巧妙的搭配已有研究方法。研究方法之众,也从侧面反映了一个问题——每一种方法,都存在一定的缺陷。尽管如此,但通过针对性的选择、巧妙的搭配,可以一定程度上减少用户信息获取偏差。

    另外,随着行业的发展,需要通过方法创新应对特殊的调研需求。当在研究过程中遇到一些特殊的调研需求,用常规方法难以进行时,就需要通过方法创新来应对。这种创新可以是整体方法的变革,也可以是在常规方法基础上做的微创新。

    只有深入了解各种方法,才能灵活选择、巧妙搭配、变革创新,才能避免用户信息获取偏差,获得更全面、更真实的信息。下面就通过几个具体的案例,讲一讲在云音乐用户研究过程中所实际采用过的一些方法。

     

    案例一:还原用户真实使用情况的留置研究

    研究背景:

    2014年年初,云音乐在高端用户中已经有了一定的口碑,此时产品要扩大用户量,向更广泛的普通大众用户靠拢。产品方迫切想知道大众型用户首次下载安装云音乐后,是否有兴趣持续使用?对于大众型用户来说,与高端用户的使用感受差异在哪里?在调研需求中,新用户使用的“真实情况和感受”被多次重点提及,要判断流失的可能性,对用户反馈信息真实度的要求非常高。

    研究思路:

    用户在一次性的测试中受很多因素影响,所表达的意愿真实性无法保证,留存意愿难以通过一次性测试获得。在多次探讨和分析之后,我们决定了参考借鉴市场研究方法中的“留置法”,即通过用户在一段时间内的产品使用,来获取用户每天的使用感受和心理变化,从而判断其流失的可能性,以及可能导致流失的关键因素。

    此次用户进行留置体验的过程为一周,用户需要每天记录下使用网易云音乐的真实场景、行为和感受,通过自由使用和完成特定的体验任务这两个阶段的产品体验后,再对产品进行一轮整体的点评,包括内容、界面、功能操作、优缺点等各个角度的评价。

    在此次研究中,我们特别制作了调研用的小册子。一是显得正式、专业,可以激励用户认真完成完成任务。另一方面,用户可以边使用产品边拿笔记录,这种记录会更为实时和主动,但如果记录成电子文档,则势必需要手头有一台电脑,这就限制了使用的场景。

                           cc3adc9b-7c88-431f-9181-e1e944f17821

    小册子的使用说明和日记示例

    通过这种在真实场景中的持续使用体验,我们获取了真实、生动的新用户的使用感受和评价,以及真实性相对较高的留存意愿。

    案例总结:

    留置法对于目前快节奏的互联网迭代开发来说,时间成本比传统调研方法更大,但不妨静下心来想想,我们做研究最终要的是什么?我们的研究结果最终要用到哪里去?想要达到什么样的产品目标?对研究结果真实性的风险承受度如何?从这些问题来看,在一些必要的情况下值得花时间来做这样的研究。

     

    案例二:搭配使用的问卷、电话访谈与行为日志分析

    研究背景:

    通过日志数据中发现,云音乐安卓端的一次性用户 (下载后使用仅一次就流失的用户)比例比iOS端高出不少。产品方非常想知道,这些用户在首次进入云音乐产品后,究竟遭遇了什么,导致他们不愿意再次打开这个应用。

    研究思路:

    从有限的日志行为数据中,无法了解到用户的想法,为何部分用户在安装和翻阅了少数几个页面之后就选择离开。此时,迫切需要一场问卷调研来试着揭开谜底,但通过问卷法我们只能了解流失原因的大致方向和比例,无法深入、生动地还原用户在使用产品的过程中所遇到的具体问题。所以在本次研究中,除了问卷调研外,还同时进行了后台日志数据挖掘、电话访谈,获得了更深入、更生动、更细致的关于使用痛点的描述。

    通过多种方法的结合使用,虽然无法通过一轮调研把所有的情况和原因都挖掘出来,但对流失原因有了大致的了解,对几个主要的流失原因进行了深入的探究。

    案例总结:

    问卷法、日志数据分析、电话访谈都有各自的局限性,但在项目中灵活使用、巧妙搭配可以弥补单一方法的局限,尽可能的还原出用户流失的真实原因。

     

    案例三:隐藏真实目的的用户测试

    研究背景:

    2014对新用户的调研中,产品方希望了解新用户第一次使用产品的感受,同时对比一些竞品,分析云音乐存在哪些第一眼劣势。按照往常的测试项目做法,我们会邀请目标用户到公司里进行测试和访谈,并告诉他们我们的真实调研目的。但用户可能会为了迎合我们,隐藏心底真实的想法。另外,用户如果知道自己被调查的目的是为了评比出哪个产品更喜欢用,那么他可能会绞尽脑汁想各种细节上的喜欢理由,但真实情况可能是,这些所谓的“喜欢理由”对他来说都无足轻重。

    研究思路:

    出于对上述可能情况的考虑,我们做了以下的执行优化:

    1)到公司外去做测试执行,隐藏自己的身份。

    2)告知用户重点是每个产品的真实使用过程和感受,以评估整体音乐用户的使用习惯,而不是为了对比不同产品的好坏。

    ab3e698c-5065-4ec7-ac71-6a6bcdcc3739

    选择的调研场地——咖啡馆

    这样一来,用户的立场也随之更为客观了。最终的测试结果正如我们所料,用户能够直截了当地描述在他们眼中云音乐的致命缺点,而其它竞品,也从用户口中体现出了许多不错的闪光点。

    案例总结:

    在尽量排除影响因素的条件下,有时候从侧面去了解,去观察,不让用户察觉到你真实的意图,更能抓到用户的真情流露。

     

    以上方法只是从云音乐产品的用户研究项目中做出的经验性总结,在不同的需求、不同的方法中,可以有更多的微创新,可以有更多的方法组合,来尽量弥补各种用研方法的缺陷,获得更为真实的用户信息。


    网易云免费体验馆,0成本体验20+款云产品!

    更多网易研发、产品、运营经验分享请访问网易云社区


    相关文章:
    【推荐】 让你知晓内容安全的边界:盘点2017、2018这两年的内容监管
    【推荐】 360°透视:云原生架构演进
    【推荐】 从浏览器或者Webview 中唤醒APP

    展开全文
  • 微信小程序获取用户信息方案介绍

    万次阅读 2018-05-24 14:56:40
    背景小程序一个比较重要的能力就是获取用户信息,也就是使用 wx.getUserInfo 接口。我们发现几乎所有的小程序都会调用这个接口。虽然我们在设计文档上有提出最好的设计是在真正要用户信息的情况下才去获取用户信息...

    背景

    小程序一个比较重要的能力就是获取用户信息,也就是使用 wx.getUserInfo 接口。我们发现几乎所有的小程序都会调用这个接口。虽然我们在设计文档上有提出最好的设计是在真正要用户信息的情况下才去获取用户信息,不过很多开发者并没有按照我们的期望去做,导致用户在使用的时候有很多困扰。

    归结起来有几点:

    • 开发者在首页直接调用 wx.getUserInfo 进行授权,弹框有会使得一部分用户放弃小程序的使用。

    • 开发者没有处理用户拒绝弹框的情况,有部分小程序强制要求用户授权头像昵称等信息才能继续使用小程序。

    • 用户没有很好的方式重新授权,虽然在前几个版本我们增加了设置页面可以让用户选择重新授权,但是操作还是不够便捷。

    • 开发者希望进到首页就获取到用户的unionId,以便和之前已经关注了公众号的用户画像关联起来。

    • 开发者默认将 wx.login 和 wx.getUserInfo 绑定使用,这个是由于我们一开始的设计缺陷和实例代码导致: getUserInfo必须通过wx.login 在后台生成session_key 后才能调用。

    为了解决以上几点,我们更新了三个能力:

    1. 使用组件来获取用户信息,用户拒绝授权后也可以重新弹窗再次授权

    2. 若用户满足一定条件(下文有详细介绍),则可以用wx.login 获取到的code直接换到unionId

    3. wx.getUserInfo 不依赖 wx.login 就能调用得到数据。

    获取用户信息组件介绍

    组件变化:

    • open-type 属性增加 getUserInfo :用户点击时候会触发 bindgetuserinfo 事件。

    • 新增事件 bindgetuserinfo :当 open-type 为 getUserInfo 时,用户点击会触发。可以从事件返回参数的detail字段中获取到和wx.getUserInfo 返回参数相同的数据。

    示例:

    <button open-type="getUserInfo" bindgetuserinfo="userInfoHandler"> Click me </button>

    和 wx.getUserInfo 不同之处在于:

    • API wx.getUserInfo 只会弹一次框,用户拒绝授权之后,再次调用将不会弹框

    • 组件 由于是用户主动触发,不受弹框次数限制,只要用户没有授权,都会再次弹框


    直接获取unionId

    考虑很多场景下,业务方申请userinfo授权主要为了获取unionid。我们鼓励开发者在不骚扰用户的情况下合理获得unionid,而仅在必要时才向用户弹窗申请使用昵称头像。为此,凡使用“获取用户信息组件”获取用户昵称头像的小程序,在满足以下全部条件时,将可以静默获得unionid。

    1. 在微信开放平台下存在同主体的App、公众号、小程序。

    2. 用户关注了某个相同主体公众号,或曾经在某个相同主体App、公众号上进行过微信登录授权。


    getUserInfo 和 login

    很多开发者会把login和getUserInfo捆绑调用当成登录使用,其实login已经可以完成登录,可以建立账号体系了,getUserInfo只是获取额外的用户信息。

    在login获取到code,然后发送到开发者后端,开发者后端再通过接口去微信后端换取到openid和sessionKey(并且现在会将unionid也一并返回)之后,然后把3rd_session返回给前端,就已经完成登录行为。而login行为是静默,不必授权的,不会对用户造成骚扰。

    getUserInfo只是为了提供更优质的服务而存在,比如展示头像昵称,判断性别,通过unionId和其他公众号上已有的用户画像结合起来提供历史数据。所以不必在刚刚进入小程序的时候就强制要求授权。

    推荐使用方法

    1. 调用wx.login 获取code,然后从微信后端换取到sessionKey,用于解密getUserInfo返回的敏感数据。

    2. 使用wx.getSetting 获取用户的授权情况

      1. 如果用户已经授权,直接调用 API wx.getUserInfo 获取用户最新的信息

      2. 用户未授权,在界面中显示一个按钮提示用户登入,当用户点击并授权后就获取到用户的最新信息。

    3. 获取到用户数据后可以进行展示或者发送给自己的后端。

    文档中的quickStart已经更新

    特别注意

    为了给用户提供更好的小程序环境,我们约定在一段时间后(具体时间会做通知),若还出现以下情况(包括但不限于),将无法通过审核

    1. 初次打开小程序就弹框授权用户信息

    2. 未处理用户拒绝授权的情况

    3. 强制要求用户授权

    已经上线的小程序不会受到影响。


    FAQ

    Q: 除了 UserInfo 呢,比如说位置信息 --- ’风の诺言 .

    A: 其他授权信息不像用户信息那么高频繁,也基本是在使用时候才申请授权,所以没有同 UserInfo 一起给出。我们会先看看 UserInfo 的使用情况再结合具体场景我们会给出相应的方案


    Q: 后台要维护用户信息 --- Azleal

    我们的小程序业务是功能都需要授权才能使用的(也就是必须拿到unionid获取用户信息) --- elemeNT

    我在小程序与服务号的数据需要互通,通过unionId来确定用户的唯一性,如果在用户进入小程序后不强制他授权,单凭一个openid来存储他的用户数据,在用户下次从服务号进入时。不就会产生重复数据吗?就没做到数据互通了 --- ﺭ并向你吐了趴口水ﺭ五年.

    另外看到官方提到 要强制推行,我想说我们目前所有用户是通过unionid注册的。那么这些用户就不得不使用 openid重新登录 、注册一遍。更重要的是,之前他们的相关数据都会对应不上(因为你们也不允许强制用户登录授权) --- 羊毛

    现在这种方案,不能满足我们的需求,我们的小程序,必须一进入就要获取他的信息,然后加载他的数据; --- 韩文

    A: 调用`wx.login`已经可以获取到用户的登录态,已经可以做用户账号的管理。 UserInfo 中带的 UnionId 是额外的信息,没有它完全可以完成登录

    对于需要和开发平台绑定的业务进行数据互通的情况,一个新用户进来没有互通数据的情况下也是可以体验到所有业务,那么对于没有授权unionId的用户,可以将其当成是新用户,当真正授权unionId之后再做绑定完全是可以的


    Q: 我需要确保用户的唯一性,这样就必须取unionID,否则用户删除了小程序,或者换了设备, 下次再进来这个小程序,该用什么来区分是上次来过的用户呢?? --- WEI+

    A: 如果你本身没有其他公众号、App、小程序,那么也就没必要拿到unionid,因为unionid是打通你在开放平台下所有应用的标识

    如果只有一个小程序,用 openid 足以, openid 是一个用户对于一个小程序的标识,永远不变


    Q: wx.getUserInfo 是网络请求,如果使用了 open-type = "getUserInfo",是否每次点击都会调接口? --- SouthernBox

    A: 是的,open-type="getUserInfo" 的作用以及内部实现基本和 wx.getUserInfo 一样

    区别是一个开发者主动(拒绝一次不再弹窗),一个是用户主动(拒绝任意次都可以重新弹窗)


    Q: 比如有一个创建按钮,用户点击一次授权了,我已经获取到用户信息,再次点击就没必要再调用 getUserInfo 去网络请求了。 --- SouthernBox

    A: 可以参考文中 quickStart 的做法,如果已经授权了,那就可以把按钮隐藏,之后的授权直接用API wx.getUserInfo 调用(因为已经授权,所以也不会弹窗),用户也不会再点了


    Q: 小程序是不是必须要用微信自带的授权才可以登录 ,能否不使用授权方式登录,用自己系统的api接口数据实现?这个会不会涉及到审核不过的问题??麻烦解答一下 谢谢了。 --- WEI+

    A: 自己做登录不会涉及到审核问题。

    不过不建议在没有原有账号体系的情况下让用户在小程序内注册,过重的行为会损失用户。


    Q: 在小程序中有一个"我的"页面,这是属于会员页,如果用户要进入这个页面就必须授权。交互方式就是在用户未授权情况下整个页面只显示一个授权获取用户信息的button 按钮,这个需要用户自己去触发,算不算强制授权? --- ﺭ并向你吐了趴口水ﺭ五年.

    A: 强制授权是说如果用户如果不授权基本信息,连最基础的浏览功能都不提供(当然这个也是要分具体的业务场景,不会限制得太死板)

    可以有更好的交互,参考下主流App,在未登录的时候点击【我的】页面,也不会直接要求登录,而是展示了一定的页面结构,同时给一个登录按钮(例如【携程】【京东】等),之后再在这个页面做操作的话可以弹一个登录页面或按钮提示用户登录是完全可以的。

    上述所说的登录只是用户感知上的登录,从业务逻辑上用户其实在 wx.login 的时候已经完成登录了。


    Q: 看了很多评论,有些人还是不知道为什么官方要这样做,我作为一个商家角度来说下。 --- Mr.J

    1. 比如我们要做一些户外推广的二唯码,用户只看到了你的图片宣传单,扫描二唯码一打开就提示“需要获取你的个人信息,您是否允许”,你不要当自己是开发者当自己是一个正常人,看到这个提示我相信很多人的第一反应就是拒绝。如果第一步已经把你拒之门外,谈何营销?


    2. 没有小程序之前,我们在公众号有很多用户,都绑定了unionid,有小程序之后我们考虑怎么让用户接受小程序,可以静默登录我觉得非常好,从公众号过来的用户可以直接就登录了,没有任何提示,完美的对接,这是一个很好的体验。

    A: 说得很好,我们的这些改造不仅是为了开发者,同时也是为了这个生态下的用户考虑。希望开发者们也能站在用户的角度去思考怎么做一个产品。



    Q: 我不明白为什么login 给多个unionid 为什么不行? unionid也不能算是个人信息吧,给多个unionid可以更方便开发者,而且很多情况下就不用调用getUserInfo了 --- candyTong

    我们提个建议,能否直接开放unionid呢?这样也许会有许多小程序不需要再弹窗了。既一定程度保障了用户体验,也照顾到了我们开发者的体验。 --- 羊毛

    A: 如果直接开放了unionid,就会出现这种情况:当你作为一个用户进入一个小程序,这个小程序并没要求你授权就直接把你的头像昵称显示出来(它之前把unionId对应的头像昵称都存了下来),但是这个小程序主体(open平台主体和公众平台主体并不相同)相关的任何一个应用你从来没用过,你会不会觉得很奇怪并且很不舒服,觉得自己在微信内的用户信息没有丝毫的保障?


    Q: 那有推荐的比较好的例子么?对于必须使用用户头像、昵称这些信息的小程序而言 --- 亚里士朱德

    A: 首先,没有什么逻辑是一定要使用用户的头像、昵称才能work的。对于这个case,完全可以先用默认头像、匿名昵称先做替代,用户点击默认头像后就可以弹出授权信息,非常的水到渠成。


    Q: 之前看了这个帖子一直在思考,如果是一进去需要回去用户的地理位置信息显示到地图上的呢?这样算不算是一进去就弹窗授权获取用户信息?  --- 吴俊绩

    展开全文
  • 微信订阅号通过获取Openid并获取用户基本信息

    万次阅读 热门讨论 2019-06-05 11:39:59
    我们知道,服务号有获取用户基本信息的接口,通过oauth2.0网页授权获取的。 但是认证的订阅号也有获取用户基本信息的接口了,但是与服务号不同的是,这个需要用户主动触发才可以获得,需要用户发送任意关键词或者...

    我们知道,服务号有获取用户基本信息的接口,通过oauth2.0网页授权获取的。

    但是认证的订阅号也有获取用户基本信息的接口了,但是与服务号不同的是,这个需要用户主动触发才可以获得,需要用户发送任意关键词或者点击菜单。

     

    1、先获取openid,用户主动触发,获得openid
    2、获取access_token

    3、通过这两个获取用户基本信息,头像,昵称等

    接口调用请求说明
    http请求方式: GET

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

     

    1、获取openid
    先在基本配置服务器地址填写下面php文件路径,其中php文件需要修改token

    check.php

     

    <?php
    define("TOKEN", "xiao");
    //用于回复用户消息
    function responseMsg(){
        $postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
        if (!empty($postStr)){
            $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
            $fromUsername = $postObj->FromUserName;
            $toUsername = $postObj->ToUserName;
            $MsgT = $postObj->MsgType;
            $time = time();
            //如果用户发的text类型
            if($MsgT=="text"){
                $key = trim($postObj->Content);
                $fromUsername = $postObj->FromUserName;
                $textTpl = "<xml>
                            <ToUserName><![CDATA[%s]]></ToUserName>
                            <FromUserName><![CDATA[%s]]></FromUserName>
                            <CreateTime>%s</CreateTime>
                            <MsgType><![CDATA[%s]]></MsgType>
                            <Content><![CDATA[%s]]></Content>
                            </xml>"; 
                $msgType = "text";
                $contentStr = "openid是:".$fromUsername;
                $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
                echo $resultStr;
                exit;
            }
    
            //如果用户发的event(事件)类型
            if($MsgT=="event"){
                $Event = $postObj->Event;
                if ($Event==subscribe) {
                   $contentStr = "欢迎关注";
                }else{
                    $contentStr = "希望您下次关注,但您收不到此条消息了";
                }
    
                $textTpl = "<xml>
                            <ToUserName><![CDATA[%s]]></ToUserName>
                            <FromUserName><![CDATA[%s]]></FromUserName>
                            <CreateTime>%s</CreateTime>
                            <MsgType><![CDATA[%s]]></MsgType>
                            <Content><![CDATA[%s]]></Content>
                            </xml>"; 
                $Title = $postObj->Title;
                $Description = $postObj->Description;
                $Url = $postObj->Url;
                $msgType = 'text';
                $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
                echo $resultStr;
                exit;
            }
        }else{
                echo "";
                exit;
        }
    }
    
        $echoStr = $_GET["echostr"];
        //如果有$echoStr说明是对接
        if (!empty($echoStr)) {
            //对接规则
            $signature = $_GET["signature"];
            $timestamp = $_GET["timestamp"];
            $nonce = $_GET["nonce"];
            $token = TOKEN;
            $tmpArr = array($token, $timestamp, $nonce);
            sort($tmpArr, SORT_STRING);
            $tmpStr = implode( $tmpArr );
            $tmpStr = sha1( $tmpStr );
            if( $tmpStr == $signature ){
                echo $echoStr;
            }else{
                echo "";
                exit;
            }
        }else{
            responseMsg();
        }
    ?>

    然后去公众号回复任意关键词即可。

    openid拿到了,该去拿access_token了

    也很容易。

    接口是:

    https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=appid&secret=appsecret

    把上面这两个参数(appid=修改,secret=修改)改成你公众号的即可,然后打开公众号基本配置,ip白名单,然后就可以正常获取access_token了。

     

    那么最后一步,就是获取用户基本信息了。

     

    接口调用请求说明

    http请求方式: GET

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

    把上面两个值加上去,访问这个链接即可。

    学习交流微信:face6009

    展开全文
  • amp;amp;amp;amp;amp;t=sandbox/index ...步骤二:需要一个服务器,用来获取你要的信息,我使用的是阿里云 https://www.aliyun.com/?utm_content=se_1000301881 有了阿里云后推荐使用最近挺火的...
  • 小程序登录&授权&获取用户信息

    万次阅读 热门讨论 2018-01-16 22:48:26
    一 登录 时序图如下: ...获取js_code 示例代码: App({  onLaunch: function() {  wx.login({  success: function(res) {  if (res.code) {  //TODO  } else {  
  • 微信小程序授权 获取用户信息

    万次阅读 2019-07-15 18:02:21
    获取用户信息(用户信息、获取unionId、openId)请移步到这里 用户打开小程序时,直接弹框获取用户信息授权,可能会立马懵圈: 你是谁? 我在哪里? 我为什么要同意?…… 相当一部分用户下意识会拒绝...
  • 最近,对微信公众号有点兴趣,就自己研究了研究里面的一些内容,发现还挺... 我想,做微信公众号开发的,对于想获取关注了公众号的用户信息,或者说是当前与后台服务器进行交互的当前用户信息,这个功能是很重要...
  • 微信公众号网页获取用户信息

    千次阅读 2019-06-04 14:21:43
    微信小程序开发交流qq群 173683895 承接微信小程序开发。扫码加微信。 效果图 html 代码: <...meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalab...
  • 支付宝获取用户信息

    千次阅读 2018-09-07 17:30:16
    我们项目通过扫码支付,HTML5与后台交互,先获取...首先:获取用户信息  $appid=config('alipay_id'); $redirect_uri = urlencode ('你的回调地址'); $url ="https://openauth.alipay.com/oauth2/publicAp...
  • 获取用户信息步骤如下: 1 第一步:用户同意授权,获取code 2 第二步:通过code换取网页授权access_token 3 第三步:刷新access_token(如果需要) 4 第四步:拉取用户信息(需scope为 snsapi_userinfo) 1 获取code...
  • 微擎小程序如何获取用户信息

    千次阅读 2019-04-20 20:32:38
    获取用户信息 通过button组件来获取,代码如下: 获取用户信息 点击些按钮后,拿到用户信息,调用 updateUserInfo 函数,实现如下: updateUserInfo(result) { var app = getApp() //拿到用户数据时,通过app.util....
  • 企业微信开发如何获取用户信息

    千次阅读 2019-08-20 02:34:33
    废话就不说了,就下面一张表 转载于:https://www.cnblogs.com/yogic/p/11166167.html
  • 在18年4月25日小程序做了一次更新,小程序授权不再支持直接弹框获取用户信息授权了 微信小程序授权 获取用户信息里也做了说明 以下代码也已经做了更改 ---------------------------------------------------------...
  • 微信小程序授权登录获取用户信息

    千次阅读 2020-10-24 23:07:59
    用户信息授权只能通过: open-type="getUserInfo 必须有它 <button class='check-btn' bindgetuserinfo="bindgetuserinfo" bindtap='checkNow' open-type='...会默认弹窗提示用户是否同意获取用户信息(头...
  • 如何通过网页授权获取微信用户基本信息? 通过微信登录网页 微信官方文档在这里:http://mp.weixin.qq.com/wiki/17/c0f37d5704f0b64713d5d2c37b468d75.html
  • java通过微信授权获取用户信息

    千次阅读 2017-10-14 11:58:10
    首先准备好常量类,当然也可以写到配置文件里 /**  *   * 功能描述: 公用封装方法  * date: 2017-7-24 下午5:18:58 ... // 凭证获取(GET) public final static String TOKEN_URL = "https://api.weix
  • 微信小程序开发交流qq群 173683895 承接微信小程序开发。扫码加微信。 正文: bug示例图: ...导致这个bug的原因是wx.getUserInfo(OBJECT) 接口做了调整;...注意:此接口有调整,使用该接口将不再出现授权弹窗,请...
  • 小程序登录获取用户信息及授权手机号方法

    万次阅读 热门讨论 2020-10-21 10:39:01
    小程序登录本篇记录讲解小程序登录手机号授权小结 本篇记录讲解 小程序登录,是现在小程序里面很普遍的...1.小程序的登录和获取用户信息是两部分! 2.登录方法我写在app.js的onshow里面,因为可以保证小程序每次登录...
  • 微信小程序 获取用户信息(包括openId等敏感信息)

    万次阅读 多人点赞 2017-08-07 17:38:17
    获取用户的基本信息 wx.getUserInfo(OBJECT)获取用户信息 wx.getUserInfo({ success: function(res) { var userInfo = res.userInfo //用户基本信息 var nickName = userInfo.nickName //用户名
1 2 3 4 5 ... 20
收藏数 1,642,559
精华内容 657,023
关键字:

获取用户信息