CMS企业模板|CMS模板|CMS网站定制|CMS模板下载

站内搜索 售前咨询 售后服务 建站帮助 微博 博客 在线客服
  • 网站模板
  • 定制开发
  • 案例展示
  • 最新动态
  • 关于我们
  • 联系我们
  • 问答社区

CMSYOU互助问答社区

诚信合作, 高质专业!
CMSYOU互助问答社区
使用新浪微博账号登录 登录 注册
  • 搜索
  • 问题
  • 话题
  • 用户
发起

微信公众号推出API新接口:获取稳定版接口调用凭据,有什么好处?

Phpcms 微信 公众号 授权
最近用了phpcms对接微信公众号,出现报错“Errcode: 40001 - Errmsg: invalid credential, access_token is invalid or not latest, could get access_token by getStableAccessToken”,经过检查应该是多个程序对接了同一个公众号,查到微信公众号推出API新接口:获取稳定版接口调用凭据,是否可以用这个接口改善这种报错的情况?
2024-06-20 09:31 0 条评论 分享

站外

邮件

要评论问题请先登录或注册

3 个回复

CMSYOU - CMS企业网站定制专家

赞同来自:

获取稳定版接口调用凭据getStableAccessToken官方介绍:
获取小程序全局后台接口调用凭据,有效期最长为7200s,开发者需要进行妥善保存;
有两种调用模式: 1. 普通模式,access_token 有效期内重复调用该接口不会更新 access_token,绝大部分场景下使用该模式;2. 强制刷新模式,会导致上次获取的 access_token 失效,并返回新的 access_token;
该接口调用频率限制为 1万次 每分钟,每天限制调用 50万 次;
与getAccessToken获取的调用凭证完全隔离,互不影响。该接口仅支持 POST JSON 形式的调用;
如使用云开发,可通过云调用免维护 access_token 调用;
如使用云托管,也可以通过微信令牌/开放接口服务免维护 access_token 调用;

注意到“与getAccessToken获取的调用凭证完全隔离,互不影响”没,这是重点,也就是说可以避开传统接口getAccessToken的影响,独立获取AccessToken授权。
解决方法:
将phpcms中原有的getAccessToken接口换成getStableAccessToken。

2024-06-20 09:40 0 条评论

分享

要参与问题请先登录或注册

0

CMSYOU - CMS企业网站定制专家

赞同来自:

php微信公众号stable_token具体使用方法:
调用方式:HTTPS 调用
POST https://api.weixin.qq.com/cgi-bin/stable_token

请求参数
属性 类型 必填 说明
grant_type string 是 填写 client_credential
appid string 是 账号唯一凭证,即 AppID,可在「微信公众平台 - 设置 - 开发设置」页中获得。(需要已经成为开发者,且账号没有异常状态)
secret string 是 账号唯一凭证密钥,即 AppSecret,获取方式同 appid
force_refresh boolean 否 默认使用 false。1. force_refresh = false 时为普通调用模式,access_token 有效期内重复调用该接口不会更新 access_token;2. 当force_refresh = true 时为强制刷新模式,会导致上次获取的 access_token 失效,并返回新的 access_token

返回参数:
属性 类型 说明
access_token string 获取到的凭证
expires_in number 凭证有效时间,单位:秒。目前是7200秒之内的值。

提供一个HTTP/HTTPS的请求方法参考:
/**
     * 发起一个HTTP/HTTPS的请求
     * @param $url 接口的URL 
     * @param $params 接口参数   array('content'=>'test', 'format'=>'json');
     * @param $method 请求类型    GET|POST
     * @param $multi 图片信息
     * @param $extheaders 扩展的包头信息
     * @return string
     */
    public static function request( $url , $params = array(), $method = 'GET' , $multi = false, $extheaders = array())
    {
        if(!function_exists('curl_init')) exit('Need to open the curl extension');
        $method = strtoupper($method);
        $ci = curl_init();
        curl_setopt($ci, CURLOPT_USERAGENT, 'PHP-SDK OAuth2.0');
        curl_setopt($ci, CURLOPT_CONNECTTIMEOUT, 3);
        curl_setopt($ci, CURLOPT_TIMEOUT, 3);
        curl_setopt($ci, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ci, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ci, CURLOPT_SSL_VERIFYHOST, false);
        curl_setopt($ci, CURLOPT_HEADER, false);
        $headers = (array)$extheaders;
        switch ($method)
        {
            case 'POST':
                curl_setopt($ci, CURLOPT_POST, TRUE);
                if (!empty($params))
                {
                    if($multi)
                    {
                        foreach($multi as $key => $file)
                        {
                            $params[$key] = '@' . $file;
                        }
                        curl_setopt($ci, CURLOPT_POSTFIELDS, $params);
                        $headers[] = 'Expect: ';
                    }
                    else
                    {
                        curl_setopt($ci, CURLOPT_POSTFIELDS, http_build_query($params));
                    }
                }
                break;
            case 'DELETE':
            case 'GET':
                $method == 'DELETE' && curl_setopt($ci, CURLOPT_CUSTOMREQUEST, 'DELETE');
                if (!empty($params))
                {
                    $url = $url . (strpos($url, '?') ? '&' : '?')
                        . (is_array($params) ? http_build_query($params) : $params);
                }
                break;
        }
        curl_setopt($ci, CURLINFO_HEADER_OUT, TRUE );
        curl_setopt($ci, CURLOPT_URL, $url);
        if($headers)
        {
            curl_setopt($ci, CURLOPT_HTTPHEADER, $headers );
        }

        $response = curl_exec($ci);

        curl_close ($ci);
        return $response;
    }

2024-06-24 11:49 0 条评论

分享

要参与问题请先登录或注册

0

CMSYOU - CMS企业网站定制专家

赞同来自:

微信公众号开发,稳定版接口调用凭据( Access token)和旧版获取 Access token 有什么区别?
在微信公众号开发接口中,这两个接口都可以获取到 access_token ,区别就在于:
「获取接口调用凭据(https://api.weixin.qq.com/cgi-bin/token)」每调用一次接口就会刷新一次 access_token ,上次获取到的access_token就会失效;
「获取稳定版接口调用凭据(https://api.weixin.qq.com/cgi-bin/stable_token)」在普通模式下, access_token 在有效期内重复调用该接口都不会刷新 access_token ,会直接返回有效期内的 access_token ,这样可以避免 access_token 因为重复调用获取接口被刷新掉、过期等情况出现。

php微信公众号stable_token接口使用示范:
/**
 * 发送post请求
 * @param string $url 请求地址
 * @param array $post_data post键值对数据
 * @return string
 */
function send_post($url, $post_data) {
    $postData = http_build_query($post_data);
    $options = array(
        'http' => array(
            'method' => 'POST',
            'header' => 'Content-type:application/x-www-form-urlencoded',
            'content' => $postData,
            'timeout' => 15 * 60 // 超时时间(单位:s)
        )
    );
    $context = stream_context_create($options);
    $result = file_get_contents($url, false, $context);

    return $result;
}
//使用方法
$data['grant_type'] = 'client_credential';
$data['appid'] = $appid;
$data['secret'] = $appsecret;
$url = 'https://api.weixin.qq.com/cgi-bin/stable_token';
$response = json_decode(send_post($url, json_encode($data)), true);
$access_token = $res['access_token'];
2024-06-24 11:57 0 条评论

分享

要参与问题请先登录或注册

0

为什么被折叠?0 个回复被折叠

要回复问题请先登录或注册

相关问题

微信授权获取手机号码报错:does not have a method "getPhoneNumber" to handle event "getphonenumber". PHPCMS V9 怎么全站调用站点名? phpcms v9 怎么调用页面描述 phpcms v9 tag页怎么调用文章内容(就像list页用moreinfo='1')? phpcms v9 搜索页怎么调用文章内容(就像list页用moreinfo='1')? phpcms v9 搜索页如何调用网站导航栏目,原因是retrun值会冲突? Phpcms V9在不用插件的情况下,怎么调用Tag列表? 内容页[如何调用发布人员的昵称? 调用扩展添加的 文章来源的时候 怎么匹配v9_copyfrom的表

问题状态

最新活动:2024-06-24 11:57

浏览:1220 次

关注:1 人

Copyright © 2008-2025 CMSYOU - 互助问答社区 - 粤ICP备10060801号-3   rss feed RSS Feed
欢迎加入QQ群(346494585)Phpcms V9企业模版交流 CMS定制咨询
“让我们一起来学习CMS建站吧!”