C#调用微信接口的相关代码
调用微信接口前需要准备的内容。 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的返回对象 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保存方式说明: =================================================================================================== 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; } 5.生成签名的随机串 //生成签名的随机串 string noncestr = Guid.NewGuid().ToString().Replace("-",""); 6.生成签名的时间戳 TimeSpan ts = DateTime.UtcNow - new DateTime(1970,1,0); string timestamp = Convert.ToInt64(ts.TotalSeconds).ToString(); 7.生成签名 string signature = MakeSha1Sign(string.Format("jsapi_ticket={0}&noncestr={1}×tamp={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) { //获取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,0); string timestamp = Convert.ToInt64(ts.TotalSeconds).ToString(); //签名 string signature = MakeSha1Sign(string.Format("jsapi_ticket={0}&noncestr={1}×tamp={2}&url={3}",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 }); }); 请求的后台代码 [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()); } } 至于需要的接口就去微信公众平台开发者文档中去查看啦。 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程小技巧。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |