微信分享操作JSSDK

使用jssdk域名要绑定吗?

jssdk必须绑定域名才能使用,绑定根域后,子域无需再做绑定即可正常使用jssdk。切记微信公众号绑定的是一级或二级域名。而且要与Config的url域名一致。

使用jssdk如何在本地做测试?

可临时绑定一个域名,比如:a.com,在本地的host文件中设置192.168.0.0. a.com,访问a.com进行开发测试,本地开发完成后再做迁移调整。

使用js widget没有响应?

请检查appkey是否与域名绑定并且是否审核通过。

jssdk无法授权?

这种情况一般弹出的授权窗口被浏览器拦截导致,将授权页添加信任站点即可。

在mobile里如何使用jssdk?

由于jssdk授权是使用的弹出窗口,而目前有些移动终端是不支持弹窗的,故而无法通过正常流程进行授权。 可通过自行进行授权得到access_token后,调用jssdk中的WB2.init(‘access_token’ : access_token);后,再进行使用parseCMD或js widget。

 

*生成签名错误?(一般出错都在这里) 错误提示:invalid signature

1,、确认签名算法正确

2、确认config中noncestr,timestamp与用以签名中的对应noncestr,timestamp一致

3、确认url是页面完整的url,包括Get参数部分

4、确认config中的appid与用来获取jsapi_ticket的appid一致

5、确保一定缓存access-token和jsapi_ticket

特别注意:你在利用参数生成签名的时候,要对所有待签名参数按照字段名的 ASCII 码从小到大排序(字典序)后,使用 URL 键值对的格式(即key1=value1&key2=value2…)拼接成字符串 string1。这里需要注意的是所有参数名均为小写字符。


Code



直接取的Config

        #region   //微信分享数据++GetConfig(string appid ,string AppSecret,string url)

        public  string Get_Config(string appid, string token, string url)
        {
            string wx_config = "";
            try
            {
                //string ACCESS_TOKEN = thisACCESS_TOKEN(appid, appsecret);
                string JSAPI_TICKET = thisJSAPI_TICKET(token);
                SHA1 sha = new SHA1CryptoServiceProvider();
                string string1 = "jsapi_ticket=" + JSAPI_TICKET + "&noncestr=" + noncestr + "×tamp=" + timestamp + "&url=" + (url.IndexOf('#') >= 0 ? url.Substring(0, url.IndexOf('#')) : url);
                #region +++--------------------------------------生成签名
                SHA1 shatwo = SHA1.Create();
                ASCIIEncoding encode = new ASCIIEncoding();
                byte[] by = encode.GetBytes(string1);
                shatwo.ComputeHash(by);
                string result = System.BitConverter.ToString(shatwo.Hash).Replace("-", "");
                #endregion

                wx_config = "wx.config({" +
                 "debug: false," + // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
                 "appId: '" + appid + "'," + // 必填,公众号的唯一标识
                 "timestamp:" + timestamp + "," + // 必填,生成签名的时间戳
                 "nonceStr: '" + noncestr + "'," + // 必填,生成签名的随机串
                 "signature: '" + result + "'," +// 必填,签名,见附录1
                @" jsApiList: [
         'checkJsApi',
        'onMenuShareTimeline',
        'onMenuShareAppMessage',
        'onMenuShareQQ',
        'onMenuShareWeibo',
        'hideMenuItems',
        'showMenuItems',
        'hideAllNonBaseMenuItem',
        'showAllNonBaseMenuItem',
        'translateVoice',
        'startRecord',
        'stopRecord',
        'onRecordEnd',
        'playVoice',
        'pauseVoice',
        'stopVoice',
        'uploadVoice',
        'downloadVoice',
        'chooseImage',
        'previewImage',
        'uploadImage',
        'downloadImage',
        'getNetworkType',
        'openLocation',
        'getLocation',
        'hideOptionMenu',
        'showOptionMenu',
        'closeWindow',
        'scanQRCode',
        'chooseWXPay',
        'openProductSpecificView',
        'addCard',
        'chooseCard',
        'openCard'
        ]
" + // 必填,需要使用的JS接口列表,所有JS接口列表见附录2
             "});";
                return wx_config;
            }
            catch (Exception)
            {

                throw;
            }
        }



        #region ..._+++方法


        /// <summary>
        /// 生成随机字母与数字
        /// </summary>
        /// <param name="Length">生成长度</param>
        /// <param name="Sleep">是否要在生成前将当前线程阻止以避免重复</param>
        /// <returns></returns>
        public static string Str(int Length, bool Sleep)
        {
            if (Sleep)
                System.Threading.Thread.Sleep(3);
            char[] Pattern = new char[] { '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', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' }; //, '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' };
            string result = "";
            int n = Pattern.Length;
            System.Random random = new System.Random(~unchecked((int)System.DateTime.Now.Ticks));
            for (int i = 0; i < Length; i++)
            {
                int rnd = random.Next(0, n);
                result += Pattern[rnd];
            }
            return result;
        }
        public static string thisACCESS_TOKEN(string AppID, string AppSecret)
        {


            WebClient myWebClient = new WebClient();
            byte[] myDataBuffer = myWebClient.DownloadData("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + AppID + "&secret=" + AppSecret);
            string json = Encoding.UTF8.GetString(myDataBuffer);
            JavaScriptSerializer js = new JavaScriptSerializer();   //实例化一个能够序列化数据的类
            ACCESS_TOKEN_Json list = js.Deserialize<ACCESS_TOKEN_Json>(json);    //将json数据转化为对象类型并赋值给list

            string ACCESS_TOKEN = list.access_token;
            return ACCESS_TOKEN;
        }

        /// <summary>
        /// 当前Weixin  JSAPI_TICKET
        /// </summary>
        public static string thisJSAPI_TICKET(string ACCESS_TOKEN)
        {

            WebClient myWebClient = new WebClient();
            byte[] myDataBuffer = myWebClient.DownloadData("https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=" + ACCESS_TOKEN + "&type=jsapi");
            string json = Encoding.UTF8.GetString(myDataBuffer);
            JavaScriptSerializer js = new JavaScriptSerializer();   //实例化一个能够序列化数据的类
            JSAPI_TICKET_Json list = js.Deserialize<JSAPI_TICKET_Json>(json);    //将json数据转化为对象类型并赋值给list

            string JSAPI_TICKET = list.ticket;
            return JSAPI_TICKET;
        }


        /// <summary>
        /// 获取授权的ACCESS_TOKEN
        /// </summary>
        public struct ACCESS_TOKEN_Json
        {
            public string access_token { get; set; }
        }
        /// 获取授权的JSAPI_TICKET
        /// </summary>
        public struct JSAPI_TICKET_Json
        {
            public string ticket { get; set; }
        }
        #endregion
        #endregion



页面HTML 


        <%= wx_config %>
        wx.ready(function(){
            wx.showOptionMenu();
          var dataForWeixin = {
              imgUrl: "img/start.png",
              link: "<%= Link %>" , //此Link一定是要截取的Linq不然会带openid
              title:"分享数据,收获豪礼!",
              desc: "我已成功参与了分享,如果你也想get百丽宫、SKII、各大餐厅……送出的礼物,点击进入游戏抢购属于自己的礼品!"
        };
        
           //分享朋友圈
         wx.onMenuShareTimeline({
                title: dataForWeixin.title, // 分享标题
                link: dataForWeixin.link, // 分享链接
                imgUrl: dataForWeixin.imgUrl, // 分享图标
                success: function () { 
                    // 用户确认分享后执行的回调函数
                        
                    $.ajax({
                        url: "lhjAct.ashx",
                        dataType: "json",
                        data: {
                            openid: openid,
                            myact: "updateshare",
                            aid: aid,
                            rad: Math.random()
                        },
                        success: function (data) {
                      if(data.share>0){
                       $("#mcover").show();
                           share-=1;
                       $("#pshare").html("亲,你需要分享"+share+"次才能激活领取奖品权限!")
            }else
            {
                $("#mcover").hide();
            }

                        }
                        });

                    
                },
                cancel: function () { 
                    // 用户取消分享后执行的回调函数
                }
            });

                      //分享给朋友
            wx.onMenuShareAppMessage( {
                title: dataForWeixin.title, // 分享标题
                link: dataForWeixin.link, // 分享链接
                imgUrl: dataForWeixin.imgUrl, // 分享图标
                desc: dataForWeixin.desc, // 分享描述               
                type: '', // 分享类型,music、video或link,不填默认为link
                dataUrl: '', // 如果type是music或video,则要提供数据链接,默认为空
                success: function () { 
                             $.ajax({
                        url: "lhjAct.ashx",
                        dataType: "json",
                        data: {
                            openid: openid,
                            myact: "updateshare",
                            aid: aid,
                            rad: Math.random()
                        },
                        success: function (data) {
                      if(data.share>0){
                       $("#mcover").show();
                       share-=1;
                       $("#pshare").html("亲,你需要分享"+share+"次才能激活领取奖品权限!")
//                       location.reload();
            }else
            {
                $("#mcover").hide();
            }

                        }
                        });
                     
                },
                cancel: function () { 
                    // 用户取消分享后执行的回调函数
                }
            });


对了别忘了引用JS文件。

微信分享操作JSSDK

上一篇:在IOS系统中微信浏览器input输入框输入值无效


下一篇:Kubernetes集群中使用阿里云 SLB 实现四层金丝雀发布