服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C# - C#调用微信接口的相关代码

C#调用微信接口的相关代码

2022-01-12 13:29小熊吉米 C#

这篇文章主要为大家详细介绍了C#调用微信接口的相关代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

调用微信接口前需要准备的内容。

  1.微信公众平台的appid

  2.微信公众平台的secret

  3..获取tokenid

  4.获取ticket

  5.生成签名的随机串

  6.生成签名的时间戳

  7.生成签名

具体内容:

1.微信公众平台的appid

2.微信公众平台的secret

这两者需要登录到申请的微信公众平台中去获取,建议写在配置文件中

3.获取tokenid

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public static string GetWxTokenId()
    {
      string token = "";
      string url = string.Format("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={0}&secret={1}", appid, secret);
      //向上面的地址发起httpget请求
      //这里是封装的一个http请求的类
      string content = HttpHelper.HttpGet(url);
      if (!string.IsNullOrEmpty(content))
      {
        var obj = JsonConvert.DeserializeObject<TokenResult>(content);
        if (!obj.errcode.HasValue)
        {
          token = obj.access_token;
        }
      }
      return token;
    }

这里是获取微信tokenid的返回对象

?
1
2
3
4
5
6
7
private class TokenResult
    {
      public string access_token { get; set; }
      public string expires_in { get; set; }
      public int? errcode { get; set; }
      public string errmsg { get; set; }
    }

注意:在每个微信公众号中获取tokenid的次数是有限的,所以应该将获取到的tokenid储存起来,以便后续使用。我使用的方法是将tokenid存储在数据库中,所以在每次使用之前都要做判断处理

/*tokenid保存方式说明:
*可在数据库中创建表:SysConfig(用户存储项目中的配置数据)
* 字段:
* ConfigKey:用于查询该条数据的key,做为主键
* ConfigValue:存储数据的值
* TypeName:该条配置数据的名称
* Description:说明
* CreateTime:创建时间
* LastModifyTime:上次修改的时间
* AllowEdit:是否可编辑
* LastValue:上一次的值
* tokenid的有效时间是两个小时=7200秒,每重新获取一次就更新一次LastModifyTime的值,将LastModifyTime和当前时间进行比对,如果小于7200秒则可以不用再次获取,反之则需要再次从微信获取。
*/

===================================================================================================

4.获取ticket。需要上一步中获取到的tokenid。

?
1
2
3
4
5
6
7
8
9
10
11
12
/// <summary>
 /// 获取ticket
 /// </summary>
 /// <param name="token">获取到的tokenid</param>
 /// <returns>strticket</returns>
 public static string GetTicket(string token)
 {
      string getticketurl = string.Format("https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token={0}&type=jsapi", token);
      string content = HttpHelper.HttpGet(getticketurl);
      JsApiTicket obj = JsonConvert.DeserializeObject<JsApiTicket>(content);
      return obj.ticket;
 }

5.生成签名的随机串

?
1
2
//生成签名的随机串
string noncestr = Guid.NewGuid().ToString().Replace("-", "");

6.生成签名的时间戳

?
1
2
TimeSpan ts = DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0);
string timestamp = Convert.ToInt64(ts.TotalSeconds).ToString();

7.生成签名

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
string signature = MakeSha1Sign(string.Format("jsapi_ticket={0}&noncestr={1}&timestamp={2}&url={3}", jsapi_ticket, noncestr, timestamp, url));
/// <summary>
    /// SDK生成签名
    /// 注意:需要引用System.Security.dll
    /// </summary>
    /// <param name="str"></param>
    /// <returns>str签名</returns>
    public static string MakeSha1Sign(string str)
    {
      byte[] StrRes = Encoding.Default.GetBytes(str);
      HashAlgorithm iSHA = new SHA1CryptoServiceProvider();
      StrRes = iSHA.ComputeHash(StrRes);
      StringBuilder EnText = new StringBuilder();
      foreach (byte iByte in StrRes)
      {
        EnText.AppendFormat("{0:x2}", iByte);
      }
      return EnText.ToString();
    }

最后可以将这些步骤封装在一个方法中

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
/// <summary>
    /// 获取调用微信接口用的SDKConfig
    /// </summary>
    /// <param name="url"></param>
    /// <returns>SDKConfig整个对象</returns>
    public static JsApiConfig GetJsSdkConfig(string url)
    {
      //获取tokenid
      string access_token = GetWxTokenId();
      //获取ticket
      string jsapi_ticket = GetTicket(access_token);
      //生成签名的随机串
      string noncestr = Guid.NewGuid().ToString().Replace("-", "");
      //生成签名的时间戳
      TimeSpan ts = DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0);
      string timestamp = Convert.ToInt64(ts.TotalSeconds).ToString();
      //签名
      string signature = MakeSha1Sign(string.Format("jsapi_ticket={0}&noncestr={1}&timestamp={2}&url={3}", jsapi_ticket, noncestr, timestamp, url));
 
      JsApiConfig config = new JsApiConfig()
      {
        appId = appid,
        debug = false,
        nonceStr = noncestr,
        timestamp = timestamp,
        signature = signature,
        ticket = jsapi_ticket,
        //需要使用的JS接口列表
        jsApiList = new string[] { "chooseImage", "previewImage", "uploadImage", "downloadImage" }
 
      };
      return config;
 
 
    }

页面上面调用我们上面配置好的内容

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
$.post('/WapCardInfo/GetSDKConfig', { url: location.href.split('#')[0] }, function (data) {
  var configObj = data;
 
      wx.config({
        debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
        appId: configObj.appId, // 必填,公众号的唯一标识
        timestamp: configObj.timestamp, // 必填,生成签名的时间戳
        nonceStr: configObj.nonceStr, // 必填,生成签名的随机串
        signature: configObj.signature, // 必填,签名,见附录1
        jsApiList: [
                'checkJsApi',
                'onMenuShareTimeline',
                'onMenuShareAppMessage',
                'onMenuShareQQ',
                'onMenuShareWeibo',
                'onMenuShareQZone'
        ] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2
      });
});

请求的后台代码

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[HttpPost]
    public JsonResult GetSDKConfig(string url)
    {
      try
      {
  //这里就是调用上面封装的方法
        JsSdkApi.jsapiConfig model = JsSdkApi.GetJsSdkConfig(url);
        return Json(model);
      }
      catch (Exception ex)
      {
        LogHelper.Error("获取wxconfig出现异常:" + ex.Message.Replace("'", "\""));
        return Json(new JsSdkApi.jsapiConfig());
      }
    }

至于需要的接口就去微信公众平台开发者文档中去查看啦。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。

延伸 · 阅读

精彩推荐
  • C#C# 后台处理图片的几种方法

    C# 后台处理图片的几种方法

    本篇文章主要介绍了C# 后台处理图片的几种方法,非常具有实用价值,需要的朋友可以参考下。...

    IT小伙儿10162021-12-08
  • C#浅谈C# winForm 窗体闪烁的问题

    浅谈C# winForm 窗体闪烁的问题

    下面小编就为大家带来一篇浅谈C# winForm 窗体闪烁的问题。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    C#教程网7962021-12-21
  • C#聊一聊C#接口问题 新手速来围观

    聊一聊C#接口问题 新手速来围观

    聊一聊C#接口问题,新手速来围观,一个通俗易懂的例子帮助大家更好的理解C#接口问题,感兴趣的小伙伴们可以参考一下...

    zenkey7072021-12-03
  • C#C#基础之泛型

    C#基础之泛型

    泛型是 2.0 版 C# 语言和公共语言运行库 (CLR) 中的一个新功能。接下来通过本文给大家介绍c#基础之泛型,感兴趣的朋友一起学习吧...

    方小白7732021-12-03
  • C#C#直线的最小二乘法线性回归运算实例

    C#直线的最小二乘法线性回归运算实例

    这篇文章主要介绍了C#直线的最小二乘法线性回归运算方法,实例分析了给定一组点,用最小二乘法进行线性回归运算的实现技巧,具有一定参考借鉴价值,需要...

    北风其凉8912021-10-18
  • C#Unity3D UGUI实现缩放循环拖动卡牌展示效果

    Unity3D UGUI实现缩放循环拖动卡牌展示效果

    这篇文章主要为大家详细介绍了Unity3D UGUI实现缩放循环拖动展示卡牌效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参...

    诗远3662022-03-11
  • C#C#实现的文件操作封装类完整实例【删除,移动,复制,重命名】

    C#实现的文件操作封装类完整实例【删除,移动,复制,重命名】

    这篇文章主要介绍了C#实现的文件操作封装类,结合完整实例形式分析了C#封装文件的删除,移动,复制,重命名等操作相关实现技巧,需要的朋友可以参考下...

    Rising_Sun3892021-12-28
  • C#c#学习之30分钟学会XAML

    c#学习之30分钟学会XAML

    一个界面程序的核心,无疑就是界面和后台代码,而xaml就是微软为构建应用程序界面而创建的一种描述性语言,也就是说,这东西是搞界面的...

    C#教程网8812021-12-10