国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

微信開發-Jssdk調用分享實例

2019-11-17 01:58:03
字體:
來源:轉載
供稿:網友

微信開發-Jssdk調用分享實例

using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.IO;using Newtonsoft.Json;using System.Net;using System.Runtime.Serialization.Formatters.Binary;using System.Text;using System.Security.Cryptography;/// <summary>/// WXJSSDK 的摘要說明/// </summary>public class WXJSSDK{    PRivate string appId;    private string appSecret;    private DataTable DT;    public WXJSSDK(string appId, string appSecret)    {        this.appId = appId;        this.appSecret = appSecret;    }    //得到數據包,返回使用頁面      public System.Collections.Hashtable getSignPackage()    {        string jsapiTicket = getJsApiTicket();        string url = HttpContext.Current.Request.Url.ToString();         string timestamp = Convert.ToString(ConvertDateTimeInt(DateTime.Now));        string nonceStr = createNonceStr();        // 這里參數的順序要按照 key 值 ASCII 碼升序排序          string rawstring = "jsapi_ticket=" + jsapiTicket + "&noncestr=" + nonceStr + "&timestamp=" + timestamp + "&url=" + url + "";        string signature = SHA1_Hash(rawstring);        System.Collections.Hashtable signPackage = new System.Collections.Hashtable();        signPackage.Add("appId", appId);        signPackage.Add("nonceStr", nonceStr);        signPackage.Add("timestamp", timestamp);        signPackage.Add("url", url);        signPackage.Add("signature", signature);        signPackage.Add("rawString", rawstring);        return signPackage;    }    //創建隨機字符串      private string createNonceStr()    {        int length = 16;        string chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";        string str = "";        Random rad = new Random();        for (int i = 0; i < length; i++)        {            str += chars.Substring(rad.Next(0, chars.Length - 1), 1);        }        return str;    }    //得到ticket 如果文件里時間 超時則重新獲取    //注:jsapi_ticket使用規則(有過期時間)類似access_token, oauth的access_token與基礎access_token不同    private string getJsApiTicket()    {        //這里我從數據庫讀取        DT = Dbsession.Default.FromSql("select jsapi_ticket,ticket_expires from table where ID=1").ToDataTable();        int expire_time = (int)DT.Rows[0]["ticket_expires"];        string ticket = DT.Rows[0]["jsapi_ticket"].ToString();        string accessToken =getAccessToken();//獲取系統的全局token         if (expire_time < ConvertDateTimeInt(DateTime.Now))        {            string url = "https://api.weixin.QQ.com/cgi-bin/ticket/getticket?type=jsapi&access_token=" + accessToken + "";            Jsapi api =JsonConvert.DeserializeObject<Jsapi>(httpGet(url));            ticket = api.ticket;            if (ticket != "")            {                expire_time = ConvertDateTimeInt(DateTime.Now) + 7000;                //存入數據庫操作            }        }        return ticket;    }    ////得到accesstoken 如果文件里時間 超時則重新獲取      //private string getAccessToken()    //{    //    // access_token 應該全局存儲與更新,以下代碼以寫入到文件中做示例    //    string access_token = "";    //    string path = HttpContext.Current.Server.MapPath(@"/weixin/access_token.json");    //    FileStream file = new FileStream(path, FileMode.Open);    //    var serializer = new DataContractJsonSerializer(typeof(AccToken));    //    AccToken readJSTicket = (AccToken)serializer.ReadObject(file);    //    file.Close();    //    if (readJSTicket.expires_in < ConvertDateTimeInt(DateTime.Now))    //    {    //        string url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + appId + "&secret=" + appSecret + "";    //        AccToken iden = Desrialize<AccToken>(new AccToken(), httpGet(url));    //        access_token = iden.access_token;    //        if (access_token != "")    //        {    //            iden.expires_in = ConvertDateTimeInt(DateTime.Now) + 7000;    //            iden.access_token = access_token;    //            string json = Serialize<AccToken>(iden);    //            StreamWriterMetod(json, path);    //        }    //    }    //    else    //    {    //        access_token = readJSTicket.access_token;    //    }    //    return access_token;    //}    //發起一個http請球,返回值      private string httpGet(string url)    {        try        {            WebClient MyWebClient = new WebClient();            MyWebClient.Credentials = CredentialCache.DefaultCredentials;//獲取或設置用于向Internet資源的請求進行身份驗證的網絡憑據              Byte[] pageData = MyWebClient.DownloadData(url); //從指定網站下載數據              string pageHtml = System.Text.Encoding.Default.GetString(pageData);  //如果獲取網站頁面采用的是GB2312,則使用這句                          return pageHtml;        }        catch (WebException webEx)        {            Console.WriteLine(webEx.Message.ToString());            return null;        }    }    //SHA1哈希加密算法      public string SHA1_Hash(string str_sha1_in)    {        SHA1 sha1 = new SHA1CryptoServiceProvider();        byte[] bytes_sha1_in = System.Text.UTF8Encoding.Default.GetBytes(str_sha1_in);        byte[] bytes_sha1_out = sha1.ComputeHash(bytes_sha1_in);        string str_sha1_out = BitConverter.ToString(bytes_sha1_out);        str_sha1_out = str_sha1_out.Replace("-", "").ToLower();        return str_sha1_out;    }    /// <summary>      /// StreamWriter寫入文件方法      /// </summary>      private void StreamWriterMetod(string str, string patch)    {        try        {            FileStream fsFile = new FileStream(patch, FileMode.OpenOrCreate);            StreamWriter swWriter = new StreamWriter(fsFile);            swWriter.WriteLine(str);            swWriter.Close();        }        catch (Exception e)        {            throw e;        }    }    /// <summary>      /// 將c# DateTime時間格式轉換為Unix時間戳格式      /// </summary>      /// <param name="time">時間</param>      /// <returns>double</returns>      public int ConvertDateTimeInt(System.DateTime time)    {        int intResult = 0;        System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1));        intResult = Convert.ToInt32((time - startTime).TotalSeconds);        return intResult;    }}//創建Json序列化 及反序列化類目  #region//創建JSon類 保存文件 jsapi_ticket.json  public class JSTicket{    public string jsapi_ticket { get; set; }    public double expire_time { get; set; }}//創建 JSon類 保存文件 access_token.json  public class AccToken{    public string access_token { get; set; }    public double expires_in { get; set; }}//創建從微信返回結果的一個類 用于獲取ticket  public class Jsapi{    public int errcode { get; set; }    public string errmsg { get; set; }    public string ticket { get; set; }    public string expires_in { get; set; }}#endregion  

上面是寫好的類,接下來直接調用后對應輸出給js

WXJSSDK jssdk = new WXJSSDK(AppId,AppSecret);Hashtable hs = jssdk.getSignPackage();string signature = hs["signature"].ToString();string signature = hs["signature"].ToString();string timestamp = hs["timestamp"].ToString();string nonce = hs["nonceStr"].ToString();

接著js調用:

<script type="text/javascript">            var dataForWeixin = {                appId: "<%=appid%>",                MsgImg: "<%=WeChatImg%>",                TLImg: "<%=WeChatImg%>",                url: "<%=url%>",                title: "<%=Title%>",                desc: "<%=desc%>",                timestamp: '<%=timestamp%>',                nonceStr: '<%=nonce%>',                signature: '<%=signature%>',                jsApiList: ['onMenuShareTimeline', 'onMenuShareAppMessage', 'onMenuShareQQ', 'onMenuShareWeibo'],                fakeid: "",                callback: function () { }            };            wx.config({                debug: false, // 開啟調試模式,調用的所有api的返回值會在客戶端alert出來,若要查看傳入的參數,可以在pc端打開,參數信息會通過log打出,僅在pc端時才會打印。                appId: dataForWeixin.appId, // 必填,公眾號的唯一標識                timestamp: dataForWeixin.timestamp, // 必填,生成簽名的時間戳                nonceStr: dataForWeixin.nonceStr, // 必填,生成簽名的隨機串                signature: dataForWeixin.signature,// 必填,簽名,見附錄1                jsApiList: dataForWeixin.jsApiList  // 必填,需要使用的JS接口列表,所有JS接口列表見附錄2            });            wx.ready(function () {                //在此輸入各
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 淮安市| 澜沧| 临武县| 昔阳县| 枝江市| 右玉县| 衡阳市| 陆川县| 万年县| 建湖县| 德兴市| 肇东市| 彭泽县| 渭源县| 湾仔区| 祁连县| 泗洪县| 绥滨县| 山西省| 二连浩特市| 林周县| 赫章县| 尚义县| 昭平县| 祁门县| 福建省| 祁东县| 沛县| 苗栗市| 伊春市| 琼结县| 镇原县| 吉水县| 墨脱县| 红桥区| 左权县| 伊吾县| 高阳县| 太仆寺旗| 义乌市| 苍山县|