.NET MVC Get WeChat jssdk

フロントエンド

var href = window.location.href.split('#')[0];
            href = encodeURIComponent(href)
            href = encodeURIComponent(href)//这个url一定要转码两次 后端解码一次 (杜绝中文参数时获取签名报错)
            function GetJsApiInfo() {
    
    
                $.ajax({
    
    
                    url: '../home/GetJsApiInfo?href=' + href,
                    data: {
    
    },
                    dataType: 'json',
                    method: 'get',
                    success: function (res) {
    
    
                        console.log(res)
                        if (res.status == 1) {
    
    
                            var data = res.data
                            wx.config({
    
    
                                debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
                                appId: data.appId, // 必填,公众号的唯一标识
                                timestamp: data.timestamp, // 必填,生成签名的时间戳
                                nonceStr: data.nonceStr, // 必填,生成签名的随机串
                                signature: data.signature,// 必填,签名,见附录1
                                jsApiList: [
                                    'checkJsApi',
                                    'openLocation',
                                    'getLocation'
                                ] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2
                            });
                        }
                    }
                })
            }

コントローラ

 public ActionResult GetJsApiInfo(string href) 
        {
    
    
            _log.Info("获取jssdk路径"+href);
            var result = _weChatService.GetJsApiInfo(appid, href);
            if (result.status == -1)
            {
    
    
                return Error("获取失败");
            }
            return Success(result.data);
        }

_weChatServiceクラスのメソッドaccess_tokenは、データベースから値を取得し、データベースから値を取得して更新をチェックするjsapi_ticketです。

public ResultModel GetJsApiInfo(string Appid, string href)
        {
    
    
            ResultModel model = new ResultModel();
            try
            {
    
    
                string timestamp = Currency.GetTimeStamp();//生成签名的时间戳
                Random random = new Random();
                var randomStr = random.Next(0, 9999999).ToString();
                string nonceStr = randomStr;//生成签名的随机串
                                            //string url = System.Web.HttpContext.Current.Request.Url.AbsoluteUri.ToString();//当前的地址
                string url = System.Web.HttpUtility.UrlDecode( href);
                string jsapi_ticket = "";

                sys_config configResult = db.Queryable<sys_config>().Where(s => s.appid == appid).First();
                if (configResult != null)
                {
    
    
                    if (string.IsNullOrWhiteSpace(configResult.jsapi_ticket))
                    {
    
    
                        var access_token = GetAccessToken().data;
                        _log.Info("获取jsApi时的accesstoken:" + access_token);
                        var RequestUrl = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=" + access_token + "&type=jsapi";
                        var RequestData = HttpUtility.SendGetHttpRequest(RequestUrl, "");
                        var Jsapi_ticketData = JsonConvert.DeserializeObject<GetJsapi_ticketRes>(RequestData);
                        jsapi_ticket = Jsapi_ticketData.ticket;
                        configResult.jsapi_ticket = jsapi_ticket;
                        configResult.jsapi_ticket_expires_in = 7200;
                        configResult.jsapi_ticket_invalidTime = DateTime.Now.AddSeconds(7200);
                        db.Updateable(configResult).ExecuteCommand();
                    }
                    else
                    {
    
    
                        if (configResult.jsapi_ticket_invalidTime < DateTime.Now)
                        {
    
     //过期
                            var access_token = GetAccessToken().data;
                            var RequestUrl = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=" + access_token + "&type=jsapi";
                            var RequestData = HttpUtility.SendGetHttpRequest(RequestUrl, "");
                            var Jsapi_ticketData = JsonConvert.DeserializeObject<GetJsapi_ticketRes>(RequestData);
                            jsapi_ticket = Jsapi_ticketData.ticket;
                            configResult.jsapi_ticket = jsapi_ticket;
                            configResult.jsapi_ticket_expires_in = 7200;
                            configResult.jsapi_ticket_invalidTime = DateTime.Now.AddSeconds(7200);
                            db.Updateable(configResult).ExecuteCommand();
                        }
                        else
                        {
    
    
                            jsapi_ticket = configResult.jsapi_ticket;
                        }
                    }
                }
                else
                {
    
    
                    var access_token = GetAccessToken().data;
                    var RequestUrl = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=" + access_token + "&type=jsapi";
                    var RequestData = HttpUtility.SendGetHttpRequest(RequestUrl, "");
                    var Jsapi_ticketData = JsonConvert.DeserializeObject<GetJsapi_ticketRes>(RequestData);
                    var config = db.Queryable<sys_config>().Where(s => s.appid == appid).First();
                    jsapi_ticket = Jsapi_ticketData.ticket;
                    config.jsapi_ticket = jsapi_ticket;
                    config.jsapi_ticket_expires_in = 7200;
                    config.jsapi_ticket_invalidTime = DateTime.Now.AddSeconds(7200);
                    db.Updateable(config).ExecuteCommand();

                }
               
                var jmdata = "jsapi_ticket={0}&noncestr={1}&timestamp={2}&url={3}";
                jmdata = string.Format(jmdata, jsapi_ticket, nonceStr, timestamp, url);
                _log.Info("jmdata:"+ jmdata);
                var signature = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(jmdata, "SHA1");
                Jsapi_ticketModel _TicketModel = new Jsapi_ticketModel()
                {
    
    
                    appId = Appid,
                    nonceStr = nonceStr,
                    signature = signature,
                    timestamp = timestamp,
                    url = url
                };
                model.status = 0;
                model.data = _TicketModel;
                return model;
            }
            catch (Exception ex)
            {
    
    

                model.status = -1;
                model.message = "获取失败";
                return model;
            }
        }

おすすめ

転載: blog.csdn.net/qq_39072819/article/details/110540009