查看: 333|回复: 0

[.NET开发] C#调用微信接口的相关代码

发表于 2018-2-9 08:00:00

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

  1.微信公众平台的appid

  2.微信公众平台的secret

  3..获取tokenid

  4.获取ticket

  5.生成签名的随机串

  6.生成签名的时间戳

  7.生成签名

具体内容:

1.微信公众平台的appid

2.微信公众平台的secret

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

3.获取tokenid

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

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

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

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

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

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

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

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

5.生成签名的随机串

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

6.生成签名的时间戳

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

7.生成签名

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

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

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

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

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

请求的后台代码

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

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

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

您可能感兴趣的文章:

  • C#使用微信接口开发微信门户应用
  • c#使用微信接口开发微信门户应用中微信消息的处理和应答
  • C#开发微信公众号接口开发
  • C#微信公众平台开发之高级群发接口
  • C#.net 微信公众账号接口开发
  • C#微信公众号与订阅号接口开发示例代码
  • C#微信开发之获取接口调用凭据
  • C#开发微信门户及应用(1) 微信接口使用
  • C#微信开发之发送模板消息
  • C#微信接口之推送模板消息功能示例


回复

使用道具 举报