調用微信內置的方法及wx.config的配置問題


首先請看網址:

https://www.w3cschool.cn/weixinkaifawendang/h8ap1qe5.html

 

重點說下怎么配置wx.config(為了安全,所有的參數都在服務端獲取)

var link = location.href;
$.ajax({
  url: "/WxJSSDK/WxJS_SDK.aspx/GetInfoMation",//后台給你提供的接口
  type: "Post",
  data: "{ 'url': '"+link+"' }",
  async: false,
  contentType: "application/json; charset=utf-8",
  dataType: "json",
  success: function (data) {
    var datad = JSON.parse(data.d); //轉譯為Json字符串
    wx.config({
      debug: false, // 開啟調試模式,調用的所有api的返回值會在客戶端alert出來
      appId: datad.appid, // 必填,公眾號的唯一標識
      timestamp: datad.timestamp, // 必填,生成簽名的時間戳
      nonceStr: datad.noncestr, // 必填,生成簽名的隨機串
      signature: datad.signature,// 必填,簽名,見附錄1
      jsApiList: [
        "openLocation"
      ] // 必填,需要使用的JS接口列表,所有JS接口列表見附錄2
    });
    wx.error(function (res) {
      layer.msg(res);
    });
  },
  error: function (error) {
    layer.msg(error)
  }
});

 訪問的頁面方法:

        #region 獲取AccessToken
        private static string GetAccessToken()
        {
            //https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET
            string tokenUrl = string.Format("https://api.weixin.qq.com/cgi-bin/token?grant_type={0}&appid={1}&secret={2}", "client_credential", ConfigurationManager.AppSettings["appid"], ConfigurationManager.AppSettings["secret"]);
            var wc = new WebClient();
            var strReturn = wc.DownloadString(tokenUrl);return strReturn;
        }
        #endregion
        #region 獲取Jsapi_Ticket
        private static string GetWeiXinJsapi_Ticket(string accessToken)
        {
            string tokenUrl = string.Format("https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token={0}&type={1}", accessToken, "jsapi");
            var wc = new WebClient();
            var strReturn = wc.DownloadString(tokenUrl); //取得微信返回的json數據  return strReturn;
        }
        #endregion
        #region 基礎字符
        private static string[] strs = new string[]
                               {
                                  "a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z",
                                  "A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"
                               };
        #endregion
        #region 創建隨機字符串
        private static string CreatenNonce_str()
        {
            Random r = new Random();
            var sb = new StringBuilder();
            var length = strs.Length;
            for (int i = 0; i < 15; i++)
            {
                sb.Append(strs[r.Next(length - 1)]);
            }
            return sb.ToString();
        }
        #endregion
        #region  創建時間戳
        private static long CreatenTimestamp()
        {
            return (DateTime.Now.ToUniversalTime().Ticks - 621355968000000000) / 10000000;
        }
        #endregion
        #region 簽名算法
        /// <summary>
        /// 簽名算法
        ///本代碼來自開源微信SDK項目:https://github.com/night-king/weixinSDK
        /// </summary>
        /// <param name="jsapi_ticket">jsapi_ticket</param>
        /// <param name="noncestr">隨機字符串(必須與wx.config中的nonceStr相同)</param>
        /// <param name="timestamp">時間戳(必須與wx.config中的timestamp相同)</param>
        /// <param name="url">當前網頁的URL,不包含#及其后面部分(必須是調用JS接口頁面的完整URL)</param>
        /// <returns></returns>
        public static string GetSignature(string jsapi_ticket, string noncestr, long timestamp, string url, out string string1)
        {
            var string1Builder = new StringBuilder();
            string1Builder.Append("jsapi_ticket=").Append(jsapi_ticket).Append("&")
                          .Append("noncestr=").Append(noncestr).Append("&")
                          .Append("timestamp=").Append(timestamp).Append("&")
                          .Append("url=").Append(url.IndexOf("#") >= 0 ? url.Substring(0, url.IndexOf("#")) : url);
            string1 = string1Builder.ToString();return FormsAuthentication.HashPasswordForStoringInConfigFile(string1, "SHA1");
        }
        #endregion

        //GET api/GetInfoMation
        /// <summary>
        ///初始化的數據調用微信接口返回參數
        /// </summary>
        /// <returns></returns>
        [WebMethod]
        public static string GetInfoMation(string url)
        {
            try
            {
                //生成tokcen
                string tocken = GetAccessToken();
                JObject TokenJO = (JObject)JsonConvert.DeserializeObject(tocken);
                //驗證簽名
                string Jsapi_Ticket = GetWeiXinJsapi_Ticket(TokenJO["access_token"].ToString());
                JObject Jsapi_TicketJo = (JObject)JsonConvert.DeserializeObject(Jsapi_Ticket);
                #region
                string rtn = "";
                string jsapi_ticket = Jsapi_TicketJo["ticket"].ToString();
                string noncestr = CreatenNonce_str();
                long timestamp = CreatenTimestamp();
                string outstring = "";
                string JS_SDK_Result = GetSignature(jsapi_ticket, noncestr, timestamp, url, out outstring);
                //拼接json串返回前台
                rtn = "{\"appid\":\"" + ConfigurationManager.AppSettings["appid"] + "\",\"jsapi_ticket\":\"" + jsapi_ticket + "\",\"noncestr\":\"" + noncestr + "\",\"timestamp\":\"" + timestamp + "\",\"outstring\":\"" + outstring + "\",\"signature\":\"" + JS_SDK_Result.ToLower() + "\"}";#endregion
                return rtn;
            }
            catch (Exception ex)
            {
                return string.Empty;
            }
        }

調用接口方法(例如:打開地圖):

//打開地圖
function funOpenLocation(id)
{
    var dataArray = [[40.036692, 116.425381, "北苑大酒店", "雙營路12號 "], [40.020808, 116.433250, "北京會議中心", "北京市朝陽區來廣營西路88號"], [39.818720, 119.505420, "國海賓館", "河北省秦皇島市北戴河東經路154號"]];
    wx.openLocation({
        latitude: dataArray[id][0], // 緯度,浮點數,范圍為90 ~ -90
        longitude: dataArray[id][1], // 經度,浮點數,范圍為180 ~ -180。
        name: dataArray[id][2], // 位置名
        address: dataArray[id][3], // 地址詳情說明
        scale: 18, // 地圖縮放級別,整形值,范圍從1~28。默認為最大
        infoUrl: '' // 在查看位置界面底部顯示的超鏈接,可點擊跳轉
    });
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM