微信公众号开发(二)获取AccessToken、jsapi_ticket

Access Token

在微信公众平台接口开发中,Access Token占据了一个很重要的地位,相当于进入各种接口的钥匙,拿到这个钥匙才有调用其他各种特殊接口的权限。 
access_token是公众号的全局唯一票据,公众号调用各接口时都需使用access_token。正常情况下access_token有效期为7200秒,重复获取将导致上次获取的access_token失效。 
公众号可以使用AppID和AppSecret调用本接口来获取access_token。AppID和AppSecret可在开发模式中获得(需要已经成为开发者,且帐号没有异常状态)。注意调用所有微信接口时均需使用https协议。

http请求方式: GET

https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET

C#.NET代码如下:

/// <summary>
/// 获取AccessToken
/// </summary>
/// <returns></returns>
public static string getAccessToken()
{
    string url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + AppID + "&secret=" + AppSecret;

    HttpWebRequest webrequest = (HttpWebRequest)System.Net.HttpWebRequest.Create(url);
    HttpWebResponse webresponse = (HttpWebResponse)webrequest.GetResponse();//请求连接,并反回数据
    Stream stream = webresponse.GetResponseStream();//把返回数据转换成流文件

    byte[] rsByte = new Byte[webresponse.ContentLength];  //把流文件转换为字节数组

    try
    {
        stream.Read(rsByte, 0, (int)webresponse.ContentLength);
        string responseStr = System.Text.Encoding.Default.GetString(rsByte, 0, rsByte.Length).ToString().Replace("{", "").Replace("}", "");
        string[] jsons = responseStr.Split(‘,‘);
        if (jsons.Length == 2)
        {
            string[] param = jsons[0].Split(‘:‘);
            if (param.Length == 2 && param[0] == "\"access_token\"")
            {
                string tempAccessToken = param[1].Replace("\"", "");

                return tempAccessToken ;
            }
            else
            {
                return "error";
            }
        }
        return "error";
    }
    catch
    {
        return "error";
    }
}

  

正常情况下,微信会返回下述JSON数据包给公众号:

{"access_token":"ACCESS_TOKEN","expires_in":7200}

  

jsapi_ticket

jsapi_ticket是公众号用于调用微信JS接口的临时票据。正常情况下,jsapi_ticket的有效期为7200秒,通过access_token来获取。由于获取jsapi_ticket的api调用次数非常有限,频繁刷新jsapi_ticket会导致api调用受限,影响自身业务,开发者必须在自己的服务全局缓存jsapi_ticket 。

http请求方式: GET

https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=ACCESS_TOKEN&type=jsapi

C#.NET代码如下:

private static string getJsapiTicket()
{
    string interfaceUrl = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=" + AccessToken + "&type=jsapi";

    HttpWebRequest webrequest = (HttpWebRequest)System.Net.HttpWebRequest.Create(interfaceUrl);
    HttpWebResponse webresponse = (HttpWebResponse)webrequest.GetResponse();//请求连接,并反回数据
    Stream stream = webresponse.GetResponseStream();//把返回数据转换成流文件
    byte[] rsByte = new Byte[webresponse.ContentLength];  //把流文件转换为字节数组

    try
    {
        stream.Read(rsByte, 0, (int)webresponse.ContentLength);
        string strb = System.Text.Encoding.Default.GetString(rsByte, 0, rsByte.Length).ToString().Replace("{", "").Replace("}", "");

        if ((strb.ToString().IndexOf("\"errcode\":42001") != -1) || (strb.ToString().IndexOf("\"errcode\":40001") != -1) || (strb.ToString().IndexOf("\"errcode\":40014") != -1) || (strb.ToString().IndexOf("\"errcode\":41001") != -1))
        {
            //access_token错误
        }
        else if (strb.ToString().IndexOf("\"errcode\":0,\"errmsg\":\"ok\"") != -1)
        {
            string[] jsons = strb.Split(‘,‘);
            if (jsons.Length == 4)
            {
                string[] param = jsons[2].Split(‘:‘);
                if (param.Length == 2 && param[0] == "\"ticket\"")
                {
                    string tempJsapiTicket = param[1].Replace("\"", "");

                    return tempJsapiTicket ;
                }
                else
                {
                    return "error";
                }
            }
            return "error";
        }
        else
        {
            return "error";
        }
    }
    catch
    {
        return "error";
    }
}

  成功返回如下JSON:

{
"errcode":0,
"errmsg":"ok",
"ticket":"bxLdikRXVbTPdHSM05e5u5sUoXNKd8-41ZO3MhKoyN5OfkWITDGgnr2fwJ0m9E8NYzWKVZvdVtaUgWvsdshFKA",
"expires_in":7200
}

  

原文地址:https://www.cnblogs.com/yachao1120/p/9319104.html

时间: 2024-10-15 19:27:52

微信公众号开发(二)获取AccessToken、jsapi_ticket的相关文章

【微信公众号开发】获取并保存access_token、jsapi_ticket票据(可用于微信分享、语音识别等等)

步骤一:首先得开通公众号(目的是 获得appid.AppSecret.设置安全域名)~ [公众号设置]→[功能设置] 设置相应的域名 步骤二:编写帮助类WeixinLuyinHelper中的代码 #region 请求Url,不发送数据/// <summary>/// 请求Url,不发送数据/// </summary>public static string RequestUrl(string url){return RequestUrl(url, "POST")

微信公众号开发及时获取当前用户Openid及注意事项

目录 (一)微信公众号开发之VS远程调试 (二)微信公众号开发之基础梳理 (三)微信公众号开发之自动消息回复和自定义菜单 (四)微信公众号开发之网页授权获取用户基本信息 (五)微信公众号开发之网页中及时获取当前用户Openid及注意事项 前言 这篇主要是承接上篇的网页授权获取用户基本信息的后文,也是对第一种静默授权之后,用户点击公众号内链接时,如何再次取得当前用户的OpenId的大致讲解和一些注意事项. 看过上一篇的小伙伴都知道,我们在用户关注的时候就已经将该用户的基本信息存入数据库中,那么如果

微信公众号开发系列-获取微信OpenID

在微信开发时候在做消息接口交互的时候须要使用带微信加密ID(OpenId),下面讲讲述2中类型方式获取微信OpenID.接收事件推送方式和网页授权获取用户基本信息方式获取. 1.通过接收被动消息方式获取OpenId(接收事件推送方式).下面事件中都能够获取到OpenID 关注/取消关注事件 用户在关注与取消关注公众号时.微信会把这个事件推送到开发人员填写的URL.方便开发人员给用户下发欢迎消息或者做帐号的解绑. 微信server在五秒内收不到响应会断掉连接,而且又一次发起请求,总共重试三次 关于

微信公众号基础02_获取accessToken和用户信息

上一篇分享了搭建微信公众号服务器,本文分享一下如果获取access_Token和用户信息,工具还是新浪云SAE 1.获取access_Token 相见开发文档:https://mp.weixin.qq.com/wiki/14/9f9c82c1af308e3b14ba9b973f99a8ba.html accesstoken是公众号的全局唯一票据,公众号调用各接口时都需使用accesstoken.开发者需要进行妥善保存.accesstoken的存储至少要保留512个字符空间.accesstoken

微信公众号开发之获取微信用户的openID

(注:openID同一用户同一应用唯一,UnionID同一用户不同应用唯一.不同应用指微信开放平台下的不同用户.) 1.  申请测试号(获得appID.appsecret) 2.  填写服务器配置并验证. 服务端编写接口,参数为(signature,timestamp,nonce,echostr),并原样返回echostr   验证之后,可开通更多公众平台接口功能. 3.  网页授权获取用户基本信息. 3.1.在接口权限表配置授权页面回调域名或ip 3.2.服务端编写接口,该接口为回调页面的[r

C#微信公众号开发之网页授权oauth2.0获取用户基本信息(二)

C#微信公众号开发之网页授权oauth2.0获取用户基本信息(一) 中讲解了如果通过微信授权2.0snsapi_base获取已经关注用户的基本信息,然而很多情况下我们经常需要获取非关注用户的信息,方法如下: 第一步和之前讲的一样:获取code,但是scope使用方法是snsapi_userinfo; 第二步,根据code获取openid和access_token(此处的access_token是通过网页授权code换取的不是我们之前讲的全局的票据),代码: 1 /// <summary> 2

C#微信公众号开发系列教程二(新手接入指南)

http://www.cnblogs.com/zskbll/p/4093954.html 此系列前面已经更新了两篇博文了,都是微信开发的前期准备工作,现在切入正题,本篇讲解新手接入的步骤与方法,大神可直接跳过,也欢迎大神吐槽. 目录 C#微信公众号开发系列教程一(调试环境部署) C#微信公众号开发系列教程一(调试环境部署续:vs远程调试) C#微信公众号开发系列教程二(新手接入指南) 微信公众平台消息接口的工作原理大概可以这样理解:从用户端到公众号端一个流程是这样的,用户发送消息到微信服务器,微

微信公众号开发(二)用户关注

微信公众号开发之用户关注   前面讲了基本配置,如果配置成功,那么现在就进入我们的微信公众号开发之旅吧! 这个旅程应该从哪里开始比较好呢?想想....首先说用户关注吧 !毕竟这是入口. 用户关注公众号可以通过三种方式: 1.扫公众号的二维码 2.搜索公众号的名称 3.扫带参数的二维码,但是第一个用户只能通过前面两种方式关注. 一.扫公众号的二维码 用户扫了二维码之后,点击关注,微信服务器会向我们的服务器发送一串数据(对象形式): reqMap:{ FromUserName:xx, EventKe

微信公众号开发(三)生成带参数的二维码

微信公众号开发之生成带参数的二维码 做微信公众号开发的人员都知道用户海报作为公众号吸引用户是常见的渠道,那么我就说说这个海报的生成. 看了好多公众号发现他们的海报都是大同小异,一个漂亮的背景+自己的头像+专属二维码. 背景就不阐述了,用户的头像可以由公众号开发文档提供的方式获取(根据用户的openId),今天主要讲用户的专属二维码 所谓专属即便是一对一的. 二维码分为两种,临时二维码和永久二维码 /*生成永久二维码*/ public static String getPerpetualQR(St

微信公众号开发技术基础(二):外网映射工具ngrok的简介和使用

本文结构:(一)用法(二)示例(三)qydev ngrok的下载链接及相关网站 微信公众号开发的时候,微信服务器是需要访问我们的一个公网服务器地址的,但我们又是在本地调试自己的程序的,那怎样让微信服务器能访问到我们本地的服务器呢?那就需要用外网映射工具,将本地IP映射成公网IP,这样就能在公网上访问本地服务了,这里使用ngrok.ngrok原版程序的服务器是在国外的,访问速度极慢或者干脆访问不了,所以这里提供一个服务器搭建在国内的基于ngrok的一个软件:qydev,百度网盘下载链接见文章结尾.