微信开发code多长时间_微信小程序code 微信文档 - CSDN
  • 微信公众号开发过程中要获取用户信息,需要通过OAuth2.0机制获得code,然后用code换取openID。 1、先确定自己的回调地址,下面拼接地址时需要用到,这里我用REDIRECT_URI代替。 2、拼接地址,如下,细心点看: ...

    微信公众号开发过程中要获取用户信息,需要通过OAuth2.0机制获得code,然后用code换取openID。

    1、先确定自己的回调地址,下面拼接地址时需要用到,这里我用REDIRECT_URI代替。

    2、拼接地址,如下,细心点看:

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

    3、让用户主动点击访问这个地址。就像上面那种。

     

    4、微信会自动授权,通过授权后,会自动跳转并传输code参数过来。你只要在第一步的回调地址中接收这个code即可。

     

    PHP接收code例子:

    $code = $_GET["code"];


    接收到code。

    然后就是换取openID过程了。

    展开全文
  • 最近开发微信客户端项目时遇到

    最近开发微信客户端项目时遇到code返回码请求两次,导致获取openid失败的情况,

    特此一记帮助看到的同学节约一点点的时间,引用微信文档的一段说明(详细参考点击):

    用户同意授权,获取code

    在确保微信公众账号拥有授权作用域(scope参数)的权限的前提下(服务号获得高级接口后,默认带有scope参数中的snsapi_base和snsapi_userinfo),引导关注者打开如下页面:

    https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect
    若提示“该链接无法访问”,请检查参数是否填写错误,是否拥有scope参数对应的授权作用域权限。
    参考链接(请在微信客户端中打开此链接体验)
    Scope为snsapi_base
    https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx520c15f417810387&redirect_uri=http%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
    关键点请注意红色的地方,个人猜测可能微信内部有针对appid、redirecturi以及state做缓存机制优化处理,导致同一账号修改OAuth2.0网页授权地址后出现重复请求2次的情况,修改定义state参数即可达到目的如(state随机生成,当然有特殊目的验证的同学自己设定也可以):

    	public String convertOAuthHref(String href) {
    		//return href;
    		StringBuffer str = new StringBuffer("https://open.weixin.qq.com/connect/oauth2/authorize");
    		str.append("?appid=").append(appId);
    		str.append("&redirect_uri=").append(href);
    		/*try {
    			str.append("&redirect_uri=").append(URLEncoder.encode(href, "UTF-8"));
    		} catch (Exception e) {
    			// 
    		}*/
    		str.append("&response_type=code");
    		str.append("&scope=snsapi_base");
    		str.append("&state=" + new Random().nextInt(10000));
    		str.append("#wechat_redirect");
    		return str.toString();
    	}


    展开全文
  • 微信开发时候在做消息接口交互的时候需要使用带微信加密ID(OpenId),下面讲讲述2中类型方式获取微信OpenID,接收事件推送方式和网页授权获取用户基本信息方式获取。

    在微信开发时候在做消息接口交互的时候需要使用带微信加密ID(OpenId),下面讲讲述2中类型方式获取微信OpenID,接收事件推送方式和网页授权获取用户基本信息方式获取。

    1、通过接收被动消息方式获取OpenId(接收事件推送方式),以下事件中都可以获取到OpenID

    关注/取消关注事件

    用户在关注与取消关注公众号时,微信会把这个事件推送到开发者填写的URL。方便开发者给用户下发欢迎消息或者做帐号的解绑。

    微信服务器在五秒内收不到响应会断掉连接,并且重新发起请求,总共重试三次

    关于重试的消息排重,推荐使用FromUserName + CreateTime 排重。

    假如服务器无法保证在五秒内处理并回复,可以直接回复空串,微信服务器不会对此作任何处理,并且不会发起重试。

    推送XML数据包示例:

    <xml>
    <ToUserName><![CDATA[toUser]]></ToUserName>
    <FromUserName><![CDATA[FromUser]]></FromUserName>
    <CreateTime>123456789</CreateTime>
    <MsgType><![CDATA[event]]></MsgType>
    <Event><![CDATA[subscribe]]></Event>
    </xml>
    

    参数说明:

    参数描述
    ToUserName开发者微信号
    FromUserName发送方帐号(一个OpenID)
    CreateTime消息创建时间 (整型)
    MsgType消息类型,event
    Event事件类型,subscribe(订阅)、unsubscribe(取消订阅)

    使用网页调试工具调试该接口

    扫描带参数二维码事件

    用户扫描带场景值二维码时,可能推送以下两种事件:

    1. 如果用户还未关注公众号,则用户可以关注公众号,关注后微信会将带场景值关注事件推送给开发者。
    2. 如果用户已经关注公众号,则微信会将带场景值扫描事件推送给开发者。

    1. 用户未关注时,进行关注后的事件推送

    推送XML数据包示例:

    <xml><ToUserName><![CDATA[toUser]]></ToUserName>
    <FromUserName><![CDATA[FromUser]]></FromUserName>
    <CreateTime>123456789</CreateTime>
    <MsgType><![CDATA[event]]></MsgType>
    <Event><![CDATA[subscribe]]></Event>
    <EventKey><![CDATA[qrscene_123123]]></EventKey>
    <Ticket><![CDATA[TICKET]]></Ticket>
    </xml>
    

    参数说明:

    参数描述
    ToUserName开发者微信号
    FromUserName发送方帐号(一个OpenID)
    CreateTime消息创建时间 (整型)
    MsgType消息类型,event
    Event事件类型,subscribe
    EventKey事件KEY值,qrscene_为前缀,后面为二维码的参数值
    Ticket二维码的ticket,可用来换取二维码图片

    2. 用户已关注时的事件推送

    推送XML数据包示例:

    <xml>
    <ToUserName><![CDATA[toUser]]></ToUserName>
    <FromUserName><![CDATA[FromUser]]></FromUserName>
    <CreateTime>123456789</CreateTime>
    <MsgType><![CDATA[event]]></MsgType>
    <Event><![CDATA[SCAN]]></Event>
    <EventKey><![CDATA[SCENE_VALUE]]></EventKey>
    <Ticket><![CDATA[TICKET]]></Ticket>
    </xml>
    

    参数说明:

    参数描述
    ToUserName开发者微信号
    FromUserName发送方帐号(一个OpenID)
    CreateTime消息创建时间 (整型)
    MsgType消息类型,event
    Event事件类型,SCAN
    EventKey事件KEY值,是一个32位无符号整数,即创建二维码时的二维码scene_id
    Ticket二维码的ticket,可用来换取二维码图片

    使用网页调试工具调试该接口

    上报地理位置事件

    用户同意上报地理位置后,每次进入公众号会话时,都会在进入时上报地理位置,或在进入会话后每5秒上报一次地理位置,公众号可以在公众平台网站中修改以上设置。上报地理位置时,微信会将上报地理位置事件推送到开发者填写的URL。

    推送XML数据包示例:

    <xml>
    <ToUserName><![CDATA[toUser]]></ToUserName>
    <FromUserName><![CDATA[fromUser]]></FromUserName>
    <CreateTime>123456789</CreateTime>
    <MsgType><![CDATA[event]]></MsgType>
    <Event><![CDATA[LOCATION]]></Event>
    <Latitude>23.137466</Latitude>
    <Longitude>113.352425</Longitude>
    <Precision>119.385040</Precision>
    </xml>
    

    参数说明:

    参数描述
    ToUserName开发者微信号
    FromUserName发送方帐号(一个OpenID)
    CreateTime消息创建时间 (整型)
    MsgType消息类型,event
    Event事件类型,LOCATION
    Latitude地理位置纬度
    Longitude地理位置经度
    Precision地理位置精度

    使用网页调试工具调试该接口

    自定义菜单事件

    用户点击自定义菜单后,微信会把点击事件推送给开发者,请注意,点击菜单弹出子菜单,不会产生上报。

    点击菜单拉取消息时的事件推送

    推送XML数据包示例:

    <xml>
    <ToUserName><![CDATA[toUser]]></ToUserName>
    <FromUserName><![CDATA[FromUser]]></FromUserName>
    <CreateTime>123456789</CreateTime>
    <MsgType><![CDATA[event]]></MsgType>
    <Event><![CDATA[CLICK]]></Event>
    <EventKey><![CDATA[EVENTKEY]]></EventKey>
    </xml>
    

    参数说明:

    参数描述
    ToUserName开发者微信号
    FromUserName发送方帐号(一个OpenID)
    CreateTime消息创建时间 (整型)
    MsgType消息类型,event
    Event事件类型,CLICK
    EventKey事件KEY值,与自定义菜单接口中KEY值对应


    点击菜单跳转链接时的事件推送

    推送XML数据包示例:

    <xml>
    <ToUserName><![CDATA[toUser]]></ToUserName>
    <FromUserName><![CDATA[FromUser]]></FromUserName>
    <CreateTime>123456789</CreateTime>
    <MsgType><![CDATA[event]]></MsgType>
    <Event><![CDATA[VIEW]]></Event>
    <EventKey><![CDATA[www.qq.com]]></EventKey>
    </xml>
    

    参数说明:

    参数描述
    ToUserName开发者微信号
    FromUserName发送方帐号(一个OpenID)
    CreateTime消息创建时间 (整型)
    MsgType消息类型,event
    Event事件类型,VIEW
    EventKey事件KEY值,设置的跳转URL

    使用网页调试工具调试该接口

     以上信息摘自微信公众平台接收事件推送章节。点击查看原始帮助文档-接收事件推送


    2、通过第三方网页授权方式获取OpenID,采用第三方网页授权(OAuth2.0授权登录)

    如果用户在微信中(Web微信除外)访问公众号的第三方网页,公众号开发者可以通过此接口获取当前用户基本信息(包括昵称、性别、城市、国家)。利用用户信息,可以实现体验优化、用户来源统计、帐号绑定、用户身份鉴权等功能。请注意,“获取用户基本信息接口是在用户和公众号产生消息交互时,才能根据用户OpenID获取用户基本信息,而网页授权的方式获取用户基本信息,则无需消息交互,只是用户进入到公众号的网页,就可弹出请求用户授权的界面,用户授权后,就可获得其基本信息(此过程甚至不需要用户已经关注公众号。)”

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

    在微信公众号请求用户网页授权之前,开发者需要先到公众平台网站的我的服务页中配置授权回调域名。请注意,这里填写的域名不要加http://

    关于配置授权回调域名的说明:

    授权回调域名配置规范为全域名,比如需要网页授权的域名为:www.qq.com,配置以后此域名下面的页面http://www.qq.com/music.htmlhttp://www.qq.com/login.html 都可以进行OAuth2.0鉴权。但http://pay.qq.comhttp://music.qq.comhttp://qq.com  无法进行OAuth2.0鉴权。
    

    具体而言,网页授权流程分为四步:

    1. 引导用户进入授权页面同意授权,获取code
    2. 通过code换取网页授权access_token(与基础支持中的access_token不同)
    3. 如果需要,开发者可以刷新网页授权access_token,避免过期
    4. 通过网页授权access_token和openid获取用户基本信息

    目录

    [隐藏]

    第一步:用户同意授权,获取code

    在确保微信公众账号拥有授权作用域(scope参数)的权限的前提下(服务号获得高级接口后,默认带有scope参数中的snsapi_base和snsapi_userinfo),引导关注者打开如下页面:

    https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect
    若提示“该链接无法访问”,请检查参数是否填写错误,是否拥有scope参数对应的授权作用域权限。
    
    参考链接(请在微信客户端中打开此链接体验)
    Scope为snsapi_base
    https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx520c15f417810387&redirect_uri=http%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
    

    参数说明

    参数是否必须说明
    appid公众号的唯一标识
    redirect_uri授权后重定向的回调链接地址,请使用urlencode对链接进行处理
    response_type返回类型,请填写code
    scope应用授权作用域,snsapi_base (不弹出授权页面,直接跳转,只能获取用户openid),snsapi_userinfo (弹出授权页面,可通过openid拿到昵称、性别、所在地。并且,即使在未关注的情况下,只要用户授权,也能获取其信息
    state重定向后会带上state参数,开发者可以填写a-zA-Z0-9的参数值
    #wechat_redirect无论直接打开还是做页面302重定向时候,必须带此参数

    下图为scope等于snsapi_userinfo时的授权页面:

    网页授权

    用户同意授权后

    如果用户同意授权,页面将跳转至 redirect_uri/?code=CODE&state=STATE。若用户禁止授权,则重定向后不会带上code参数,仅会带上state参数redirect_uri?state=STATE

    code说明 :
    code作为换取access_token的票据,每次用户授权带上的code将不一样,code只能使用一次,5分钟未被使用自动过期。
    

    第二步:通过code换取网页授权access_token

    首先请注意,这里通过code换取的网页授权access_token,与基础支持中的access_token不同。公众号可通过下述接口来获取网页授权access_token。如果网页授权的作用域为snsapi_base,则本步骤中获取到网页授权access_token的同时,也获取到了openid,snsapi_base式的网页授权流程即到此为止。

    请求方法

    获取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

    返回说明

    正确时返回的JSON数据包如下:

    {
       "access_token":"ACCESS_TOKEN",
       "expires_in":7200,
       "refresh_token":"REFRESH_TOKEN",
       "openid":"OPENID",
       "scope":"SCOPE"
    }
    
    参数描述
    access_token网页授权接口调用凭证,注意:此access_token与基础支持的access_token不同
    expires_inaccess_token接口调用凭证超时时间,单位(秒)
    refresh_token用户刷新access_token
    openid用户唯一标识,请注意,在未关注公众号时,用户访问公众号的网页,也会产生一个用户和公众号唯一的OpenID
    scope用户授权的作用域,使用逗号(,)分隔


    错误时微信会返回JSON数据包如下(示例为Code无效错误):

    {"errcode":40029,"errmsg":"invalid code"}
    

    全局返回码说明

    第三步:刷新access_token(如果需要)

    由于access_token拥有较短的有效期,当access_token超时后,可以使用refresh_token进行刷新,refresh_token拥有较长的有效期(7天、30天、60天、90天),当refresh_token失效的后,需要用户重新授权。

    请求方法

    获取第二步的refresh_token后,请求以下链接获取access_token: 
    https://api.weixin.qq.com/sns/oauth2/refresh_token?appid=APPID&grant_type=refresh_token&refresh_token=REFRESH_TOKEN
    
    参数是否必须说明
    appid公众号的唯一标识
    grant_type填写为refresh_token
    refresh_token填写通过access_token获取到的refresh_token参数

    返回说明

    正确时返回的JSON数据包如下:

    {
       "access_token":"ACCESS_TOKEN",
       "expires_in":7200,
       "refresh_token":"REFRESH_TOKEN",
       "openid":"OPENID",
       "scope":"SCOPE"
    }
    
    参数描述
    access_token网页授权接口调用凭证,注意:此access_token与基础支持的access_token不同
    expires_inaccess_token接口调用凭证超时时间,单位(秒)
    refresh_token用户刷新access_token
    openid用户唯一标识
    scope用户授权的作用域,使用逗号(,)分隔


    错误时微信会返回JSON数据包如下(示例为Code无效错误):

    {"errcode":40029,"errmsg":"invalid code"}
    

    全局返回码说明

    第四步:拉取用户信息(需scope为 snsapi_userinfo)

    如果网页授权作用域为snsapi_userinfo,则此时开发者可以通过access_token和openid拉取用户信息了。

    请求方法

    http:GET(请使用https协议)
    https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN
    

    参数说明

    参数描述
    access_token网页授权接口调用凭证,注意:此access_token与基础支持的access_token不同
    openid用户的唯一标识
    lang返回国家地区语言版本,zh_CN 简体,zh_TW 繁体,en 英语

    返回说明

    正确时返回的JSON数据包如下:

    {
       "openid":" OPENID",
       " nickname": NICKNAME,
       "sex":"1",
       "province":"PROVINCE"
       "city":"CITY",
       "country":"COUNTRY",
        "headimgurl":    "http://wx.qlogo.cn/mmopen/g3MonUZtNHkdmzicIlibx6iaFqAc56vxLSUfpb6n5WKSYVY0ChQKkiaJSgQ1dZuTOgvLLrhJbERQQ4eMsv84eavHiaiceqxibJxCfHe/46", 
    	"privilege":[
    	"PRIVILEGE1"
    	"PRIVILEGE2"
        ]
    }
    
    参数描述
    openid用户的唯一标识
    nickname用户昵称
    sex用户的性别,值为1时是男性,值为2时是女性,值为0时是未知
    province用户个人资料填写的省份
    city普通用户个人资料填写的城市
    country国家,如中国为CN
    headimgurl用户头像,最后一个数值代表正方形头像大小(有0、46、64、96、132数值可选,0代表640*640正方形头像),用户没有头像时该项为空
    privilege用户特权信息,json 数组,如微信沃卡用户为(chinaunicom)


    错误时微信会返回JSON数据包如下(示例为openid无效):

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

    全局返回码说明

    附:检验授权凭证(access_token)是否有效

    请求方法

    http:GET(请使用https协议)
    https://api.weixin.qq.com/sns/auth?access_token=ACCESS_TOKEN&openid=OPENID
    

    参数说明

    参数描述
    access_token网页授权接口调用凭证,注意:此access_token与基础支持的access_token不同
    openid用户的唯一标识

    返回说明

    正确的Json返回结果:

    { "errcode":0,"errmsg":"ok"}
    

    错误时的Json返回示例:

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

     以上信息摘自微信公众平台网页授权获取用户基本信息章节。点击查看原始帮助文档-网页授权获取用户基本信息


    更多关注付义方技术博客:http://blog.csdn.net/fuyifang 本人新浪微博:http://weibo.com/i/1741159542


    展开全文
  • 以前写过一篇公众号的授权登录...1.网页授权及JS-SDK需要在企业微信上配置可信域名 2.企业微信授权登录里面填写你的可信域名 调用流程为: A) 用户访问第三方服务,第三方服务通过构造OAuth2链接...

    以前写过一篇公众号的授权登录https://blog.csdn.net/dsn727455218/article/details/65630151,今天给大家分享一下企业微信的授权登录。

    大致都差不多流程

    注意事项:

    1.网页授权及JS-SDK需要在企业微信上配置可信域名

    2.企业微信授权登录里面填写你的可信域名

    调用流程为:
    A) 用户访问第三方服务,第三方服务通过构造OAuth2链接(参数包括当前第三方服务的身份ID,以及重定向URI),将用户引导到认证服务器的授权页
    B) 用户选择是否同意授权
    C) 若用户同意授权,则认证服务器将用户重向到第一步指定的重定向URI,同时附上一个授权码。
    D) 第三方服务收到授权码,带上授权码来源的重定向URI,向认证服务器申请凭证。
    E) 认证服务器检查授权码和重定向URI的有效性,通过后颁发AccessToken(调用凭证)

    企业微信OAuth2接入流程

    使用OAuth2前须知

    关于网页授权的可信域名

    REDIRECT_URL中的域名,需要先配置至应用的“可信域名”,否则跳转时会提示“redirect_uri参数错误”。
    要求配置的可信域名,必须与访问链接的域名完全一致。举个例子:

    • 假定重定向访问的链接是:http://mail.qq.com:8080/cgi-bin/helloworld:
    配置域名 是否正确 原因
    mail.qq.com:8080 correct 配置域名与访问域名完全一致
    email.qq.com error 配置域名必须与访问域名完全一致
    support.mail.qq.com error 配置域名必须与访问域名完全一致
    *.qq.com error 不支持泛域名设置
    mail.qq.com error 配置域名必须与访问域名完全一致,包括端口号
    • 假定配置的可信域名是 mail.qq.com:
    访问链接 是否正确 原因
    https://mail.qq.com/cgi-bin/helloworld correct 配置域名与访问域名完全一致
    http://mail.qq.com/cgi-bin/redirect correct 配置域名与访问域名完全一致,与协议头/链接路径无关
    https://exmail.qq.com/cgi-bin/helloworld error 配置域名必须与访问域名完全一致

    关于UserID机制

    UserId用于在一个企业内唯一标识一个用户,通过网页授权接口可以获取到当前用户的UserId信息,如果需要获取用户的更多信息可以调用 通讯录管理 - 成员接口 来获取。

    缓存方案建议

    通过OAuth2.0验证接口获取成员身份会有一定的时间开销。对于频繁获取成员身份的场景,建议采用如下方案:
    1、企业应用中的URL链接直接填写企业自己的页面地址
    2、成员操作跳转到步骤1的企业页面时,企业后台校验是否有标识成员身份的cookie信息,此cookie由企业生成
    3、如果没有匹配的cookie,则重定向到OAuth验证链接,获取成员的身份信息后,由企业后台植入标识成员身份的cookie信息
    4、根据cookie获取成员身份后,再进入相应的页面

    构造网页授权链接

    如果企业需要在打开的网页里面携带用户的身份信息,第一步需要构造如下的链接来获取code参数:

    
     
    1. https://open.weixin.qq.com/connect/oauth2/authorize?appid=CORPID&redirect_uri=REDIRECT_URI&response_type=code&scope=snsapi_base&state=STATE#wechat_redirect

    参数说明:

    参数 必须 说明
    appid 企业的CorpID
    redirect_uri 授权后重定向的回调链接地址,请使用urlencode对链接进行处理
    response_type 返回类型,此时固定为:code
    scope

    应用授权作用域。

    snsapi_base:静默授权,可获取成员的基础信息;
    snsapi_userinfo:静默授权,可获取成员的详细信息,但不包含手机、邮箱;
    snsapi_privateinfo:手动授权,可获取成员的详细信息,包含手机、邮箱。

    state 重定向后会带上state参数,企业可以填写a-zA-Z0-9的参数值,长度不可超过128个字节
    #wechat_redirect 终端使用此参数判断是否需要带上身份信息
    agentid 企业应用的id。
    当scope是snsapi_userinfo或snsapi_privateinfo时,该参数必填。
    注意redirect_uri的域名必须与该应用的可信域名一致。


    员工点击后,页面将跳转至 redirect_uri?code=CODE&state=STATE,企业可根据code参数获得员工的userid。code长度最大为512字节。

    权限说明:
    企业无限制;第三方使用snsapi_privateinfo的scope时,应用必须有’成员敏感信息授权’的权限。

    根据code获取成员信息
    请求方式:GET(HTTPS)
    请求地址:https://qyapi.weixin.qq.com/cgi-bin/user/getuserinfo?access_token=ACCESS_TOKEN&code=CODE

    参数说明:

    参数    必须    说明
    access_token    是    调用接口凭证
    code    是    通过成员授权获取到的code,最大为512字节。每次成员授权带上的code将不一样,code只能使用一次,5分钟未被使用自动过期。

    权限说明:
    跳转的域名须完全匹配access_token对应应用的可信域名。

    返回结果:
    a) 当用户为企业成员时返回示例如下:

    {
    "errcode":0,
    "errmsg":"ok",
    "UserId":"USERID",
    "DeviceId":"DEVICEID",
    "user_ticket":"USER_TICKET",
    "expires_in":7200
    }

    参数    说明
    errcode    返回码
    errmsg    对返回码的文本描述内容
    UserId    成员UserID
    DeviceId    手机设备号(由企业微信在安装时随机生成,删除重装会改变,升级不受影响)
    user_ticket    成员票据,最大为512字节。
    scope为snsapi_userinfo或snsapi_privateinfo,且用户在应用可见范围之内时返回此参数。
    后续利用该参数可以获取用户信息或敏感信息。
     
    expires_in    user_token的有效时间(秒),随user_ticket一起返回
    非企业成员授权时返回示例如下:

    {
    "errcode":0,
    "errmsg":"ok",
    "OpenId":"OPENID",
    "DeviceId":"DEVICEID"
    }


    参数    说明
    errcode    返回码
    errmsg    对返回码的文本描述内容
    OpenId    非企业成员的标识,对当前企业唯一
    DeviceId    手机设备号(由企业微信在安装时随机生成,删除重装会改变,升级不受影响)
    出错返回示例:

    {
    "errcode":40029,
    "errmsg":"invalid code"
    }
     

    实现代码:

    package com.eqiao.bidata.weixin.controller;
     
    import com.eqiao.bidata.weixin.common.AccessToken;
    import com.eqiao.bidata.weixin.common.Result;
    import com.eqiao.bidata.weixin.common.WeiXinQiYeConstants;
    import com.eqiao.bidata.weixin.common.WeiXinQiYeUtil;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestParam;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpSession;
    import java.io.UnsupportedEncodingException;
     
    /**
     * 单纯实现OAuth2验证,不使用注解及拦截器
     * Created by zhaoxinguo on 2017/7/11.
     */
    @Controller
    public class SimpleOAuth2Controller {
     
        private Logger logger = LoggerFactory.getLogger(SimpleOAuth2Controller.class);
     
        /**
         * 拼接网页授权链接
         * 此处步骤也可以用页面链接代替
         * @return
         */
        @RequestMapping(value = { "/oauth2wx.do" })
        public String Oauth2API(HttpServletRequest request){
            //获取项目域名
            String requestUrl = request.getServerName();
            String contextPath = request.getContextPath();
            logger.info("domain name: " + requestUrl + " project name: " + contextPath);
            //拼接微信回调地址
            String backUrl ="http://" + requestUrl + contextPath + "/oauth2me.do";
            String redirect_uri = "";
            try {
                redirect_uri = java.net.URLEncoder.encode(backUrl, "utf-8");
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
                logger.error("ecdoe error: " + e.getMessage());
            }
            String oauth2Url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=" + WeiXinQiYeConstants.CORPID + "&redirect_uri=" + redirect_uri
                    + "&response_type=code&scope=snsapi_base&state=STATE#wechat_redirect";
            return "redirect:" + oauth2Url;
        }
     
        /**
         * 授权回调请求处理
         * @return
         */
        @RequestMapping(value = { "/oauth2me.do" })
        public String oAuth2Url(HttpServletRequest request, @RequestParam String code){
            // 调用获取access_token的接口
            AccessToken accessToken = WeiXinQiYeUtil.access_token();
            HttpSession session = request.getSession();
            if (accessToken != null && accessToken.getAccess_token() != null) {
                // 调用获取用户信息的接口
                String UserId = getMemberGuidByCode(accessToken.getAccess_token(), code, WeiXinQiYeConstants.AGENTID);
                logger.info("UserId: " + UserId);
                if (UserId != null) {
                    session.setAttribute("UserId", UserId);
                    logger.info("UserId放入session成功!");
                }
            }
            // 这里简单处理,存储到session中
            return "user/result";
        }
     
        /**
         * 调用接口获取用户信息
         *
         * @param token
         * @param code
         * @return
         */
        public String getMemberGuidByCode(String token, String code, String agentId) {
            logger.info("code==" + code + " token=" + token + " agentId=" +agentId);
            Result result = WeiXinQiYeUtil.oAuth2GetUserByCode(token, code, agentId);
            logger.info("result= " + result);
            if (result.getErrcode().equals("0")) {
                if (result.getUserId() != null  && result.getUserId().length() > 0) {
                    // 此处可以通过微信授权用code还钱的Userid查询自己本地服务器中的数据
                    logger.info("result.getUserId(): " + result.getUserId());
                    return result.getUserId();
                }
            }
            return "";
        }
     
    }
    
    /**
         * OAuth2验证接口根据code获取成员信息
         *
         * @param token
         * @param code
         * @return
         */
        public static Result oAuth2GetUserByCode(String token, String code, String agentId) {
            Result result = new Result();
            String menuUrl = WeiXinQiYeConstants.GET_OAUTH2_URL.replace("ACCESS_TOKEN", token).replace("CODE", code).replace("AGENTID", agentId + "");
            String userinfo = JHttpUtils.doGet(menuUrl);
            logger.info("userinfo: " + userinfo);
            JSONObject jsonObject = null;
            if (userinfo != null) {
                try {
                    jsonObject = JSONObject.fromObject(userinfo);
                    logger.info("jsonObject: " + jsonObject);
                    if (jsonObject.getString("UserId") != null && jsonObject.getString("UserId").length() > 0) {
                        result.setErrmsg(jsonObject.getString("errmsg"));
                        result.setErrcode(jsonObject.getString("errcode"));
                        result.setUserId(jsonObject.getString("UserId"));
                    } else {
                        result.setErrmsg(jsonObject.getString("errmsg"));
                        result.setErrcode(jsonObject.getString("errcode"));
                    }
                } catch (Exception e) {
                    result.setErrmsg("accessToken 超时......");
                    result.setErrcode("42001");
                }
            }
            return result;
        }
    
    

    一个完整的流程就是这样。

    如遇到问题欢迎进群308742428

    喜欢的朋友可以关注下,粉丝也缺。

    展开全文
  • C#微信开发

    2017-12-24 10:35:37
    C#开发微信门户及应用教程   作者:伍华聪   C#开发微信门户及应用(1)--开始使用微信接口 6 1、微信账号 6 2、微信菜单定义 7 3、接入微信的链接处理 8 4、使用开发方式创建菜单 14 5、我创建的菜单案例 17 C#...
  • 2、因为链接不存在微信code,所以进入微信生成的验证链接(类似open.weixin.com 的链接),此链接的参数包含微信公众号appid、A链接(回调链接)等其他参数,如果验证成功进入第三步,失败就弹出上面截图...
  • 微信公众号开发技术要点 微信公众号开发技术要点 微信公众号及其接口功能介绍 基本概念 公众号开发者模式 代码验证及图示 Open ID与Union ID 基本概念 使用说明 Access_token 基本介绍 注意事项 获取流程 ...
  • 微信公众号主要有以下几个步骤 微信公众号的通讯机制 微信公众号简介 1.注册微信公众号 2.注册测试公众号 3.搭建微信本地调试环境 1)下载客户端natapp: 2)安装natapp: 4.微信公众号接入(校验签名) 第1步中...
  • 微信开发全局返回码说明
  • 之前有过微信开发的经验,但是第一次接触“微信退款“这一块的业务,查询了很的博客资料以及走了很的弯路。也发现“微信退款”分享的博客并不。特地写了该博客,希望对你们有帮助。个人浅薄的见解 【稍微提...
  • 微信支付 支付过期时间问题 302 问题 code openid
  •  基于H5开发项目,嵌入到企业微信中,并接入js-sdk 并运用企业微信接口。 开发环境:  腾讯企业微信最新版本。后端环境不做要求,能跑通即可(这里我选用的是eclipse的maven项目,之前也出了一篇搭建后台项目的...
  • 在这篇微信公众平台开发教程中,我们将介绍如何使用微信开放平台接口实现微信扫码登录的功能。 准备工作 网站应用微信登录是基于OAuth2.0协议标准构建的微信OAuth2.0授权登录系统。 在进行微信OAuth2.在进行微信...
  • 本文将介绍在微信公众平台开发过程中,如何上传下载多媒体文件。   一、上传多媒体文件 公众号可调用本接口来上传图片、语音、视频等文件到微信服务器,上传后服务器会返回对应的media_id,公众号此后可根据该...
  • 好久没有写博客了,这段时间遇到了很问题都没有记录下来 今天刚好上线了一个小活动,期间遇到一些比较折腾的问题,撑着有时间记录一下 需求 临近圣诞节,运营组想了一个活动来拉新,活动的大概内容是这样的; 用户...
  • 文章目录背景问题分析处理流程1、小程序基础功能开发,提交审核2、企业微信关联小程序3、获取关联小程序的 Secret,设置可见范围4、修改小程序4.1、判断运行环境4.2、权限校验参考资料 背景 为其他公司开发一个小...
  • 本文档基于腾讯公司微信二次开发的相关规范,对微信二次开发的流程、步骤做了相关的说明,方便程序设计和开发人员快速掌握微信公众平台开发技术,便于提高代码的编写效率以及减少出现错误概率。 使用范围 本...
  • 经过最近一段时间的学习使用,我对微信的支付和分享都相当熟悉,前几天冒出个想法为什么不能将这些封装成jar包,以后在自己需要支付开发的时候这部分代码肯定不用在写了,在微信大版本不变的情况下能一直使用,好嘛...
  • 如何在VS Code开发微信小程序? 首先我们需要点击扩展,如下图所示的红框位置。 在这里可以搜索我们想要安装的插件,找到TouchUI,然后点击安装。 2、安装完成后,会显示重新加载。我们点击重新加载,这个插件就...
  • 看下微信开发文档上怎么说就明白了: 当用户主动发消息给公众号的时候(包括发送信息、点击自定义菜单、订阅事件、扫描二维码事件、支付成功事件、用户维权),微信将会把消息数据推送给开发者,开发者在一段时间内...
1 2 3 4 5 ... 20
收藏数 12,480
精华内容 4,992
关键字:

微信开发code多长时间