微信开发者-主动请求-实际开发-(3)获取access_token(C#)

“access_token是公众号的全局唯一票据,公众号调用各接口时都需使用access_token。正常情况下access_token有效期为7200秒,重复获取将导致上次获取的access_token失效。由于获取access_token的api调用次数非常有限,建议开发者全局存储与更新access_token,频繁刷新access_token会导致api调用受限,影响自身业务。”---------微信开发者文档如是说。


1,基本类包括如下几个:

(1)WxAccessTokenEntity:请求access_token后的解析实体类。具体数据格式请参看微信开发者文档。类如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

/// <summary>
/// WxAccessTokenEntity 的摘要说明
/// </summary>
public class WxAccessTokenEntity
{
    private String _access_token;
    /// <summary>
    /// 获取到的凭证
    /// </summary>
    public String access_token
    {
        get { return _access_token; }
        set { _access_token = value; }
    }
    private int _expires_in;
    /// <summary>
    /// 凭证有效时间,单位:秒
    /// </summary>
    public int expires_in
    {
        get { return _expires_in; }
        set { _expires_in = value; }
    }
}

(2)WxAccessTokenHelper:实际请求类,请求方式为get。实际请求及解析过程请参看http://my.oschina.net/u/1867097/blog/287967及http://my.oschina.net/u/1867097/blog/287969,数据格式请参看微信开发者文档。执行成功后返回上面定义的“WxAccessTokenEntity ”类。类内容如下:

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Web;

/// <summary>
/// WxAccessTokenHelper 的摘要说明
/// </summary>
public class WxAccessTokenHelper
{
    //请求access_token的url
    private static String access_tokenUrl = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET";
    public static WxAccessTokenEntity GetAccessTokenFromWeiXin(String APPID, String APPSECRET)
    {
        String requestUrl = access_tokenUrl.Replace("APPID", APPID);
        requestUrl = requestUrl.Replace("APPSECRET", APPSECRET);
        String result = RequestHelper.sendGet(requestUrl);
        if (result == null || result == "")
        {
            throw new Exception("无返回数据");
        }
        WxAccessTokenEntity access = new WxAccessTokenEntity();
        try
        {
            access = (WxAccessTokenEntity)JsonHelper.FromJsonToModel(result, typeof(WxAccessTokenEntity));
        }
        catch (Exception ex)
        {
            throw new Exception("数据解析异常," + ex.Message);
        }
        if (access == null || access.access_token == null || access.access_token == "")
        {
            WxErrorEntity error = (WxErrorEntity)JsonHelper.FromJsonToModel(result, typeof(WxErrorEntity));
            if (error == null)
            {
                throw new Exception("数据解析异常,原因未知");
            }
            throw new Exception("微信返回异常,errcode:" + error.errcode + ",errmsg" + error.errmsg);
        }
        return access;
    }
}

(3),WxErrorEntity :微信错误类。数据格式如:“{"errcode":40013,"errmsg":"invalid appid"}”,具体含义可参看微信全局返回码说明。类内容如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

/// <summary>
/// WxErrorEntity 的摘要说明
/// </summary>
public class WxErrorEntity
{
    //数据格式
    //{"errcode":40003,"errmsg":" invalid openid "}
    private string _errcode;
    public string errcode
    {
        get { return _errcode; }
        set { _errcode = value; }
    }

    private string _errmsg;
    public string errmsg
    {
        get { return _errmsg; }
        set { _errmsg = value; }
    }
}


杂乱:(1)由于access_token的过期问题,需要重复请求。其有效期为7200秒,即2小时。又有接口调用次数限制。建议将access_token存于数据库中,过期后自动重新请求并更新数据,或者在程序中定义变量,并用线程检测其有效性,过期自动更新。其实最终目的就是保持当前access_token的有效性。若有适当机制限制,理论上一天只需请求12次,完全不会超出接口调用次数限制。若调用次数不超过每天限制(目前为:实际账号2000/天,测试账号200/天),也可以动态请求。

(2)“请开发者注意,由于技术升级,公众平台的开发接口的access_token长度将增长,其存储至少要保留512个字符空间。此修改将在1个月后生效,请开发者尽快修改兼容。”---微信官方文档有如下说法,保存数据库时请注意。

转载于:https://my.oschina.net/u/1867097/blog/287979

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值