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這里是獲取微信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}×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){//獲取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}×tamp={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.绘图基础
- 下一篇: 开发者的眼光看产品