C#調(diào)用微信接口的相關(guān)代碼
調(diào)用微信接口前需要準(zhǔn)備的內(nèi)容。
1.微信公眾平臺的appid
2.微信公眾平臺的secret
3..獲取tokenid
4.獲取ticket
5.生成簽名的隨機(jī)串
6.生成簽名的時(shí)間戳
7.生成簽名
具體內(nèi)容:
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);
      //向上面的地址發(fā)起httpget請求
      //這里是封裝的一個(gè)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; }
    }
注意:在每個(gè)微信公眾號中獲取tokenid的次數(shù)是有限的,所以應(yīng)該將獲取到的tokenid儲存起來,以便后續(xù)使用。我使用的方法是將tokenid存儲在數(shù)據(jù)庫中,所以在每次使用之前都要做判斷處理
/*tokenid保存方式說明:
*可在數(shù)據(jù)庫中創(chuàng)建表:SysConfig(用戶存儲項(xiàng)目中的配置數(shù)據(jù))
* 字段:
* ConfigKey:用于查詢該條數(shù)據(jù)的key,做為主鍵
* ConfigValue:存儲數(shù)據(jù)的值
* TypeName:該條配置數(shù)據(jù)的名稱
* Description:說明
* CreateTime:創(chuàng)建時(shí)間
* LastModifyTime:上次修改的時(shí)間
* AllowEdit:是否可編輯
* LastValue:上一次的值
* tokenid的有效時(shí)間是兩個(gè)小時(shí)=7200秒,每重新獲取一次就更新一次LastModifyTime的值,將LastModifyTime和當(dāng)前時(shí)間進(jìn)行比對,如果小于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;
 }
5.生成簽名的隨機(jī)串
//生成簽名的隨機(jī)串
string noncestr = Guid.NewGuid().ToString().Replace("-", "");
6.生成簽名的時(shí)間戳
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();
    }
最后可以將這些步驟封裝在一個(gè)方法中
/// <summary>
    /// 獲取調(diào)用微信接口用的SDKConfig
    /// </summary>
    /// <param name="url"></param>
    /// <returns>SDKConfig整個(gè)對象</returns>
    public static JsApiConfig GetJsSdkConfig(string url)
    {
      //獲取tokenid
      string access_token = GetWxTokenId();
      //獲取ticket
      string jsapi_ticket = GetTicket(access_token);
      //生成簽名的隨機(jī)串
      string noncestr = Guid.NewGuid().ToString().Replace("-", "");
      //生成簽名的時(shí)間戳
      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;
    }
頁面上面調(diào)用我們上面配置好的內(nèi)容
$.post('/WapCardInfo/GetSDKConfig', { url: location.href.split('#')[0] }, function (data) {
  var configObj = data;
      wx.config({
        debug: false, // 開啟調(diào)試模式,調(diào)用的所有api的返回值會在客戶端alert出來,若要查看傳入的參數(shù),可以在pc端打開,參數(shù)信息會通過log打出,僅在pc端時(shí)才會打印。
        appId: configObj.appId, // 必填,公眾號的唯一標(biāo)識
        timestamp: configObj.timestamp, // 必填,生成簽名的時(shí)間戳
        nonceStr: configObj.nonceStr, // 必填,生成簽名的隨機(jī)串
        signature: configObj.signature, // 必填,簽名,見附錄1
        jsApiList: [
                'checkJsApi',
                'onMenuShareTimeline',
                'onMenuShareAppMessage',
                'onMenuShareQQ',
                'onMenuShareWeibo',
                'onMenuShareQZone'
        ] // 必填,需要使用的JS接口列表,所有JS接口列表見附錄2
      });
});
請求的后臺代碼
[HttpPost]
    public JsonResult GetSDKConfig(string url)
    {
      try
      {
  //這里就是調(diào)用上面封裝的方法
        JsSdkApi.jsapiConfig model = JsSdkApi.GetJsSdkConfig(url);
        return Json(model);
      }
      catch (Exception ex)
      {
        LogHelper.Error("獲取wxconfig出現(xiàn)異常:" + ex.Message.Replace("'", "\""));
        return Json(new JsSdkApi.jsapiConfig());
      }
    }
至于需要的接口就去微信公眾平臺開發(fā)者文檔中去查看啦。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持我們。
上一篇:C#根據(jù)http和ftp圖片地址獲取對應(yīng)圖片
欄 目:C#教程
下一篇:C#連接Oracle的方法實(shí)例總結(jié)
本文標(biāo)題:C#調(diào)用微信接口的相關(guān)代碼
本文地址:http://www.jygsgssxh.com/a1/C_jiaocheng/5614.html
您可能感興趣的文章
- 01-10C#調(diào)用dos窗口獲取相關(guān)信息的方法
 - 01-10微信開放平臺之網(wǎng)站授權(quán)微信登錄功能
 - 01-10同步調(diào)用和異步調(diào)用WebService
 - 01-10C#調(diào)用WebService實(shí)例開發(fā)
 - 01-10C#接口實(shí)現(xiàn)方法實(shí)例分析
 - 01-10C++調(diào)用C#的DLL程序?qū)崿F(xiàn)方法
 - 01-10C#微信開發(fā)(服務(wù)器配置)
 - 01-10C# 調(diào)用 JavaWebservice服務(wù)遇到的問題匯總
 - 01-10日常收集C#接口知識(知識全面)
 - 01-10詳解C#中的接口屬性以及屬性訪問器的訪問限制
 


閱讀排行
本欄相關(guān)
- 01-10C#通過反射獲取當(dāng)前工程中所有窗體并
 - 01-10關(guān)于ASP網(wǎng)頁無法打開的解決方案
 - 01-10WinForm限制窗體不能移到屏幕外的方法
 - 01-10WinForm繪制圓角的方法
 - 01-10C#實(shí)現(xiàn)txt定位指定行完整實(shí)例
 - 01-10WinForm實(shí)現(xiàn)仿視頻播放器左下角滾動新
 - 01-10C#停止線程的方法
 - 01-10C#實(shí)現(xiàn)清空回收站的方法
 - 01-10C#通過重寫Panel改變邊框顏色與寬度的
 - 01-10C#實(shí)現(xiàn)讀取注冊表監(jiān)控當(dāng)前操作系統(tǒng)已
 
隨機(jī)閱讀
- 01-10C#中split用法實(shí)例總結(jié)
 - 08-05DEDE織夢data目錄下的sessions文件夾有什
 - 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文
 - 01-10delphi制作wav文件的方法
 - 01-10使用C語言求解撲克牌的順子及n個(gè)骰子
 - 08-05dedecms(織夢)副欄目數(shù)量限制代碼修改
 - 01-10SublimeText編譯C開發(fā)環(huán)境設(shè)置
 - 08-05織夢dedecms什么時(shí)候用欄目交叉功能?
 - 01-11ajax實(shí)現(xiàn)頁面的局部加載
 - 04-02jquery與jsp,用jquery
 


