您现在的位置: 首页 > 微信营销 > 微商动态 > 微信第三方授权注册页面扫码授权

微信第三方授权注册页面扫码授权

作者:微信群   来源:http://www.juyiting.cn/  热度:42  时间:2020-01-01
小程序或者公众号授权给第三方平台的技术实现流程比较简单,以公众号为例,如下图所示:步骤1:第三方平台方获取预授权码(pre_auth_code)预授权码是第三方平台方实现授权托管的必备

 小程序或者公众号授权给第三方平台的技术实现流程比较简单,以公众号为例,如下图所示:

步骤1:第三方平台方获取预授权码(pre_auth_code)
预授权码是第三方平台方实现授权托管的必备信息,可以通过本文第3部分获取。
接口:
/**
 * 获取pre_auth_code
 */
@SuppressWarnings({ "rawtypes", "unchecked" })
@ApiResponses(value = {@ApiResponse(code = 200, message = "请求成功")})
@ApiOperation(value = "获取pre_auth_code", notes = "获取pre_auth_code", response = String.class)
@RequestMapping(value = "getPreAuthCode")
@ResponseBody
public String getPreAuthCode() {
   logger.info("获取pre_auth_code");
   return thirdPartyService.getPreAuthCode() ;
}
 
@Override
public String getPreAuthCode() {
   String preAuthCode = RedisUtils.get("PreAuthCode");
   //判断Redis中是否存在pre_auth_code
   if(StringUtils.isNotEmpty(preAuthCode)) {
      //如果存在,直接返回pre_auth_code的值
      return preAuthCode;
   }
   //token若不存在,重新请求token
   String componentAccessToken = RedisUtils.get("ComponentAccessToken");
   if(StringUtils.isBlank(componentAccessToken)) {
      //已失效,重新获取
      componentAccessToken = getComponentAccessToken();
   }
   logger.info("ThirdPartyServiceImpl:getPreAuthCode:componentAccessToken={"+componentAccessToken+"}");
   //替换Url中的{component_access_token}
   String url = String.format(CREATE_PREAUTHCODE_URL, componentAccessToken);
   logger.info("ThirdPartyServiceImpl:getPreAuthCode:url={"+url+"}");
   JSONObject json = new JSONObject();
   Map<String, Object> map = new HashMap<>(16);
   map.put("configKey", "third_party_app_id");
   WxSysConfig appIdConfig = wxSysConfigService.findOne(map);
   json.accumulate("component_appid", appIdConfig.getConfigValue());
   //发送Https请求到微信
   String retStr = HttpsUtil.post(url,json.toString());
   logger.info("ThirdPartyServiceImpl:getPreAuthCode:retStr={"+retStr+"}");
   JSONObject resultJson = JSONObject.fromObject(retStr);
   //在返回结果中获取pre_auth_code
   preAuthCode = resultJson.getString("pre_auth_code");
   //保存pre_auth_code,并设置有效时间, 有效时间10分钟
   RedisUtils.set("PreAuthCode", preAuthCode, 600);
   return preAuthCode;
}
CREATE_PREAUTHCODE_URL = "https://api.weixin.qq.com/cgi-bin/component/api_create_preauthcode?component_access_token=%s";
 
步骤2:引入用户进入授权页
第三方平台方可以在自己的网站中放置“微信公众号授权”或者“小程序授权”的入口,或生成授权链接放置在移动网页中,引导公众号和小程序管理员进入授权页。
方式一:授权注册页面扫码授权
授权链接为:
https://mp.weixin.qq.com/safe/bindcomponent?action=bindcomponent&auth_type=3&no_scan=1&component_appid=xxxx&pre_auth_code=xxxxx&redirect_uri=xxxx&auth_type=xxx&biz_appid=xxxx#wechat_redirect
 
 
接口:接口重定向到授权页网址,会自动根据链接生成授权二维码
/**
 * 重定向到授权页
 */
@SuppressWarnings({ "rawtypes", "unchecked" })
@ApiResponses(value = {@ApiResponse(code = 200, message = "请求成功")})
@ApiOperation(value = "重定向到授权页", notes = "重定向到授权页")
@RequestMapping(value = "redirectAuthPage")
public void  redirectAuthPage(HttpServletResponse resp) throws IOException {
   logger.info("重定向到授权页");
   String getAuthPageUrl  = thirdPartyService.getAuthPageUrl();
   resp.sendRedirect(getAuthPageUrl);
}
 
@Override
public String getAuthPageUrl() {
   String preAuthCode = RedisUtils.get("PreAuthCode");
   if(StringUtils.isBlank(preAuthCode)) {
      preAuthCode = getPreAuthCode();
   }
   String redirectUri = "http://fast.mrcargo.com/app-api/thirdParty/queryAuth";
   return String.format(AUTH_PAGE_URL,THIRD_PARTY_APP_ID, preAuthCode, redirectUri);
}
 
通过微信扫码后即可授权。
方式二:点击移动端链接快速授权
第三方平台方可以生成授权链接,将链接通过移动端直接发给授权管理员,管理员确认后即授权成功。这里就不详细了。
 
步骤3:用户确认并同意登录授权给第三方平台方
用户进入第三方平台授权页后,需要确认并同意将自己的公众号或小程序授权给第三方平台方,完成授权流程。
 
步骤4:授权后回调URI,得到授权码(authorization_code)和过期时间
授权流程完成后,授权页会自动跳转进入回调URI,并在URL参数中返回授权码和过期时间(redirect_url?auth_code=xxx&expires_in=600)
/**
 * 根据auth_code查询授权信息
 */
@SuppressWarnings({ "rawtypes", "unchecked" })
@ApiResponses(value = {@ApiResponse(code = 200, message = "请求成功")})
@ApiOperation(value = "根据auth_code查询授权信息", notes = "根据auth_code查询授权信息", response = String.class)
@RequestMapping(value = "queryAuth")
@ResponseBody
public String queryAuth(@RequestParam("auth_code")String authCode,
                  @RequestParam("expires_in")String expiresIn) {
   logger.info("根据auth_code查询授权信息");
   thirdPartyService.queryAuth(authCode, expiresIn);
   return "success" ;
}
这里通过auth_code,便可获取和储存授权方的信息了。
 

参考文档:授权流程技术说明 https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1453779503&token=&lang=

 
 
 

登录

使用微信帐号直接登录,无需注册