前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >微信公众号三方平台开发【component_access_token篇】

微信公众号三方平台开发【component_access_token篇】

作者头像
用户2619822
发布2022-06-10 16:40:09
1.1K0
发布2022-06-10 16:40:09
举报
文章被收录于专栏:袁威

今天开始前,补充一点之前忘了说的事儿——第三方平台授权流程。

在获得component_verify_ticket(上期已介绍如何获取)和component_access_token(本期后面将介绍如何获取)后,我们就会开始进入正式的授权流程了,具体流程大致如下:

  1. 获取预授权码(pre_auth_code):预授权码是第三方平台实现公众号授权托管的必备信息;
  2. 进入授权页:我们可以在自己的网站中设置“微信公众号授权”入口,引导微信公众号管理员进入授权页(授权页地址包含第三方平台的appid、预授权码以及回调URL等参数,如:https://mp.weixin.qq.com/cgi-bin/componentloginpage?component_appid=xxxx&pre_auth_code=xxxxx&redirect_uri=xxxx);
  3. 微信公众号管理员确认并同意登录授权:微信公众号管理员进入第三方平台授权页后,需要确认并同意将自己的微信公众号授权给第三方平台,从而完成授权流程(授权完成后,授权页会自动跳转到回调URL,并将授权码和过期时间加在回调URL的参数中,如:redirect_url?auth_code=xxx&expires_in=600);
  4. 利用授权码调用微信公众号相关API:得到授权码后,我们可以使用授权码来获取授权微信公众号的接口调用凭据(authorizer_access_token,简称令牌),之后,我们就可以通过这个接口调用凭据去调用微信公众号相关API,从而代微信公众号实现其业务(我们能够调用到哪些API,取决于微信公众号管理员给我们授权了哪些权限集,当然也还取决于微信公众号自身所拥有哪些权限)。
Ok!下面进入今天的正题,如何获取第三方平台component_access_token(第三方平台compoment_access_token是第三方平台授权流程中接口的调用凭据,简称令牌。每个令牌都存在有效期(2小时),并且是有限制的,所以这里我们需要好令牌的管理,在令牌快过期时(比如1小时55分)再次进行刷新请求获取新的令牌)。
在我们获取到微信服务器推送过来的component_verify_ticket后,需要将其作为参数,向微信服务器发送请求来获取component_access_token。
接口调用请求说明

http请求方式: POST(请使用https协议) https://api.weixin.qq.com/cgi-bin/component/api_component_token

POST数据示例

{ "component_appid":"appid_value" , "component_appsecret": "appsecret_value", "component_verify_ticket": "ticket_value" }

参数说明

参数

说明

component_appid

第三方平台appid

component_appsecret

第三方平台appsecret

component_verify_ticket

微信后台推送的ticket,此ticket会定时推送

component_appid和component_appsecret在第三方平台详情页进行查看。
返回说明
正常情况,微信会返回如下json数据包:
{ "component_access_token":"61W3mEpU66027wgNZ_MhGHNQDHnFATkDa9-2llqrMBjUwxRSNPbVsMmyD-yq8wZETSoE5NQgecigDrSHkPtIYA", "expires_in":7200 }

结果参数说明

参数

说明

component_access_token

第三方平台access_token

expires_in

有效期

具体程序实现

public function get_component_access_token()
$res = $this->component_detail();//获取第三方平台基础信息
$last_time = $res['token_time'];//上一次component_access_token获取时间
$component_access_token = $res['component_access_token'];//获取数据查询到的component_access_token
$difference_time = $this->validity($last_time);//上一次获取时间与当前时间的时间差
//判断component_access_token是否为空或者是否超过有效期
if(empty($component_access_token) || $difference_time>7000){
$component_access_token = $this->get_component_access_token_again();
}
return $component_access_token;
}
//获取第三方平台基础信息
public function component_detail(){
$res = M('Public')->where(array('id'=>1))->find();
return $res;
}
//重新获取component_access_token
public function get_component_access_token_again(){
$url = 'https://api.weixin.qq.com/cgi-bin/component/api_component_token';
$tok = $this->component_detail();
$param ['component_appid'] = $tok['appid'];
$param ['component_appsecret'] = $tok['appsecret'];
$param ['component_verify_ticket'] = $tok['componentverifyticket'];
$data = post_data ( $url, $param );
$token['component_access_token'] = $data ['component_access_token'];
$token['token_time'] = date("Y-m-d H:i:s");
M('Public') ->where(array('id'=>1))->setField($token);
return $data['component_access_token'];
}
//获取时间差
public function validity($time){
$current_time = time();
$difference_time = $current_time - strtotime($time);
return $difference_time;
}
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2017-05-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 袁威 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Ok!下面进入今天的正题,如何获取第三方平台component_access_token(第三方平台compoment_access_token是第三方平台授权流程中接口的调用凭据,简称令牌。每个令牌都存在有效期(2小时),并且是有限制的,所以这里我们需要好令牌的管理,在令牌快过期时(比如1小时55分)再次进行刷新请求获取新的令牌)。
  • 在我们获取到微信服务器推送过来的component_verify_ticket后,需要将其作为参数,向微信服务器发送请求来获取component_access_token。
  • 接口调用请求说明
  • 参数说明
  • component_appid和component_appsecret在第三方平台详情页进行查看。
  • 返回说明
  • 正常情况,微信会返回如下json数据包:
  • { "component_access_token":"61W3mEpU66027wgNZ_MhGHNQDHnFATkDa9-2llqrMBjUwxRSNPbVsMmyD-yq8wZETSoE5NQgecigDrSHkPtIYA", "expires_in":7200 }
  • public function get_component_access_token()
  • $res = $this->component_detail();//获取第三方平台基础信息
  • $last_time = $res['token_time'];//上一次component_access_token获取时间
  • $component_access_token = $res['component_access_token'];//获取数据查询到的component_access_token
  • $difference_time = $this->validity($last_time);//上一次获取时间与当前时间的时间差
  • //判断component_access_token是否为空或者是否超过有效期
  • if(empty($component_access_token) || $difference_time>7000){
  • $component_access_token = $this->get_component_access_token_again();
  • }
  • return $component_access_token;
  • }
  • //获取第三方平台基础信息
  • public function component_detail(){
  • $res = M('Public')->where(array('id'=>1))->find();
  • return $res;
  • }
  • //重新获取component_access_token
  • public function get_component_access_token_again(){
  • $url = 'https://api.weixin.qq.com/cgi-bin/component/api_component_token';
  • $tok = $this->component_detail();
  • $param ['component_appid'] = $tok['appid'];
  • $param ['component_appsecret'] = $tok['appsecret'];
  • $param ['component_verify_ticket'] = $tok['componentverifyticket'];
  • $data = post_data ( $url, $param );
  • $token['component_access_token'] = $data ['component_access_token'];
  • $token['token_time'] = date("Y-m-d H:i:s");
  • M('Public') ->where(array('id'=>1))->setField($token);
  • return $data['component_access_token'];
  • }
  • //获取时间差
  • public function validity($time){
  • $current_time = time();
  • $difference_time = $current_time - strtotime($time);
  • return $difference_time;
  • }
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档