微信开发平台 用户统一标示_微信开发平台根据微信哈查询用户 - CSDN
  • 微信开放平台开发——网页微信扫码登录(OAuth2.0) 1、OAuth2.0  OAuth(开放授权)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表),而无需将...
    微信开放平台开发——网页微信扫码登录(OAuth2.0)
    1、OAuth2.0


      OAuth(开放授权)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方应用。


      允许用户提供一个令牌,而不是用户名和密码来访问他们存放在特定服务提供者的数据。每一个令牌授权一个特定的网站(例如,视频编辑网站)在特定的时段(例如,接下来的2小时内)内访问特定的资源(例如仅仅是某一相册中的视频)。这样,OAuth允许用户授权第三方网站访问他们存储在另外的服务提供者上的信息,而不需要分享他们的访问许可或他们数据的所有内容。
    2、目标
      我们这里主要模拟使用OAuth2.0,用户通过扫描我们网页应用的二维码并进行授权登录来获取用户的基本信息的过程。详细的接口相关信息可以在微信开放平台上查看:https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&lang=zh_CN
    3、前期准备(获取微信开发者权限)
      我们这里主要讲的是网站(Web)应用,网站应用微信登录是基于OAuth2.0协议标准构建的微信OAuth2.0授权登录系统(即上面的协议)。在微信客户端授权登录(获取用户信息)的可以查看:http://www.cnblogs.com/0201zcr/p/5131602.html
      在进行微信OAuth2.在进行微信OAuth2.0授权登录接入之前,在微信开放平台注册开发者帐号,并拥有一个已审核通过的网站应用,并获得相应的AppID和AppSecret,申请微信登录且通过审核后,可开始接入流程。


    3.1、注册开发者账号
      可以在https://open.weixin.qq.com/ 这里申请开发的账号。由于是腾讯的网页,这里可以直接通过 QQ号进行登录。
    3.2、提交网站应用审核
      在已经登录的界面中选择“管理中心”——》网站应用——》创建网站应用


       将会弹出下面的界面


      填写过后,还有有一个页面需要填写,提交一份纸质版申请书扫描件(会提供模板,我们下载再来填写后,需盖章,签名),配置回调域名(扫码登录后会跳转的页面)等。
      之后提交审核即可,等微信审核通过,我们即可获得我们需要的网页应用的appid和AppSecret,并配置后回调的域名了(这三样是我们开发所必须的)。
    3.3、开发者资质认证
      由于我们这里要使用微信登录的接口,所以我们还需要向微信提出认证,只有认证了才能使用微信那些高级的接口。未认证的如下图所示


       认证之后是这样子的:


        我现在暂时没有找到可以向公众账号那样子的测试账号的申请。如果有知道怎么可以申请到测试账号的高手,希望能赐教一下。
      接下来,我们就可以开始我们的网页微信扫码登录开发了。
    4、授权流程说明
      微信OAuth2.0授权登录让微信用户使用微信身份安全登录第三方应用或网站,在微信用户授权登录已接入微信OAuth2.0的第三方应用后,第三方可以获取到用户的接口调用凭证(access_token),通过access_token可以进行微信开放平台授权关系接口调用,从而可实现获取微信用户基本开放信息和帮助用户实现基础开放功能等。
      微信OAuth2.0授权登录目前支持authorization_code模式,适用于拥有server端的应用授权。该模式整体流程为:


    1. 第三方发起微信授权登录请求,微信用户允许授权第三方应用后,微信会拉起应用或重定向到第三方网站,并且带上授权临时票据code参数;
    2. 通过code参数加上AppID和AppSecret等,通过API换取access_token;
    3. 通过access_token进行接口调用,获取用户基本数据资源或帮助用户实现基本操作。
       获取access_token时序图:


     
    5、获取网页的二维码
      当我们通过微信的认证,获取到了appid和AppSecret,并配置了回调的域名。我们就已经可以获取属于我们网页的二维码了,获取的方式很简单,只需打开一个微信的链接,加上我们的appid和回调域名即可在网页上面打开二维码,用户用微信客户端扫码并授权登录之后即会跳转到我们配置的回调域名下。
    注意:
    1、这里填写的是域名(是一个字符串),而不是URL,因此请勿加http://等协议头;
    2、授权回调域名配置规范为全域名,比如需要网页授权的域名为:www.qq.com,配置以后此域名下面的页面http://www.qq.com/music.html 、 http://www.qq.com/login.html 都可以进行OAuth2.0鉴权。但http://pay.qq.com 、 http://music.qq.com 、 http://qq.com无法进行OAuth2.0鉴权
    5.1、请求url说明


      第三方使用网站应用授权登录前请注意已获取相应网页授权作用域(scope=snsapi_login),则可以通过在PC端打开以下链接:


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


     参数说明
    参数 是否必须 说明
    appid 应用唯一标识(前面认证网页应用中获得)
    redirect_uri 重定向地址,需要进行UrlEncode(前面认证网页应用中获得)
    response_type 填code
    scope 应用授权作用域,拥有多个作用域用逗号(,)分隔,网页应用目前仅填写snsapi_login即可
    state 用于保持请求和回调的状态,授权请求后原样带回给第三方。该参数可用于防止csrf攻击(跨站请求伪造攻击),建议第三方带上该参数,可设置为简单的随机数加session进行校验
     返回说明
       用户允许授权后,将会重定向到redirect_uri的网址上,并且带上code和state参数
    redirect_uri?code=CODE&state=STATE
       若用户禁止授权,则重定向后不会带上code参数,仅会带上state参数


    redirect_uri?state=STATE
    5.2、事例:


      一号店的微信二维码链接如下:


    https://open.weixin.qq.com/connect/qrconnect?appid=wxbdc5610cc59c1631&redirect_uri=https%3A%2F%2Fpassport.yhd.com%2Fwechat%2Fcallback.do&response_type=code&scope=snsapi_login&state=3d6be0a4035d839573b04816624a415e#wechat_redirect
       将其复制到浏览器中打开即可获得一号店的二维码,二维码页面如下:






      通过使用微信客户端的扫一扫功能,扫描该二维码,即会跳转到上面填写redirect_uri所在的地址上。假如用户同意授权,这里就获得了微信返回的code参数了。


    6、获取用户信息


      假如前面已经获得code。我们可以通过code参数去获取用户openid和access_token,进而获得用户的信息。
    6.1、通过code参数获取access_token
    https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code
     参数说明


    参数 是否必须 说明
    appid 应用唯一标识,在微信开放平台提交应用审核通过后获得
    secret 应用密钥AppSecret,在微信开放平台提交应用审核通过后获得
    code 填写第一步获取的code参数
    grant_type 填authorization_code
    返回说明


    正确的返回:





    "access_token":"ACCESS_TOKEN", 
    "expires_in":7200, 
    "refresh_token":"REFRESH_TOKEN",
    "openid":"OPENID", 
    "scope":"SCOPE",
    "unionid": "o6_bmasdasdsad6_2sgVt7hMZOPfL"
    }


    参数 说明
    access_token 接口调用凭证
    expires_in access_token接口调用凭证超时时间,单位(秒)
    refresh_token 用户刷新access_token
    openid 授权用户唯一标识
    scope 用户授权的作用域,使用逗号(,)分隔
     unionid 当且仅当该网站应用已获得该用户的userinfo授权时,才会出现该字段。
    错误返回样例:


    {"errcode":40029,"errmsg":"invalid code"}
    注意:
    code参数的超时时间是5分钟,且每次请求的code参数的值都不一样。
    access_token的超时时间是32分钟。
    6.2、通过access_token获取用户的基本信息
    获取的前提条件
    access_token有效且为超时;
    微信用户已授权给第三方应用账号相应接口作用域(scope)【在二维码生成连接那里填写】
    对于接口作用域(scope),能调用的接口有以下:
    授权作用域(scope) 接口 接口说明
    snsapi_base /sns/oauth2/access_token 通过code换取access_token、refresh_token和已授权scope
    /sns/oauth2/refresh_token 刷新或续期access_token使用
    /sns/auth 检查access_token有效性
    snsapi_userinfo /sns/userinfo 获取用户个人信息
     
      使用snsapi_base作用域的授权是扫码之后无需用户点击授权,扫码后直接跳转,用户感觉不到授权了,但这种授权方式能获取的数据量有限,这里我们要获取用户的基本信息,我们需要使用snsapi_userinfo授权。使用snsapi_userinfo授权,扫码后出现类似于下面的授权界面


      此接口用于获取用户个人信息。开发者可通过OpenID来获取用户基本信息。特别需要注意的是,如果开发者拥有多个移动应用、网站应用和公众帐号,可通过获取用户基本信息中的unionid来区分用户的唯一性,因为只要是同一个微信开放平台帐号下的移动应用、网站应用和公众帐号,用户的unionid是唯一的。换句话说,同一用户,对同一个微信开放平台下的不同应用,unionid是相同的。请注意,在用户修改微信头像后,旧的微信头像URL将会失效,因此开发者应该自己在获取用户信息后,将头像图片保存下来,避免微信头像URL失效后的异常情况。
      
    https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID
     参数说明


    参数 是否必须 说明
    access_token 调用凭证(上一个请求中获得)
    openid 普通用户的标识,对当前开发者帐号唯一(上一个请求中获得)
           lang  否 国家地区语言版本,zh_CN 简体,zh_TW 繁体,en 英语,默认为zh-CN
    返回说明


    正确的Json返回结果:





    "openid":"OPENID",
    "nickname":"NICKNAME",
    "sex":1,
    "province":"PROVINCE",
    "city":"CITY",
    "country":"COUNTRY",
    "headimgurl": "http://wx.qlogo.cn/mmopen/g3MonUZtNHkdmzicIlibx6iaFqAc56vxLSUfpb6n5WKSYVY0ChQKkiaJSgQ1dZuTOgvLLrhJbERQQ4eMsv84eavHiaiceqxibJxCfHe/0",
    "privilege":[
    "PRIVILEGE1", 
    "PRIVILEGE2"
    ],
    "unionid": " o6_bmasdasdsad6_2sgVt7hMZOPfL"


    }


    参数 说明
    openid 普通用户的标识,对当前开发者帐号唯一
    nickname 普通用户昵称
    sex 普通用户性别,1为男性,2为女性
    province 普通用户个人资料填写的省份
    city 普通用户个人资料填写的城市
    country 国家,如中国为CN
    headimgurl 用户头像,最后一个数值代表正方形头像大小(有0、46、64、96、132数值可选,0代表640*640正方形头像),用户没有头像时该项为空
    privilege 用户特权信息,json数组,如微信沃卡用户为(chinaunicom)
    unionid 用户统一标识。针对一个微信开放平台帐号下的应用,同一用户的unionid是唯一的。
    错误的Json返回示例:



    "errcode":40003,"errmsg":"invalid openid"
    }
    7、总结 


      最近着手开发了微信网页扫码登录和公众号授权登录收获颇丰,两者的开发很类似。以下是我个人摸索过程中发现的两者的异同:


    两者都可以通过微信客户端扫码授权的方式,让第三方页面获得微信用户的一些基本信息(昵称、性别、所在地、在微信唯一标示等……)。他们都是通过提供一个链接让用户授权的方式。但网页版需要在页面打开二维码之后授权,而公众号则需要用户先关注了我们的公众号,然后点开公众号里面的链接,确认授权即可。
    网页扫码登录需要将授权的链接(二维码链接)在网页中打开、而公众号授权登录的链接必须要微信客户端中打开。
    无论网页扫码登录还是在公众号中授权登录,都是通过授权的方式获得一个code参数,之后通过code参数获取access_token和openid和通过access_token和openid去获取用户的基本信息的请求链接是一样的。
    在开发公众号授权登录的过程中,我发现了有测试账号的提供,足以满足我们的测试和开发,但在开发网页扫码时,暂时未发现哪里能获取测试账号,我是通过申请获取的。(希望知道哪里有测试账号的请求高手赐教)。
     公众账号授权登录:http://www.cnblogs.com/0201zcr/p/5131602.html


    微信公众号群发消息:http://www.cnblogs.com/0201zcr/p/5866296.html
    展开全文
  • 最近在做微信小程序的开发,以前小程序这块接触的不多,所以就想...由于微信牢牢把控着用户的信息,因此当你需要在微信平台中获取用户标示信息,必然要通过微信平台接口来获取(其实这个openId是来区分用户唯一...

    最近在做微信小程序的开发,以前小程序这块接触的不多,所以就想把在项目中每一步遇到的问题总结下来。
    开始做的时候,这个openId肯定是要打交道的。那下面我们来看一下openId到底是怎么一回事吧。
    做过微信开发的同学,多多少少都会涉及到用户的唯一标识的问题。由于微信牢牢把控着用户的信息,因此当你需要在微信平台中获取用户的标示信息,必然要通过微信的平台接口来获取(其实这个openId是来区分用户唯一标识)。

    openid
    同一个应用(App、公众号、小程序)的同一个用户有唯一的openid

    unionid
    借用微信官方文档中的话来说,如果开发者拥有多个移动应用、网站应用、和公众帐号(包括小程序),可通过 UnionID 来区分用户的唯一性,因为只要是同一个微信开放平台帐号下的移动应用、网站应用和公众帐号(包括小程序),用户的 UnionID 是唯一的。换句话说,同一用户,对同一个微信开放平台下的不同应用,unionid是相同的

    那么如何获取openId和UnionID
    我们先看一张图:
    根据微信上的文档简化来的
    过程并不复杂,其实这里需要说一下的是,为什么会多了一步,开发者服务器去访问微信接口呢?其实,微信官方文档说得很清楚,如果appid和secret存在应用本地,应用本身是容易被破解和抓包,非常容易泄露的,会导致安全问题;因此,放到开发者的服务器去访问,能够保证一定的安全性,除非服务器被攻破,否则很难知道appid和secret的

    因此可以实现如下的功能
    同一个微信开放平台下的相同主体的App、公众号、小程序,如果用户已经关注公众号,或者曾经登录过App或公众号,则用户打开小程序时,开发者可以直接通过wx.login获取到该用户UnionID,无须用户再次授权。

    1.使用wx.login得到code,之后让后台请求微信服务器,获得的信息包括
    openid: 用户唯一标识
    session_key: 用来解密微信提供的加密数据
    unionid: 可能有,也可能没有

    2.用上一步获得的数据进行登录。由于我的公众号与实际应用使用了不同的用户库,所以即使带了unionid,也不一定已经在应用用户库注册过
    若用户不存在,则进入注册流程

    3.首先通过wx.getUserInfo获取加密的用户信息,然后通过wx.getPhoneNumber来获取加密后的手机号码,之后统一发到后台解密并完成注册。

    总结
    同一个用户,在你的多个应用中,openid可能都不相同;但是,unionid一定会相同的。所以,如果你有多个小程序或者微信公众号,需要确定是否为同一个用户的时候,就需要unionid来确定。

    (站在巨人的肩膀进行的总结,感谢!)

    展开全文
  • 微信开放平台开发——网页微信扫码登录(OAuth2.0) 1、OAuth2.0  OAuth(开放授权)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表),而无需将...

    微信开放平台开发——网页微信扫码登录(OAuth2.0)

    1、OAuth2.0

      OAuth(开放授权)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方应用。

      允许用户提供一个令牌而不是用户名和密码来访问他们存放在特定服务提供者的数据。每一个令牌授权一个特定的网站(例如,视频编辑网站)在特定的时段(例如,接下来的2小时内)内访问特定的资源(例如仅仅是某一相册中的视频)。这样,OAuth允许用户授权第三方网站访问他们存储在另外的服务提供者上的信息,而不需要分享他们的访问许可或他们数据的所有内容。
    2、目标
      我们这里主要模拟使用OAuth2.0,用户通过扫描我们网页应用的二维码并进行授权登录来获取用户的基本信息的过程。详细的接口相关信息可以在微信开放平台上查看:https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&lang=zh_CN
    3、前期准备(获取微信开发者权限)
      我们这里主要讲的是网站(Web)应用,网站应用微信登录是基于OAuth2.0协议标准构建的微信OAuth2.0授权登录系统(即上面的协议)。在微信客户端授权登录(获取用户信息)的可以查看:http://www.cnblogs.com/0201zcr/p/5131602.html

      在进行微信OAuth2.在进行微信OAuth2.0授权登录接入之前,在微信开放平台注册开发者帐号,并拥有一个已审核通过的网站应用,并获得相应的AppID和AppSecret,申请微信登录且通过审核后,可开始接入流程。

    3.1、注册开发者账号
      可以在https://open.weixin.qq.com/ 这里申请开发的账号。由于是腾讯的网页,这里可以直接通过 QQ号进行登录。
    3.2、提交网站应用审核
      在已经登录的界面中选择“管理中心”——》网站应用——》创建网站应用
       将会弹出下面的界面
      填写过后,还有有一个页面需要填写,提交一份纸质版申请书扫描件(会提供模板,我们下载再来填写后,需盖章,签名),配置回调域名(扫码登录后会跳转的页面)等。
      之后提交审核即可,等微信审核通过,我们即可获得我们需要的网页应用的appid和AppSecret,并配置后回调的域名了(这三样是我们开发所必须的)。
    3.3、开发者资质认证
      由于我们这里要使用微信登录的接口,所以我们还需要向微信提出认证,只有认证了才能使用微信那些高级的接口。未认证的如下图所示
       认证之后是这样子的:
        我现在暂时没有找到可以向公众账号那样子的测试账号的申请。如果有知道怎么可以申请到测试账号的高手,希望能赐教一下。
      接下来,我们就可以开始我们的网页微信扫码登录开发了。
    4、授权流程说明
      微信OAuth2.0授权登录让微信用户使用微信身份安全登录第三方应用或网站,在微信用户授权登录已接入微信OAuth2.0的第三方应用后,第三方可以获取到用户的接口调用凭证(access_token),通过access_token可以进行微信开放平台授权关系接口调用,从而可实现获取微信用户基本开放信息和帮助用户实现基础开放功能等。

      微信OAuth2.0授权登录目前支持authorization_code模式,适用于拥有server端的应用授权。该模式整体流程为:

    1. 第三方发起微信授权登录请求,微信用户允许授权第三方应用后,微信会拉起应用或重定向到第三方网站,并且带上授权临时票据code参数;
    2. 通过code参数加上AppID和AppSecret等,通过API换取access_token;
    3. 通过access_token进行接口调用,获取用户基本数据资源或帮助用户实现基本操作。

       获取access_token时序图:

     
    5、获取网页的二维码
      当我们通过微信的认证,获取到了appid和AppSecret,并配置了回调的域名。我们就已经可以获取属于我们网页的二维码了,获取的方式很简单,只需打开一个微信的链接,加上我们的appid和回调域名即可在网页上面打开二维码,用户用微信客户端扫码并授权登录之后即会跳转到我们配置的回调域名下。
    注意:
    1、这里填写的是域名(是一个字符串),而不是URL,因此请勿加http://等协议头;
    2、授权回调域名配置规范为全域名,比如需要网页授权的域名为:www.qq.com,配置以后此域名下面的页面http://www.qq.com/music.html 、 http://www.qq.com/login.html 都可以进行OAuth2.0鉴权。但http://pay.qq.com 、 http://music.qq.comhttp://qq.com无法进行OAuth2.0鉴权

    5.1、请求url说明

      第三方使用网站应用授权登录前请注意已获取相应网页授权作用域(scope=snsapi_login),则可以通过在PC端打开以下链接:

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

     

     参数说明
    参数 是否必须 说明
    appid 应用唯一标识(前面认证网页应用中获得)
    redirect_uri 重定向地址,需要进行UrlEncode(前面认证网页应用中获得)
    response_type 填code
    scope 应用授权作用域,拥有多个作用域用逗号(,)分隔,网页应用目前仅填写snsapi_login即可
    state 用于保持请求和回调的状态,授权请求后原样带回给第三方。该参数可用于防止csrf攻击(跨站请求伪造攻击),建议第三方带上该参数,可设置为简单的随机数加session进行校验
     返回说明
       用户允许授权后,将会重定向到redirect_uri的网址上,并且带上code和state参数
    redirect_uri?code=CODE&state=STATE

       若用户禁止授权,则重定向后不会带上code参数,仅会带上state参数

    redirect_uri?state=STATE

    5.2、事例:

      一号店的微信二维码链接如下:

    https://open.weixin.qq.com/connect/qrconnect?appid=wxbdc5610cc59c1631&redirect_uri=https%3A%2F%2Fpassport.yhd.com%2Fwechat%2Fcallback.do&response_type=code&scope=snsapi_login&state=3d6be0a4035d839573b04816624a415e#wechat_redirect

       将其复制到浏览器中打开即可获得一号店的二维码,二维码页面如下:

      通过使用微信客户端的扫一扫功能,扫描该二维码,即会跳转到上面填写redirect_uri所在的地址上。假如用户同意授权,这里就获得了微信返回的code参数了。

    6、获取用户信息

      假如前面已经获得code。我们可以通过code参数去获取用户openid和access_token,进而获得用户的信息。
    6.1、通过code参数获取access_token
    https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code

     参数说明

    参数 是否必须 说明
    appid 应用唯一标识,在微信开放平台提交应用审核通过后获得
    secret 应用密钥AppSecret,在微信开放平台提交应用审核通过后获得
    code 填写第一步获取的code参数
    grant_type 填authorization_code
    返回说明

    正确的返回:

    复制代码
    { 
    "access_token":"ACCESS_TOKEN", 
    "expires_in":7200, 
    "refresh_token":"REFRESH_TOKEN",
    "openid":"OPENID", 
    "scope":"SCOPE",
    "unionid": "o6_bmasdasdsad6_2sgVt7hMZOPfL"
    }
    复制代码
    参数 说明
    access_token 接口调用凭证
    expires_in access_token接口调用凭证超时时间,单位(秒)
    refresh_token 用户刷新access_token
    openid 授权用户唯一标识
    scope 用户授权的作用域,使用逗号(,)分隔
     unionid 当且仅当该网站应用已获得该用户的userinfo授权时,才会出现该字段。

    错误返回样例:

    {"errcode":40029,"errmsg":"invalid code"}
    注意
    • code参数的超时时间是5分钟,且每次请求的code参数的值都不一样。
    • access_token的超时时间是32分钟。
    6.2、通过access_token获取用户的基本信息
    获取的前提条件
    • access_token有效且为超时;
    • 微信用户已授权给第三方应用账号相应接口作用域(scope)【在二维码生成连接那里填写
    对于接口作用域(scope),能调用的接口有以下:
    授权作用域(scope) 接口 接口说明
    snsapi_base /sns/oauth2/access_token 通过code换取access_token、refresh_token和已授权scope
    /sns/oauth2/refresh_token 刷新或续期access_token使用
    /sns/auth 检查access_token有效性
    snsapi_userinfo /sns/userinfo 获取用户个人信息
     
      使用snsapi_base作用域的授权是扫码之后无需用户点击授权,扫码后直接跳转,用户感觉不到授权了,但这种授权方式能获取的数据量有限,这里我们要获取用户的基本信息,我们需要使用snsapi_userinfo授权。使用snsapi_userinfo授权,扫码后出现类似于下面的授权界面
      此接口用于获取用户个人信息。开发者可通过OpenID来获取用户基本信息。特别需要注意的是,如果开发者拥有多个移动应用、网站应用和公众帐号,可通过获取用户基本信息中的unionid来区分用户的唯一性,因为只要是同一个微信开放平台帐号下的移动应用、网站应用和公众帐号,用户的unionid是唯一的。换句话说,同一用户,对同一个微信开放平台下的不同应用,unionid是相同的。请注意,在用户修改微信头像后,旧的微信头像URL将会失效,因此开发者应该自己在获取用户信息后,将头像图片保存下来,避免微信头像URL失效后的异常情况。
      
    https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID

     参数说明

    参数 是否必须 说明
    access_token 调用凭证(上一个请求中获得)
    openid 普通用户的标识,对当前开发者帐号唯一(上一个请求中获得)
           lang   否 国家地区语言版本,zh_CN 简体,zh_TW 繁体,en 英语,默认为zh-CN
    返回说明

    正确的Json返回结果:

    复制代码
    { 
    "openid":"OPENID",
    "nickname":"NICKNAME",
    "sex":1,
    "province":"PROVINCE",
    "city":"CITY",
    "country":"COUNTRY",
    "headimgurl": "http://wx.qlogo.cn/mmopen/g3MonUZtNHkdmzicIlibx6iaFqAc56vxLSUfpb6n5WKSYVY0ChQKkiaJSgQ1dZuTOgvLLrhJbERQQ4eMsv84eavHiaiceqxibJxCfHe/0",
    "privilege":[
    "PRIVILEGE1", 
    "PRIVILEGE2"
    ],
    "unionid": " o6_bmasdasdsad6_2sgVt7hMZOPfL"
    
    }
    复制代码
    参数 说明
    openid 普通用户的标识,对当前开发者帐号唯一
    nickname 普通用户昵称
    sex 普通用户性别,1为男性,2为女性
    province 普通用户个人资料填写的省份
    city 普通用户个人资料填写的城市
    country 国家,如中国为CN
    headimgurl 用户头像,最后一个数值代表正方形头像大小(有0、46、64、96、132数值可选,0代表640*640正方形头像),用户没有头像时该项为空
    privilege 用户特权信息,json数组,如微信沃卡用户为(chinaunicom)
    unionid 用户统一标识。针对一个微信开放平台帐号下的应用,同一用户的unionid是唯一的。

    错误的Json返回示例:

    { 
    "errcode":40003,"errmsg":"invalid openid"
    }

    7、总结 

      最近着手开发了微信网页扫码登录和公众号授权登录收获颇丰,两者的开发很类似。以下是我个人摸索过程中发现的两者的异同:

    • 两者都可以通过微信客户端扫码授权的方式,让第三方页面获得微信用户的一些基本信息(昵称、性别、所在地、在微信唯一标示等……)。他们都是通过提供一个链接让用户授权的方式。但网页版需要在页面打开二维码之后授权,而公众号则需要用户先关注了我们的公众号,然后点开公众号里面的链接,确认授权即可。
    • 网页扫码登录需要将授权的链接(二维码链接)在网页中打开、而公众号授权登录的链接必须要微信客户端中打开。
    • 无论网页扫码登录还是在公众号中授权登录,都是通过授权的方式获得一个code参数,之后通过code参数获取access_token和openid和通过access_token和openid去获取用户的基本信息的请求链接是一样的。
    • 在开发公众号授权登录的过程中,我发现了有测试账号的提供,足以满足我们的测试和开发,但在开发网页扫码时,暂时未发现哪里能获取测试账号,我是通过申请获取的。(希望知道哪里有测试账号的请求高手赐教)。

     公众账号授权登录:http://www.cnblogs.com/0201zcr/p/5131602.html

    微信公众号群发消息:http://www.cnblogs.com/0201zcr/p/5866296.html

    展开全文
  • 微信开放平台和公众平台的区别 1.公众平台面向的时普通的用户,比如自媒体和媒体,企业官方微信公众账号运营人员使用,当然你所在的团队或者公司有实力去开发一些内容,也可以调用公众平台里面的接口,比如自定义...

    这篇文章主要介绍了关于PHP实现微信网页登陆授权开发,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下

    我的官方群点击此处

    微信开放平台和公众平台的区别

    1.公众平台面向的时普通的用户,比如自媒体和媒体,企业官方微信公众账号运营人员使用,当然你所在的团队或者公司有实力去开发一些内容,也可以调用公众平台里面的接口,比如自定义菜单,自动回复,查询功能。目前大多数微信通过认证之后,都在做这个事情。

    2.开放平台面向的开发者和第三方独立软件开发商。我觉得开发平台最大的开放就是微信登录。当年腾讯没有花大力气去做统一登录这个事情,导致目前各个网站都要弄一套登录机制。好在他们现在认清了局势。开发者或软件开发商,通过微信开放提供的平台和接口,可以开发适合企业的电子商务网站,扫描二维码进去一个游戏界面,然后去购买商品等。当然后续开放平台要开放支付接口,那么类似口袋通这种软件开发厂商,就可以为大型,中小企业提供微信小店这种服务和软件了。

    公众平台就是服务号订阅号的管理开发后台。

    开发平台说得通俗一点就是实现手机里边安装软件的内容一键分享朋友圈;

    下面的第三方登陆就是依托于开放平台(http://open.weixin.qq.com)的功能

     

    准备工作

    网站应用微信登录是基于OAuth2.0协议标准构建的微信OAuth2.0授权登录系统。

    在进行微信OAuth2.在进行微信OAuth2.0授权登录接入之前,在微信开放平台注册开发者帐号,并拥有一个已审核通过的网站应用,并获得相应的AppID和AppSecret,申请微信登录且通过审核后,可开始接入流程。

    授权流程说明

    微信OAuth2.0授权登录让微信用户使用微信身份安全登录第三方应用或网站,在微信用户授权登录已接入微信OAuth2.0的第三方应用后,第三方可以获取到用户的接口调用凭证(access_token),通过access_token可以进行微信开放平台授权关系接口调用,从而可实现获取微信用户基本开放信息和帮助用户实现基础开放功能等。

    微信OAuth2.0授权登录目前支持authorization_code模式,适用于拥有server端的应用授权。该模式整体流程为:

      1. 第三方发起微信授权登录请求,微信用户允许授权第三方应用后,微信会拉起应用或重定向到第三方网站,并且带上授权临时票据code参数;

      2. 通过code参数加上AppID和AppSecret等,通过API换取access_token;

      3. 通过access_token进行接口调用,获取用户基本数据资源或帮助用户实现基本操作。

    获取access_token时序图:

     

    第一步:请求CODE

    第三方使用网站应用授权登录前请注意已获取相应网页授权作用域(scope=snsapi_login),则可以通过在PC端打开以下链接:
    https://open.weixin.qq.com/connect/qrconnect?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect

    若提示“该链接无法访问”,请检查参数是否填写错误,如redirect_uri的域名与审核时填写的授权域名不一致或scope不为snsapi_login。

    参数说明

    返回说明

    用户允许授权后,将会重定向到redirect_uri的网址上,并且带上code和state参数

    redirect_uri?code=CODE&state=STATE

    若用户禁止授权,则重定向后不会带上code参数,仅会带上state参数

    redirect_uri?state=STATE

    请求示例

    登录一号店网站应用

    https://passport.yhd.com/wechat/login.do

    打开后,一号店会生成state参数,跳转到
    https://open.weixin.qq.com/connect/qrconnect?appid=wxbdc5610cc59c1631&redirect_uri=https%3A%2F%2Fpassport.yhd.com%2Fwechat%2Fcallback.do&response_type=code&scope=snsapi_login&state=3d6be0a4035d839573b04816624a415e#wechat_redirect

    https://open.weixin.qq.com/connect/qrconnect?appid=wxbdc5610cc59c1631&redirect_uri=https%3A%2F%2Fpassport.yhd.com%2Fwechat%2Fcallback.do&response_type=code&scope=snsapi_login&state=eb407f95fbc413185209fd85931761c2#wechat_redirect

    微信用户使用微信扫描二维码并且确认登录后,PC端会跳转到

    https://passport.yhd.com/wechat/callback.do?code=CODE&state=3d6be0a4035d839573b04816624a415e

     

    第二种获取code的方式,支持网站将微信登录二维码内嵌到自己页面中,用户使用微信扫码授权后通过JS将code返回给网站。

    JS微信登录主要用途:网站希望用户在网站内就能完成登录,无需跳转到微信域下登录后再返回,提升微信登录的流畅性与成功率。 网站内嵌二维码微信登录JS实现办法:

    步骤1:在页面中先引入如下JS文件(支持https):

    <scriptsrc="http://res.wx.qq.com/connect/zh_CN/htmledition/js/wxLogin.js"></script>

    步骤2:在需要使用微信登录的地方实例以下JS对象:

    varobj = new WxLogin({
    
                             id:"login_container", 
    
                             appid: "", 
    
                             scope: "", 
    
                             redirect_uri: "",
    
                             state: "",
    
                             style: "",
    
                             href: ""
    
                           });

    参数说明

    第二步:通过code获取access_token

    通过code获取access_token

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

    参数说明

    返回说明

    正确的返回:

    {
    "access_token":"ACCESS_TOKEN",
    "expires_in":7200,
    "refresh_token":"REFRESH_TOKEN",
    "openid":"OPENID",
    "scope":"SCOPE","unionid":"o6_bmasdasdsad6_2sgVt7hMZOPfL"}

    错误返回样例:

    {"errcode":40029,"errmsg":"invalidcode"}

    刷新access_token有效期

    access_token是调用授权关系接口的调用凭证,由于access_token有效期(目前为2个小时)较短,当access_token超时后,可以使用refresh_token进行刷新,access_token刷新结果有两种:

    1. 若access_token已超时,那么进行refresh_token会获取一个新的access_token,新的超时时间;

    2. 若access_token未超时,那么进行refresh_token不会改变access_token,但超时时间会刷新,相当于续期access_token。

    refresh_token拥有较长的有效期(30天),当refresh_token失效的后,需要用户重新授权。

    请求方法

    获取第一步的code后,请求以下链接进行refresh_token:

    https://api.weixin.qq.com/sns/oauth2/refresh_token?appid=APPID&grant_type=refresh_token&refresh_token=REFRESH_TOKEN

    参数说明

    返回说明

    正确的返回:

    {
    "access_token":"ACCESS_TOKEN",
    "expires_in":7200,
    "refresh_token":"REFRESH_TOKEN",
    "openid":"OPENID",
    "scope":"SCOPE"
    }

    返回说明

    正确的返回:

    {
    "access_token":"ACCESS_TOKEN",
    "expires_in":7200,
    "refresh_token":"REFRESH_TOKEN",
    "openid":"OPENID",
    "scope":"SCOPE"
    }

    错误返回样例:

    {"errcode":40030,"errmsg":"invalidrefresh_token"}

    注意:

    1、Appsecret是应用接口使用密钥,泄漏后将可能导致应用数据泄漏、应用的用户数据泄漏等高风险后果;存储在客户端,极有可能被恶意窃取(如反编译获取Appsecret);

    2、access_token为用户授权第三方应用发起接口调用的凭证(相当于用户登录态),存储在客户端,可能出现恶意获取access_token 后导致的用户数据泄漏、用户微信相关接口功能被恶意发起等行为;

    3、refresh_token为用户授权第三方应用的长效凭证,仅用于刷新access_token,但泄漏后相当于access_token 泄漏,风险同上。

    建议将secret、用户数据(如access_token)放在App云端服务器,由云端中转接口调用请求。

    第三步:通过access_token调用接口

    获取access_token后,进行接口调用,有以下前提:

    1. access_token有效且未超时;

    2. 微信用户已授权给第三方应用帐号相应接口作用域(scope)。

    对于接口作用域(scope),能调用的接口有以下:

    其中snsapi_base属于基础接口,若应用已拥有其它scope权限,则默认拥有snsapi_base的权限。使用snsapi_base可以让移动端网页授权绕过跳转授权登录页请求用户授权的动作,直接跳转第三方网页带上授权临时票据(code),但会使得用户已授权作用域(scope)仅为snsapi_base,从而导致无法获取到需要用户授权才允许获得的数据和基础功能。

    F.A.Q

    1.什么是授权临时票据(code)?

    答:第三方通过code进行获取access_token的时候需要用到,code的超时时间为10分钟,一个code只能成功换取一次access_token即失效。code的临时性和一次保障了微信授权登录的安全性。第三方可通过使用https和state参数,进一步加强自身授权登录的安全性。

    2.什么是授权作用域(scope)?

    答:授权作用域(scope)代表用户授权给第三方的接口权限,第三方应用需要向微信开放平台申请使用相应scope的权限后,使用文档所述方式让用户进行授权,经过用户授权,获取到相应access_token后方可对接口进行调用。

    3.网站内嵌二维码微信登录JS代码中style字段作用?

    答:第三方页面颜色风格可能为浅色调或者深色调,若第三方页面为浅色背景,style字段应提供"black"值(或者不提供,black为默认值),则对应的微信登录文字样式为黑色。相关效果如下:

    若提供"white"值,则对应的文字描述将显示为白色,适合深色背景。相关效果如下:

     

    4.网站内嵌二维码微信登录JS代码中href字段作用?

    答:如果第三方觉得微信团队提供的默认样式与自己的页面样式不匹配,可以自己提供样式文件来覆盖默认样式。举个例子,如第三方觉得默认二维码过大,可以提供相关css样式文件,并把链接地址填入href字段

    .impowerBox .qrcode {width:200px;}
    .impowerBox .title {display: none;}
    .impowerBox .info {width: 200px;}
    .status_icon {display:none}
    .impowerBox .status {text-align: center;}

    相关效果如下:

     

    获取用户个人信息(UnionID机制)

    接口说明

    此接口用于获取用户个人信息。开发者可通过OpenID来获取用户基本信息。特别需要注意的是,如果开发者拥有多个移动应用、网站应用和公众帐号,可通过获取用户基本信息中的unionid来区分用户的唯一性,因为只要是同一个微信开放平台帐号下的移动应用、网站应用和公众帐号,用户的unionid是唯一的。换句话说,同一用户,对同一个微信开放平台下的不同应用,unionid是相同的。

    请求说明

    http请求方式: GET

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

    参数说明

    返回说明

    正确的Json返回结果:

    {
    "openid":"OPENID",
    "nickname":"NICKNAME",
    "sex":1,
    "province":"PROVINCE",
    "city":"CITY",
    "country":"COUNTRY",
    "headimgurl":"http://wx.qlogo.cn/mmopen/g3MonUZtNHkdmzicIlibx6iaFqAc56vxLSUfpb6n5WKSYVY0ChQKkiaJSgQ1dZuTOgvLLrhJbERQQ4eMsv84eavHiaiceqxibJxCfHe/0",
    "privilege":[
    "PRIVILEGE1",
    "PRIVILEGE2"
    ],
    "unionid": " o6_bmasdasdsad6_2sgVt7hMZOPfL"

    }

    错误的Json返回示例:

    {
    "errcode":40003,"errmsg":"invalid openid"
    }

    调用频率限制

    代码示例:

    第三方发起微信授权登录请求,微信用户允许授权第三方应用后,微信会拉起应用或重定向到第三方网站,并且带上授权临时票据code参数;

    通过code参数加上AppID和AppSecret等,通过API换取access_token;

    通过access_token进行接口调用,获取用户基本数据资源或帮助用户实现基本操作。

    Login.php如下:

    返回  code state*/
    
    
    $appid = 'wxea1xxxxxxxx20cb62';
    
    
    $url = "https://open.weixin.qq.com/connect/qrconnect?appid=$appid&redirect_uri=http://zhiliaoke.com.cn/weixin.php&response_type=code&scope=snsapi_login&state=1&connect_redirect=1#wechat_redirect"; 

    header('location:'.$url);

    验证处理如下:

    <?php
    
    
    $code = $_GET['code'];
    
    
    $state = $_GET['state'];//换成自己的接口信息
    
    
    $appid = 'XXXXX';
    
    
    $appsecret = 'XXXXX';
    
    
    if (empty($code)) $this->error('授权失败');
    
    
    <br>
    
    
    $token_url = 'https://api.weixin.qq.com/sns/oauth2/access_token?appid='.$appid.'&secret='.$appsecret.'&code='.$code.'&grant_type=authorization_code';
    
    
    $token = json_decode(file_get_contents($token_url));
    
    
    if (isset($token->errcode)) {
    
    
    echo '<h1>错误:</h1>'.$token->errcode;
    
    
    echo '<br/><h2>错误信息:</h2>'.$token->errmsg;
    
    
    exit;
    
    
    }
    
    
    <br>
    
    
    $access_token_url = 'https://api.weixin.qq.com/sns/oauth2/refresh_token?appid='.$appid.'&grant_type=refresh_token&refresh_token='.$token->refresh_token;//转成对象
    
    
    $access_token = json_decode(file_get_contents($access_token_url));
    
    
    if (isset($access_token->errcode)) {
    
    
    echo '<h1>错误:</h1>'.$access_token->errcode;
    
    
    echo '<br/><h2>错误信息:</h2>'.$access_token->errmsg;
    
    
    exit;
    
    
    }
    
    
    <br>
    
    
    <br>
    
    
    $user_info_url = 'https://api.weixin.qq.com/sns/userinfo?access_token='.$access_token->access_token.'&openid='.$access_token->openid.'&lang=zh_CN';//转成对象
    
    
    $user_info = json_decode(file_get_contents($user_info_url));
    
    
    if (isset($user_info->errcode)) {
    
    
    echo '<h1>错误:</h1>'.$user_info->errcode;
    
    
    echo '<br/><h2>错误信息:</h2>'.$user_info->errmsg;
    
    
    exit;
    
    
    }
    
    
    $rs =  json_decode(json_encode($user_info),true);//返回的json数组转换成array数组
    
    
    //打印用户信息echo '<pre>';
    
    
    <br>
    
    
    print_r($rs);echo '</pre>';
    
    
    <br>
    
    
    ?>

    微信第三方登录(静默授权和非静默授权)

    用户在微信客户端中访问第三方网页,公众号可以通过微信网页授权机制,来获取用户基本信息,进而实现业务逻辑。

    微信的授权登录在日常应用中应用的非常广泛,越来越多的平台支持用户使用微信进行授权第三方登录

    使用微信授权登录有哪些优势/好处;

    1、用户量足够大,基本所有用户都会有微信,登录起来比较方便快捷;

    2、微信作为一个开放平台,为众多公众号/服务开放了许多服务接口,让公众号能够为自己的用户提供更加个性、更加优质的产品服务;

    open id 和 union id ,这两个id有什么区别;

    1、openid:在关注者与公众号产生消息交互后,公众号可获得关注者的openid,同一个用户,在不同公众号或移动应用下对应有不同open id标识;

    2、union id:同一个用户,在不同公众号或移动应用下unionID相同;前提是,如若需要做多个公众号以及移动应用账户互通,得到唯一身份标识union id,则需要将多个公众号或移动应用在微信开放平台进行绑定,然后我们才能给拿到unionid;

    所以,如果某个应用或者服务,有联合登录甚至多个公众应用多账户互通,可以采用union id来进行账户体系的用户识别与合并;即微信平台可以通过union id 来进行基于多个公众号之间的账户体系互通与识别合并;

    微信联合登录是怎么登录的,有几种登录方式;微信联合登录和微信授权登录【授权登录(非静默授权)与静默授权】

    微信联合登录;也就是我们常用的微信移动端/PC端之间的扫码登录,PC端用微信扫码登录,微信移动端确认授权登录后,应用可以从微信拿到用户的open id或union id,将微信获取的用户信息与自己账户体系中的用户身份进行关联;

    授权登录:需要用户确认登录,这样可以通过用户的个人确认,获取用户全面的信息,无论是否关注相关微信公众号等都可以获取。

    静默授权不需要用户确认,只需要用户访问某个网页,属于嵌套在普通网页里的授权形式,但是只能获取到用户的唯一标示openid和union id,无法拿到用户的微信头像、微信名称等个人信息,对于用户的简单认证还是很有用的。

    如何通过微信账户体系来做多应用、多平台之间的账户互通体系;如果某个服务同时分布在多个公众号中,账户体系如何建立;如何做到用户身份唯一识别;

    1)、同一用户不同公众号/应用下open id不同,同一用户不同公众号/应用下unionid相同;

    2)、建立应用账户体系时,通过union来进行多应用/平台之间的用户账户体系识别与合并;

    3)、多应用/平台建立账户体系时,需要做到唯一user id对应唯一union id;

    某个服务,包括移动app端、PC网页端、公众号端服务,那么用户使用微信授权登录的数据流转流程是怎么样的;

    1、用户通过微信授权移动app服务;该应用服务即可通过接口获取用户的union id,这个时候,如果在数据库中没有查到该id,则识别为新用户,直接创建一个user id,该唯一user id与union id 对应;

    2、用户通过微信扫码PC端授权联合登陆获取PC端服务;该应用服务即可通过接口获取用户的union id,这个时候,在数据库中查到有这个id,就会把pc登录这个账户合并到之前创建的唯一user id账户下;

    3、用户通过关注该服务公众号,用微信授权登录公众号服务;该应用服即可通过接口获取用户的union id,这个时候,在数据库中查到有这个id,就会把公众号中登录的这个账户合并到之前创建的唯一user id账户下;

    网页授权的两种scope的区别说明:

    1、授权登录以snsapi_base为scope发起的网页授权,是用来获取进入页面的用户的openid的,并且是静默授权并自动跳转到回调页的。用户感知的就是直接进入了回调页(往往是业务页面)特点:用户无感知;

    2、静默授权以snsapi_userinfo为scope发起的网页授权,是用来获取用户的基本信息的。但这种授权需要用户手动同意,并且由于用户同意过,所以无须关注,就可在授权后获取该用户的基本信息。

    特殊场景下静默授权:

    对于已关注公众号的用户,如果用户从公众号的会话或者自定义菜单进入本公众号的网页授权页,即使是scope为snsapi_userinfo,也是静默授权,用户无感知。

    网页授权流程:

    1、引导用户进入授权页面同意授权,获取code

    确保微信公众账号拥有授权作用域(scope参数)的权限的前提下引导用户去授权页面

    参考链接:

    scope为snsapi_base

    注意:appid,redirect_uri,state这些要和后台协商好

    https://open.weixin.qq.com/connect/oauth2/authorize?appid="+wx_appid+"&redirect_uri="+api.wx_reg+"&response_type=code&scope=snsapi_login,snsapi_userinfo&state=1,0#wechat_redirect

    scope为snsapi_userinfo

    https://open.weixin.qq.com/connect/oauth2/authorize?appid="+wx_appid+"&redirect_uri="+api.wx_reg+"&response_type=code&scope=snsapi_base,snsapi_userinfo&state=1,0#wechat_redirect

     

     

    用户同意授权后

    如果用户同意授权,页面将跳转至 redirect_uri/?code=CODE&state=STATE。

    2、通过code换取网页授权access_token(后台操作)

    页面跳回跳的url上redirect_uri/?code=CODE&state=STATE。code

    通过code换取的是网页授权access_token,如果网页授权的作用域为snsapi_base,则本步骤中获取到网页授权access_token的同时,也获取到了openid,snsapi_base式的网页授权流程即到此为止。

    3:需要个人信息。后台通过code得到值之后返回给前端去操作

    以上就是PHP实现微信网页登陆授权开发的详细内容

    以上内容希望帮助到大家,很多PHPer在进阶的时候总会遇到一些问题和瓶颈,业务代码写多了没有方向感,不知道该从那里入手去提升,对此我整理了一些资料,包括但不限于:分布式架构、高可扩展、高性能、高并发、服务器性能调优、TP6,laravel,YII2,Redis,Swoole、Swoft、Kafka、Mysql优化、shell脚本、Docker、微服务、Nginx等多个知识点高级进阶干货需要的可以免费分享给大家,需要的可以加入我的官方群点击此处

    展开全文
  • 微信统一的账号说明

    2019-07-10 19:18:27
    - 微信统一的账号说明 1. appid,secret 每个小程序唯一秘钥2. 前端wx.login 传入后台code(有效期五... unionid:多个应用的用户的唯一表示标示(APP,小程序,公众号),需要在微信开放平台帐号下进行关联 转载...
  • 微信公众平台开发——微信授权登录(OAuth2.0) 1、OAuth2.0简介  OAuth(开放授权)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表),而无需将用户名...
  • 1、OAuth2.0 OAuth(开放授权)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方应用。 允许用户提供一个令牌,而...
  • 微信公众号开发入门

    2018-03-11 18:59:25
    感谢Worktile的投稿,他的博客:...而微信推出的公众号开发功能,为我们码农带来很大的方便,让我们创造出更多的可能性。今天,就结合自己的些许经验,跟大家分享下有关公众号开发的操作。而对于大部分的开发...
1 2 3 4 5 ... 20
收藏数 1,328
精华内容 531
关键字:

微信开发平台 用户统一标示