首页 > 其他分享 >解决微信公众号二次分享的BUG记录

解决微信公众号二次分享的BUG记录

时间:2023-11-07 22:33:45浏览次数:25  
标签:function 微信 link var 分享 data BUG wx

公众号页面二次分享分享会丢失自定义的图片和标题;以下是整个过程的记录------

修改前的代码

    $(function () {
        shareInit();
    })

    //分享初始化
    function shareInit() {
        var httpUrl = location.href.split('#')[0];
        var u = navigator.userAgent;
        var isiOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/);
        if (isiOS) {
            //iOS需要先encodeURI编码再传入后端进行签名(为了与分享链接link参数需要保证一致)
            //而android不需要,反而编码后不能分享
            httpUrl = encodeURI(httpUrl);
        }
        var sendJSON = {
            "wxOpenId": Number(wId),
            "userId": Number(userId),
            "code": code,
            "httpUrl": httpUrl
        };
        $.ajax({
            url: 'http://xxxx.com/api/shareService.asmx',
            type: "POST",
            contentType: "application/json; charset=utf-8",
            data: JSON.stringify(sendJSON)
        }).done(function (data) {
            if (data.status == 200) {
                wx.config({
                    debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
                    appId: data.appId, // 必填,公众号的唯一标识
                    timestamp: data.timestamp, // 必填,生成签名的时间戳
                    nonceStr: data.nonceStr, // 必填,生成签名的随机串
                    signature: data.signature,// 必填,签名,见附录1
                    jsApiList: ['updateAppMessageShareData', 'updateTimelineShareData']
                    // 必填,需要使用的JS接口列表,所有JS接口列表见附录2
                });
                wx.ready(function () {
                    var title = data.userName+"邀请您一起加入我们";
                    var desc = data.userName+"邀请您一起加入我们";
                    var link = encodeURI(hostUrl);
                    var imgUrl = hostUrl + "/static/img/share/weixin_logo.jpg";
                    wx.updateAppMessageShareData({//“分享给朋友”及“分享到QQ”,新版
                        title: title, // 分享标题
                        desc: desc, // 分享描述
                        link: link, // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
                        imgUrl: imgUrl, // 分享图标
                        success: function () {
                            // 设置成功
                        }
                    })
                    wx.updateTimelineShareData({//“分享到朋友圈”及“分享到QQ空间”新版
                        title: title, // 分享标题
                        link: link, // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
                        imgUrl: imgUrl, // 分享图标
                        success: function () {
                            // 设置成功
                        }
                    })
                    wx.error(function (res) {
                        console.log("分享初始化失败");
                    });
                });
            } else {
                console.log("获取参数失败");
            }
        }).fail(function (e) {
            console.log("连接server失败", e);
        })
    }


以上正常分享是没有问题的,这里唯一需要注意的一点是保证传过去的url地址跟wx的ready函数中shareData里面要分享的link链接保持一致才不会导致签名非法等问题。

然而打开分享的链接再次分享android没有问题,IOS则无效(提示签名无效,实际上可以判断后端签名是没有问题的,否则android端也会出现问题的),调试发现微信在进行二次分享后会给该链接自动加上from以及isappinstalled这两个参数用来区分此链接是二次分享进来的

既然知道问题,那就好办了,我们在第二次分享的时候需要去判断一下连接地址,改回原来即可,以下是修改后的代码

    if (location.href.split('#')[0] != location.href.split('&')[0]) {
        //这里需要先decodeURI解码一次,因为分享的链接在之前是编码过的
        window.location.href = decodeURI(location.href.split('&')[0]);
    }
    $(function () {
        shareInit();
    })
    //分享初始化
    function shareInit() {
        var httpUrl = location.href.split('#')[0];
        var u = navigator.userAgent;
        var isiOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/);
        if (isiOS) {
            //iOS需要先encodeURI编码再传入后端进行签名(为了与分享链接link参数需要保证一致)
            //而android不需要,反而编码后不能分享
            httpUrl = encodeURI(httpUrl);
        }
        var sendJSON = {
            "wxOpenId": Number(wId),
            "userId": Number(userId),
            "code": code,
            "httpUrl": httpUrl
        };
        $.ajax({
            url: 'http://xxxx.com/api/shareService.asmx',
            type: "POST",
            contentType: "application/json; charset=utf-8",
            data: JSON.stringify(sendJSON)
        }).done(function (data) {
            if (data.status == 200) {
                wx.config({
                    debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
                    appId: data.appId, // 必填,公众号的唯一标识
                    timestamp: data.timestamp, // 必填,生成签名的时间戳
                    nonceStr: data.nonceStr, // 必填,生成签名的随机串
                    signature: data.signature,// 必填,签名,见附录1
                    jsApiList: ['updateAppMessageShareData', 'updateTimelineShareData']
                    // 必填,需要使用的JS接口列表,所有JS接口列表见附录2
                });
                wx.ready(function () {
                    var title = data.userName + "邀请您一起加入我们";
                    var desc = data.userName + "邀请您一起加入我们";
                    var link = encodeURI(hostUrl);
                    var imgUrl = hostUrl + "/static/img/share/weixin_logo.jpg";
                    wx.updateAppMessageShareData({//“分享给朋友”及“分享到QQ”,新版
                        title: title, // 分享标题
                        desc: desc, // 分享描述
                        link: link, // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
                        imgUrl: imgUrl, // 分享图标
                        success: function () {
                            // 设置成功
                        }
                    })
                    wx.updateTimelineShareData({//“分享到朋友圈”及“分享到QQ空间”新版
                        title: title, // 分享标题
                        link: link, // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
                        imgUrl: imgUrl, // 分享图标
                        success: function () {
                            // 设置成功
                        }
                    })
                    wx.error(function (res) {
                        console.log("分享初始化失败");
                    });
                });
            } else {
                console.log("获取参数失败");
            }
        }).fail(function (e) {
            console.log("连接server失败", e);
        })
    }

标签:function,微信,link,var,分享,data,BUG,wx
From: https://blog.51cto.com/u_16347453/8240229

相关文章

  • 微信小程序的图书管理系统-计算机毕业设计源码+LW文档
    摘 要对图书管理的流程进行科学整理、归纳和功能的精简,通过软件工程的研究方法,结合当下流行的互联网技术,最终设计并实现了一个简单、易操作的图书管理小程序。内容包括系统的设计思路、系统模块和实现方法。系统使用过程主要涉及到管理员和用户两种角色,主要包含个人信息修改,用户......
  • ios软件开发价格范围及通用代码分享!
    随着智能手机的普及,iOS软件开发成为了越来越多人的选择,但是,对于许多新手来说,开发iOS软件的价格范围及通用代码是一个非常陌生的话题,本文将为大家分享iOS软件开发的价格范围以及一些通用的代码,帮助大家更好地了解iOS软件开发的相关知识。一、iOS软件开发的价格范围1、简单应用的开发......
  • 微信小程序【同城配送】及【加密请求】
    在小程序后台配置API安全时注意保存密钥,要不然还得重新弄。封装属性配置类,在加解密的时候会用到封装加解密方法使用okhttp封装post加密请求,并将信息解密调用post方法将必要信息加密后发送给微信并得到相应,对其解密对信息进行业务处理封装属性配置类创建一个config.proper......
  • 电脑软件开发常见源码与误区分享!
    随着科技的不断发展,电脑软件已经深入到各个领域,为人们的生活和工作带来了极大的便利,然而,电脑软件开发的历程中,常常会遇到一些问题和误区,本文将分享一些常见的源码和误区,帮助开发者更好地规避风险,提高软件的质量和效率。一、常见的源码1、开源源码开源源码是指那些公开源代码的软件,......
  • 微信怎么批量保存大量照片
    8-2本文要解决的问题是自动或者快速地保存微信收到的图片的事情,如果你的工作中有一个事情是需要每天或者经常保存大量的从微信收到的图片或者视频的,也许本文适合你,本文介绍的方法,可以自动保存各个群或者人发来的图片和视频。 首先要准备一些工具:1,一台你日常用来工作的电脑2,你的工......
  • 软件性能测试指标分享,第三方检测机构进行性能测试的好处
    在现代科技发展迅猛的时代背景下,软件的性能表现对于用户体验和企业竞争力至关重要。软件性能测试是通过对软件系统进行一系列的测试,以评估其在各种工作条件下的性能表现。这些工作条件可以包括并发用户数、数据量、网络传输速度等。软件性能测试的目的是为了找出系统在繁忙工作......
  • 微信支付:wxpay.unifiedOrder(data)返回appid 与 openId 不配
    原因:小程序和APP、公众号等支付方式夸端口调用支付,后台配置多个appId时A程序中的openid在B程序中支付。即使用A程序的openid和B程序的appIdy去调用wxpay.unifiedOrder(data)把请求统一支付的参数输出:得到当前的appid,微信返回后看到另一个Appid,如果两个一致,则不会出现不匹配问题......
  • 分享一个Python 批量word转图片的方法
    我们的工作场景中每次上传word时都要把word文件先导出图片,然后一一上传系统,因为只有PNG图片能直接预览,且确保文本、图片和格式保持不变。但有时候遇到大的word文档,一个文档导出来可能都有几十张图片,这样效率实在太低。针对这种情况,我们选了Spire.DocforPython批量将word转图片......
  • 企业微信开启接收消息+验证URL有效性
    企业微信开启接收消息+验证URL有效性......
  • uniapp实用功能代码(小程序支付,图片保存,返回刷新,分享到朋友圈)
    1.uniapp小程序支付:uni.request({url:"http://xxxxxx/payOrder",//后端接口返回调起支付需要的参数data:{userId:1,//此接口需要的参数一般有多个此仅为示例},method:"POST",success:(res)=>{console.log(res.data,"这......