微信开发会员的绑定参数_微信开放平台绑定开发微信端手机网页需要绑定什么 - CSDN
  • 业务上要求绑定微信用户和系统用户,以便用户在一次绑定后能够通过系统用户的身份去使用一些功能。我关注的招行信用卡公众号实现了这个功能,所以估计还是可行的,在网上搜索了一下,发现这个问题没什么好的答案,很...

    原地址:

    http://www.5icool.org/a/201502/a10350.html


    最近由于工作需要,接触了微信公众号的开发。业务上要求绑定微信用户和系统用户,以便用户在一次绑定后能够通过系统用户的身份去使用一些功能。我关注的招行信用卡公众号实现了这个功能,所以估计还是可行的,在网上搜索了一下,发现这个问题没什么好的答案,很多都说取不到微信用户名实现不了,甚至有说实现了这个功能的应该是与微信有内部合作的。

    搜索无果,遂自己动手实验,后发现其实完全可以的,看来实践才是检验真理的唯一标准,方案上也很简单,我分几点来说。

    用OpenID绑定即可

    微信接口中虽然没给用户的微信账号,但给了用户的OpenID,这个OpenID对一个公众号是唯一的,测试也证明不会改变,也就是说同一个微信号和同一个公众号交互,我们得到的OpenID是不会变的,因此,可以用OpenID作为微信用户的身份标识。

    如何绑定

    俗话说,没吃过猪肉还没见过猪跑。看招行信用卡公众号是如何做的,在微信里面给用户一个验证链接,用户点击链接,微信会用内嵌的浏览器打开这个链接,然后就是一般的网页登录验证界面,我们通过HTTP(S)获取用户输入的系统用户名与密码,验证通过后完成绑定。 具体如何生成链接和如何传递OpenID下面详述。

    如何生成绑定链接

    绑定涉及到用户的身份甚至利益,所以需要注意安全性。我们需要绑定的是OpenID和系统用户,系统用户名是用户直接在链接页面输入后通过HTTP(S)传给我们的,这没有问题。OpenID对用户来说透明,用户不会传给我们,我们也只有在用户在微信中向公众号发消息时才可获得OpenID,所以很明显,OpenID需要包含在生成的链接中,至于需不需要对OpenID作加密就看你自己了,我觉得这不重要,更为重要的是要在链接中带上签名和加上时间戳。因为我们需要确认这个链接是由我们服务端生成的,用户自己或者其他人不能够伪造出这个链接,加上时间戳是为了给这个链接一个过期时间,如果不限制过期时间,假设用户绑定后这个链接通过某种方式被别人知道,那么这个人就可以把自己的账号与用户的微信号绑定。所以我采取的方法是用OpenID、过期时间再加上一个密钥生成签名,生成签名的方法和微信服务器接口验证时的签名方法类似(密钥最好另选一个只有自己知道的)。

    如何传递OpenID

    有了绑定链接,用户点了绑定链接,但这只是第一步,第二步我们需要在用户在链接页面提交登录请求后进行验证,OpenID怎么传到第二步中呢?有人说了,这还不简单,在登录表单中加一个隐藏域放用户的OpenID一起提交给验证的Handler不就OK了,那我只能说很遗憾,你前面所做的安全工作都白费了,一旦A用户的OpenID泄漏,B用户就可以把自己的账号与A用户的微信号绑定了。所以永远不要相信客户端提交的东西。我的方法是当用户点击生成链接后,在链接页载入时,将OpenID存到session中,因为这个session是没法伪造的(cookie被盗除外),所以只有点击这个链接的用户的session中才会有链接中包含的OpenID。

    关于微信服务器签名多说一句

    大家都知道微信公众号消息接口验证时微信会向我们服务器发一个GET请求,在其中带上只有我们和微信服务器知道的签名,我们在请求处理Handler中会验证这个签名,这点大家无异议;消息接口验证通过后,微信就会把用户发的消息以POST的方式发给我们,很多人可能会在这里忽视对签名的检查,从而给恶意者伪造用户请求的机会。在微信以POST方式传递用户的消息时,仍然会将签名信息附在URL参数中,我们在处理每一个POST请求时,第一步还是得像处理消息接口验证时一样,去对URL参数中的签名作验证,只有签名验证通过后才可去取POST的信息。

    绑定流程的详细描述

    我在上面说了基本方法,但不够详细,导致一些新手朋友还是不清楚具体如何操作,所以我在此尝试更加详细地描述整个过程的每一步:

    1. 数据库中建立用户OpenID和系统用户的绑定关系表,初始时为空。
    2. 用户和微信交互时,你可以取到用户的OpenID。
    3. 检查数据表,如发现该OpenID没有绑定系统用户,则返回一个链接供用户在微信内嵌浏览器中打开,这个链接打开后类似于系统用户登录界面。
    4. 关键是链接的生成,链接需要带3个url参数:
       1. 用户OpenID:因为你需要在绑定页面中取到是哪个微信用户想要绑定系统用户。
       2. 时间戳timestamp:这是为了防止链接泄漏出去被恶意利用,具体来说就是一个你指定的过期时间,超过这个时间这个链接就失效了,用户只能再次获取。
       3. 签名signature:这是为了保证此验证链接只有你才可能生成,用户及第三方均无法伪造。  
    5. 签名的生成需要你有一个只有你知道的token(密钥,不要与设置在公众号里面的token相同),生成签名方法和验证微信服务器消息真实性类似。流程如下:
       1. 将token、OpenID、timestamp三个参数进行字典序排序。
       2. 将三个参数字符串拼接成一个字符串进行sha1加密,得到链接的signature参数。  
    6. 用户打开某个绑定链接时,你首先验证链接的有效性,即按上述5.1和5.2中描述的同样的步骤得到signature与参数中的sinature对比,如果相同,则再检查链接是否超时,两步验证均通过,你就可以将用户的微信OpenID设置到用户的session中,然后你就可以渲染验证页面,让用户输入其系统用户名和密码以提交给你服务器进行验证。
    7. 在用户提交绑定验证请求后,你只需要检查session中有没有你设置的OpenID,没有自然无效,有的话就是要绑定的OpenID了,此时你可以把这个OpenID从session中删除了。然后你如果验证系统用户名和密码通过后,就把这个OpenID和系统用户绑定起来,加入到第1步中说的绑定关系表中。

    关于微信公众号用户账号绑定就是这么多,其实很容易实现,我在这里把我的方法和大家分享一下,老鸟可以忽略,主要是希望对新手有一些帮助。欢迎探讨,敬请轻拍。


    展开全文
  • <?... //1,将timestamp,nonce,token按照字典排序 $timestamp = $_GET['timestamp']; $nonce = $_GET['nonce']; $token = 'weixin';... $signature = $_GET['signature'];... $array = array($timestamp,$nonce,$...

    <?php
    	//1,将timestamp,nonce,token按照字典排序
    	$timestamp = $_GET['timestamp'];
    	$nonce = $_GET['nonce'];
    	$token = 'weixin';
    	$signature = $_GET['signature'];
    	$array = array($timestamp,$nonce,$token); 
    	sort($array);
    	//2,将排序后的三个参数进行拼接后用sha1加密
    	$tmpstr = implode('',$array);//join
    	$tmpstr = sha1($tmpstr);
    	//3,将机密后的字符串与signature进行对比,判断请求是否来自微信
    	if($tmpstr == $signature){
    		echo $_GET['echostr'];
    		exit;
    	}

    展开全文
  • 这篇文章只能说是我个人在做微信开发过程中的一些记录。 在微信公众平台里,每个用户对每个公众号的OpenID是唯一的,对于不同公众号,同一用户的openID不同。所以用户绑定,可以用OpenID绑定,也可以用OpenID来获取...

    作为一个刚毕业的大学生,一进公司就被安排到新的项目组进行微信公众平台开发。作为一个菜鸟,顿时觉得压力山大,最重要的是,公司里还没有人做个这方面,一直都只能靠自己摸索。

    这篇文章只能说是我个人在做微信开发过程中的一些记录。

    在微信公众平台里,每个用户对每个公众号的OpenID是唯一的,对于不同公众号,同一用户的openID不同。所以用户绑定,可以用OpenID绑定,也可以用OpenID来获取用户的基本信息。至于怎样获取OpenID,我是通过网页OAuth2.0方式来获取的。有一篇教程写得很详细,大家可以按照这个教程去弄,应该都可以获取到用户的基本信息。

    http://www.2cto.com/weixin/201405/303993.html 

    我实现获取OpenID的整个流程是

    1、需要在网页设置超链接提交HTTP请求到

    https://open.weixin.qq.com/connect/oauth2/authorize?appid=wxb1bbd8e52403fc1e&redirect_uri=http://dev.XXXch.com.cn:7979/weixin/oauth2.action&response_type=code&scope=snsapi_base&state=1#wechat_redirect

    会返回一个code,在Action中

    获取code,

    2、在action中提交HTTP请求用于获取OpenID

    https://api.weixin.qq.com/sns/oauth2/access_token?appid=wx8888888888888888&secret=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa&code=02a9bed29b2185a9f0ed3a48fe56e700&grant_type=authorization_code
    返回

    {
        "access_token": "OezXcEiiBSKSxW0eoylIeAsR0GmYd1awCffdHgb4fhS_KKf2CotGj2cBNUKQQvj-oJ9VmO-0Z-_izfnSAX_s0aqDsYkW4s8W5dLZ4iyNj5Y6vey3dgDtFki5C8r6D0E6mSVxxtb8BjLMhb-mCyT_Yg",
        "expires_in": 7200,
        "refresh_token": "OezXcEiiBSKSxW0eoylIeAsR0GmYd1awCffdHgb4fhS_KKf2CotGj2cBNUKQQvj-oJ9VmO-0Z-_izfnSAX_s0aqDsYkW4s8W5dLZ4iyNj5YBkF0ZUH1Ew8Iqea6x_itq13sYDqP1D7ieaDy9u2AHHw",
        "openid": "oLVPpjqs9BhvzwPj5A-vTYAX3GLc",
        "scope": "snsapi_base"
    }

    关于怎么在Action中提交HTTP请求这是我个人的实现方法,可能会有点low

    public String sendRequest(URL url,String para){
    String result = null;
    try {
    HttpURLConnection  conn = (HttpURLConnection)url.openConnection();
    conn.setConnectTimeout(30000);
    conn.setReadTimeout(30000);
       conn.setRequestProperty("Pragma:", "no-cache");
       conn.setRequestProperty("Content-type", "text/xml");
       conn.setRequestProperty("Accept-Charset", "utf-8");
       conn.setRequestProperty("contentType", "utf-8");
    conn.setDoInput(true);
    conn.setDoOutput(true);
    conn.setRequestMethod("GET");

    OutputStreamWriter out = new OutputStreamWriter(conn.getOutputStream(),"UTF-8"); 
    out.write(para);
    out.flush();
    out.close();

    BufferedReader in = new BufferedReader( new InputStreamReader( conn.getInputStream(),"utf-8") );
    String line = "";
       StringBuffer buffer = new StringBuffer(1024);
        while ( null != (line = in.readLine())){
        buffer.append(line);
        }
       in.close();
       result = buffer.toString();
    }catch(IOException e){
    e.printStackTrace();
    }
    return result;
    }

    把需要提交的参数拼接成字符然后交给上面的方法即可,返回结果是String对象

    URL url = new URL("http:\\xxxx");

    String param = "appid=wxb1bbd8e52403fc1e&secret=3414fcf81a7141db99088f0150e78ba5&code="+code+"& grant_type=authorization_code";

    用一个String来接收即可

    String result = sendRequest(url,param);  
        JSONObject jsonObject=JSONObject.fromObject(result);
        String access_token=jsonObject.getString("access_token");
        
        String openid=jsonObject.getString("openid");
        session.setAttribute("openid", openid);
        session.setAttribute("ip", ip);

    到此为止,获取OpenID就结束了,因为我做的用户绑定,我只用到OpenID,所以并没有做获取用户基本信息一步,

    不过也只是再提交一个HTTP请求即可获取https://api.weixin.qq.com/cgi-bin/user/info?access_token=ACCESS_TOKEN&openid=OPENID返回的是JSON,应该可以再次调用sendRequest来提交HTTP请求的。

         



    展开全文
  • 微信公众号开发中的用户账号绑定
                   

    转自:http://abyssly.com/2013/09/20/wx_bind/

    最近由于工作需要,接触了微信公众号的开发。业务上要求绑定微信用户和系统用户,以便用户在一次绑定后能够通过系统用户的身份去使用一些功能。我关注的招行信用卡公众号实现了这个功能,所以估计还是可行的,在网上搜索了一下,发现这个问题没什么好的答案,很多都说取不到微信用户名实现不了,甚至有说实现了这个功能的应该是与微信有内部合作的。

    搜索无果,遂自己动手实验,后发现其实完全可以的,看来实践才是检验真理的唯一标准,方案上也很简单,我分几点来说。

    用OpenID绑定即可

    微信接口中虽然没给用户的微信账号,但给了用户的OpenID,这个OpenID对一个公众号是唯一的,测试也证明不会改变,也就是说同一个微信号和同一个公众号交互,我们得到的OpenID是不会变的,因此,可以用OpenID作为微信用户的身份标识。

    如何绑定

    俗话说,没吃过猪肉还没见过猪跑。看招行信用卡公众号是如何做的,在微信里面给用户一个验证链接,用户点击链接,微信会用内嵌的浏览器打开这个链接,然后就是一般的网页登录验证界面,我们通过HTTP(S)获取用户输入的系统用户名与密码,验证通过后完成绑定。 具体如何生成链接和如何传递OpenID下面详述。

    如何生成绑定链接

    绑定涉及到用户的身份甚至利益,所以需要注意安全性。我们需要绑定的是OpenID和系统用户,系统用户名是用户直接在链接页面输入后通过HTTP(S)传给我们的,这没有问题。OpenID对用户来说透明,用户不会传给我们,我们也只有在用户在微信中向公众号发消息时才可获得OpenID,所以很明显,OpenID需要包含在生成的链接中,至于需不需要对OpenID作加密就看你自己了,我觉得这不重要,更为重要的是要在链接中带上签名和加上时间戳。因为我们需要确认这个链接是由我们服务端生成的,用户自己或者其他人不能够伪造出这个链接,加上时间戳是为了给这个链接一个过期时间,如果不限制过期时间,假设用户绑定后这个链接通过某种方式被别人知道,那么这个人就可以把自己的账号与用户的微信号绑定。所以我采取的方法是用OpenID、过期时间再加上一个密钥生成签名,生成签名的方法和微信服务器接口验证时的签名方法类似(密钥最好另选一个只有自己知道的)。

    如何传递OpenID

    有了绑定链接,用户点了绑定链接,但这只是第一步,第二步我们需要在用户在链接页面提交登录请求后进行验证,OpenID怎么传到第二步中呢?有人说了,这还不简单,在登录表单中加一个隐藏域放用户的OpenID一起提交给验证的Handler不就OK了,那我只能说很遗憾,你前面所做的安全工作都白费了,一旦A用户的OpenID泄漏,B用户就可以把自己的账号与A用户的微信号绑定了。所以永远不要相信客户端提交的东西。我的方法是当用户点击生成链接后,在链接页载入时,将OpenID存到session中,因为这个session是没法伪造的(cookie被盗除外),所以只有点击这个链接的用户的session中才会有链接中包含的OpenID。

    关于微信服务器签名多说一句

    大家都知道微信公众号消息接口验证时微信会向我们服务器发一个GET请求,在其中带上只有我们和微信服务器知道的签名,我们在请求处理Handler中会验证这个签名,这点大家无异议;消息接口验证通过后,微信就会把用户发的消息以POST的方式发给我们,很多人可能会在这里忽视对签名的检查,从而给恶意者伪造用户请求的机会。在微信以POST方式传递用户的消息时,仍然会将签名信息附在URL参数中,我们在处理每一个POST请求时,第一步还是得像处理消息接口验证时一样,去对URL参数中的签名作验证,只有签名验证通过后才可去取POST的信息。

    绑定流程的详细描述

    我在上面说了基本方法,但不够详细,导致一些新手朋友还是不清楚具体如何操作,所以我在此尝试更加详细地描述整个过程的每一步:

    1. 数据库中建立用户OpenID和系统用户的绑定关系表,初始时为空。

    2. 用户和微信交互时,你可以取到用户的OpenID。

    3. 检查数据表,如发现该OpenID没有绑定系统用户,则返回一个链接供用户在微信内嵌浏览器中打开,这个链接打开后类似于系统用户登录界面。

    4. 关键是链接的生成,链接需要带3个url参数:

       1. 用户OpenID:因为你需要在绑定页面中取到是哪个微信用户想要绑定系统用户。 2. 时间戳timestamp:这是为了防止链接泄漏出去被恶意利用,具体来说就是一个你指定的过期时间,超过这个时间这个链接就失效了,用户只能再次获取。 3. 签名signature:这是为了保证此验证链接只有你才可能生成,用户及第三方均无法伪造。
    5. 签名的生成需要你有一个只有你知道的token(密钥,不要与设置在公众号里面的token相同),生成签名方法和验证微信服务器消息真实性类似。流程如下:

       1. 将token、OpenID、timestamp三个参数进行字典序排序。 2. 将三个参数字符串拼接成一个字符串进行sha1加密,得到链接的signature参数。
    6. 用户打开某个绑定链接时,你首先验证链接的有效性,即按上述5.1和5.2中描述的同样的步骤得到signature与参数中的sinature对比,如果相同,则再检查链接是否超时,两步验证均通过,你就可以将用户的微信OpenID设置到用户的session中,然后你就可以渲染验证页面,让用户输入其系统用户名和密码以提交给你服务器进行验证。

    7. 在用户提交绑定验证请求后,你只需要检查session中有没有你设置的OpenID,没有自然无效,有的话就是要绑定的OpenID了,此时你可以把这个OpenID从session中删除了。然后你如果验证系统用户名和密码通过后,就把这个OpenID和系统用户绑定起来,加入到第1步中说的绑定关系表中。

    8. 完毕。

    关于微信公众号用户账号绑定就是这么多,其实很容易实现,我在这里把我的方法和大家分享一下,老鸟可以忽略,主要是希望对新手有一些帮助。欢迎探讨,敬请轻拍。


               

    再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow

    展开全文
  • PHP开发网站引入第三方登录之微信登录、绑定 案例(www.spaceyun.com) 写在前面的话: 如果在做此项功能之前有去了解OAuth2.0协议,那么接下来一切都很容易理解,如果没有了解OAuth2.0协议, 也不影响完成此项...
  •   小程序绑定事件的方式有很多种,这里我只对bindtap的绑定方式进行介绍,其他的绑定方式也是差不多这样的。 1、不带参数绑定方式 index.wxml文件中:share表示绑定的事件名称 <view class='enjoy' ...
  • 微信公众号的开发者配置中的微信开发工具中明明已经正确绑定开发者账号,但微信开发者工具还是弹出“未绑定网页开发者”,坑了好久,记录下 原因: 1.微信公众号的开发者配置中的微信开发工具中没有绑定开发者...
  • 微信开发 开发流程 第一模块:微信API 1.Weixin接口,与QQ不同加入了一个accessToken参数 2.WeixinImpl接口实现类,继承AbstractOAuth2ApiBinding * URL_GET_USER_INFO:获取用户信息的url * 实现获取...
  • 本教程的学习条件: 了解微信公众号开发的基本知识。... 首先我们要明确绑定微信用户和系统用户,其目的是为了用户在一次绑定以后,再次通过微信访问系统时可以由系统自动为其登录,避免用户反复登录...
  • 1.事件分类: 冒泡事件:当一个组件上的事件被触发后,该事件会向父节点传递。 非冒泡事件:当一个组件上的事件被触发后,该事件不会向父节点传递。区分bindtap和catchtap示例代码:&lt;view bindtap="...
  • 微信开发之入门教程

    2016-01-12 10:55:26
    微信开发也是有了一定的认识。在此,小宝鸽再次无私地分享给大家啦。其实微信开发跟web开发没有多大的区别,只是经过了微信,然后再由浏览器打开。因为经过微信,因此你的web会附加一些微信平台所提供的一些功能,...
  • 今天完成了pc端微信相关功能的开发,主要是账号与微信绑定微信扫码登陆。 流程,用户登陆后,在个人中心里有一个和微信绑定界面,用户使用微信扫描后,当前账号和微信账号绑定,可以用来微信扫描登陆。 在登陆...
  • 微信公众平台OAuth2.0授权详细步骤如下: 用户关注微信公众账号。微信公众账号提供用户请求授权页面URL。用户点击授权页面URL,将向服务器发起请求服务器询问用户是否同意授权给微信公众账号(scope为snsapi_base...
  • 微信公众号平台开发者那里,在“账号管理”那里,有一项功能是“生成带参数的二维码”,通过这儿生成的二维码,只要通过微信扫一扫之后,会把事件自动推送到微信公众号上 用微信扫一扫推送到开发者网址那儿的数据...
  • 有些外网映射工具的域名是被平台屏蔽的,比如说路由侠 请使用natapp 转载于:https://www.cnblogs.com/a1304908180/p/10242548.html
  • 2019独角兽企业重金招聘Python工程师标准>>> ...
  • 现在很多网站都已经建立了一套...同样地,一个Apple ID可以享受苹果的所有服务。...对于企业,可能会有产品线通常有网站,app,微信公众号等。统一各产品线的账号体系,实现一个账号处处使用的目标是非常有必要的。网...
  • 微信公众号生成带参数的二维码,当其他人非微信扫描二维码的时候,可以看到一个自定义的链接而不是生成ticket的时候返回的URL,如何做!
1 2 3 4 5 ... 20
收藏数 19,203
精华内容 7,681
关键字:

微信开发会员的绑定参数