之前公司下达了开发微信只一块的任务,然后我就去网上取了一番经,可是感觉对于我这种微信开发的新手来说,所需要的东西太多,太凌乱了,然后整个人就懵逼了。

  费了很长时间才将微信接口调用完成。所以呐,我整理了一下,调用微信接口前需要准备的内容。

  1.微信公众平台的appid

  2.微信公众平台的secret

  3..获取tokenid

  4.获取ticket

  5.生成签名的随机串

  6.生成签名的时间戳

  7.生成签名

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

1.微信公众平台的appid

2.微信公众平台的secret

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

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

3.获取tokenid

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

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

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; }}

TokenResult

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

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

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

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

 /// <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;}

获取ticketid

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

5.生成签名的随机串

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

生成签名的随机串

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

6.生成签名的时间戳

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

生成签名的时间戳

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

7.生成签名

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();}

签名

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

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

/// <summary>/// 获取调用微信接口用的SDKConfig/// </summary>/// <param name="url"></param>/// <returns>SDKConfig整个对象</returns>public static JsApiConfig GetJsSdkConfig(string url){//获取tokenidstring access_token = GetWxTokenId();//获取ticketstring 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;}

直接调用的方法

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

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

 $.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
            });
});

页面js代码

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

请求的后台代码

[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());}}

后台代码

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

转载于:https://www.cnblogs.com/shenymou/p/GetSDKConfig.html

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

  1. 微信JS-SDK调用微信接口方法说明

    微信公众平台 微信JS-SDK说明文档 地址:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141115 概述 微信JS ...

  2. vue如何通过NodeJs本地获取微信access_token及签名,并调用微信接口

    一直都想搞一下微信公众号网页开发,公司忙没有时间自己也没开发过所以也没有头绪,前两天通过自己的摸索以及自行查找的资料,终于通过nodejs在本地成功的获取到了微信的access_token及签名,以及 ...

  3. 图片上传(调用微信接口)

    图片上传之原生方法 图片上传.压缩.回显.缩略图放大.删除.下载,可以参考这儿(h5方法) https://github.com/zhangstar1331/pictureUpload 效果展示 背景 ...

  4. 两步快速调用微信接口,活字格就是这么强

    众所周知,微信早已开放了公众平台开发者接口,第三方平台在获取公众号授权后,可调用该接口进行配置,为最终用户提供微信端的即时查询.自动回复.信息推送等功能,极大的提高用户体验和运营效率. 以往,要调用微 ...

  5. C# 调用微信接口上传素材和发送图文消息

    using Common; using Newtonsoft.Json.Linq; using System; using System.IO; using System.Net; using Sys ...

  6. .NET WebApi调用微信接口Https请求工具类

    .NET WebApi调用微信接口Https请求工具类 using System; using System.Collections.Generic; using System.IO; using S ...

  7. 易语言调用微信接口方法(通过wxDriver.dll命令)

    易语言调用微信接口方法(通过wxDriver.dll命令) 先看易语言DLL命令图: DLL命令源码: .版本 2' ***************************************** ...

  8. python itchat实现调用微信接口的第三方模块方法

    itchat是一个开源的微信个人号接口,使用python调用微信从未如此简单. 使用不到三十行的代码,你就可以完成一个能够处理所有信息的微信机器人. 当然,该api的使用远不止一个机器人,更多的功能等 ...

  9. java异步调用微信接口_微信支付V3 SDK(Java版,支持同步异步调用)

    我们在开发微信支付时,发现微信官方已经对SDK做了升级,V3版本的SDK从设计上符合RESTful规范. 我们再在开源库中寻找是否有现成de开箱即用.并且支持响应式编程的SDK版本.经过一凡寻找,令我 ...

最新文章

  1. ios11修改微信步数_小程序同步微信步数
  2. MongoDB Windows环境安装及配置
  3. 显示非模式窗口和模式窗口
  4. [原] insert into … on duplicate key update / replace into 多行数据
  5. 解决Dev c++不能调试问题
  6. 把变量赋值给寄存器_阻塞赋值和非阻塞赋值的区别与记忆
  7. 系统学习数字图像处理之描绘子
  8. 本地虚拟机中匿名ftp上传文件失败的问题
  9. 百度初级认证知识点小记
  10. SEO兵书:搜索引擎优化手册
  11. 最新emlog看板娘插件合集
  12. 快手科技更新招股书:前11个月营收525亿元,引入10家基石投资者
  13. 使用scrapy框架爬取腾讯招聘信息
  14. 如何推广你的区块链初创企业,顺利完成ICO及后续发展
  15. Games101-课程15笔记
  16. 下载的turbo c 3.0 怎样安装
  17. ubuntu12.04 快捷键
  18. 散列表ADT--分离链接法
  19. HTTP协议知识点总结
  20. 免费课程:升级? 使用布尔玛CSS

热门文章

  1. SQL Server 2012中的Contained Database尝试
  2. Ubuntu下硬盘读写时声音很响问题的解决
  3. 基于用户投票的排名算法(五):威尔逊区间
  4. SQL Server DBA常见面试 笔试问题
  5. java SocketChannel and ServerSocketChannel
  6. mac安装python3
  7. 专家支招:手把手教你如何选型移动CRM
  8. win7下编译uCOS-II
  9. 必须对手机内置业务制定规范防止后门
  10. 如何将一键还原精灵备份文件复制出来?