Web常用工具 二维码美化 在线压缩 JavaScript AI工具汇总网站 ASP.NET控件源码查询 W3CHTML W3SCHOOL TypeScript 开源中国 51aspx github codeproject SQLBACKUP 几种排序算法比较 SQL中deny权限 MSDN下载 HttpWebRequest类 HTML5 stackoverflow ASP.NET 页生命周期概述 IIS 5.0 和 6.0 的 ASP.NET 应用程序生命周期概述 [SQL Server]视图sys.sysprocesses brnshop学习 SQL视频 Fiddler帮助文档 Sprint.Net SQLServer牛人博客 codeplex IIS官网 IE11 Developer Jquery源码视频上 Jquery源码视频下 Jquery Bugs jquery.miaov.com 正则表达式 Jquery API 1.9 Service Broker Javascript Object中的方法讲解 Microsoft webcast 微信开发接口 ECMAScript5 Underscore Jquery Bugs SQL存储过程事务嵌套 官网SQL事务锁 2345天气插件 Json数据查看 C++ jquery-plugin-validate 博学谷(传智播客) Swift视频 IOS代码论坛 SWIFT设计模式 操作系统下载 AngularJS VueJS ASPNETCORE 前端题库 Node.js ASPNETCORE 腾讯课堂 SwiftUI SwiftUI疑问解答 ADO.NET SMO 数字化企业网 Unicode码查询 Redis使用文档 .NET 微服务:适用于容器化 .NET 应用程序的体系结构 .NETCore5.0微软官方文档 CSS3.0 在 ASP.NET Core 中配置 Windows 身份验证 Maven使用教程 Maven Repository Thymeleaf Thymeleaf中文CSDN Spring官方文档 Spring中文文档 SpringBoot SpringData SVG在线设计工具 SVG教程01 SVG教程02 fontawesome图标库 mybatis官网 mybatis-spring中文 mysql教程 python教程 python的scrapy教程01 python的scrapy教程02 VS开发python xpath教程 腾讯向量数据库教程 JSZip浏览器内存中创建文件与文件夹 axios的使用文档 SheetJS(JS操作excel)的使用文档

huaan011

 

H5页面实现在微信里面转发和分享朋友圈

最近接到一个部门的需求,用H5开发一些公司宣传的资料,然后在微信里面方便分享。经历过了很多次的踏坑,最后终于实现了,特总结一下:

1.首先申请公众号,并且是认证过了的.

2.在公众号里面进行开发设置。这个很重要,刚开始我没设置对,一堆问题。

 

注意:1、服务器地址(URL) https://域名/WeChartApp/TokenValid

             参考我的笔记:https://www.cnblogs.com/huaan011/p/18008186

 

        

/// <summary>
/// 微信公众号开发配置基本配置时候填的token校验
/// </summary>
/// <returns></returns>
public IActionResult TokenValid()
{
    ///这里做的假,正常的是需要一堆审核的
    ///https://codeleading.com/article/81633002885/
    string echostr = GDCUtility.GetParamNoSpace("echostr");
    return Content(echostr);
}

        2、 令牌(Token) 随便写一串字符,按照要求就可以了。

3、在微信公众号里面设置 JS接口安全域名,不设置也会报错。

 

 

 

4、检查分享接口权限是否已经获得,在微信公众号的【设置与开发】->【接口权限】,如图:

 

5、代码开发:

 

   1、要引用腾讯的微信 JS-SDK     https://res.wx.qq.com/open/js/jweixin-1.6.0.js

   2、JS-SDK的官方文档 :

https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/JS-SDK.html#112

   3、 我已经封装好了的代码,直接调用就可以了(踏坑无数次)。

(function (win) {
    /*
     * 微信分享
     * 获取微信加签信息
     * @param{data}:获取的微信加签
     * @param{shareData}:分享配置参数
     */
    let wexinShare = (data, shareData) => {
        // var wx = require('weixin-js-sdk') || window['wx'];
       // console.log(data, shareData);
        let appId = data.appId;
        let timestamp = data.timestamp;
        let nonceStr = data.nonceStr;
        let signature = data.signature;
        wx.config({
            debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。(测试记得关掉)
            appId: appId, // 必填,公众号的唯一标识  https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/JS-SDK.html#112
            timestamp: timestamp, // 必填,生成签名的时间戳
            nonceStr: nonceStr, // 必填,生成签名的随机串
            signature: signature, // 必填,签名,见附录1
            jsApiList: [
                //'updateAppMessageShareData',
                //'updateTimelineShareData'
                'checkJsApi',
                'updateAppMessageShareData',
                'updateTimelineShareData',
                'onMenuShareAppMessage', // 旧的接口,即将废弃(网上说是要把旧接口也填上去,不然注册会失败)
                'onMenuShareTimeline', // 旧的接口,即将废弃
                'onMenuShareQQ', // 旧接口,分享给QQ好友
                'onMenuShareQZone' // 旧接口,分享到QQ空间
            ] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2
        });
       // console.log(1);
        wx.checkJsApi({
            jsApiList: ['checkJsApi', 'updateAppMessageShareData', 'updateTimelineShareData','onMenuShareAppMessage'], // 需要检测的JS接口列表,所有JS接口列表见附录2,
            success: function (res) {
                // 以键值对的形式返回,可用的api值true,不可用为false
                // 如:{"checkResult":{"chooseImage":true},"errMsg":"checkJsApi:ok"}
               // console.log(res, 'checkJsApi')
            }
        });
       // console.log(2);
        wx.ready(function () {
            //console.log(7);
            // //分享到朋友圈”及“分享到QQ空间”
            wx.updateTimelineShareData({
                title: shareData.title, // 分享标题
                link: shareData.link, // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
                imgUrl: shareData.imgUrl, // 分享图标
                success: function (res) {
                    // 设置成功
                    //console.log("分享朋友圈成功返回的信息为:", res);
                }
            })
           // console.log(5);
            //“分享给朋友”及“分享到QQ”
            wx.updateAppMessageShareData({
                title: shareData.title, // 分享标题
                desc: shareData.desc, // 分享描述
                link: shareData.link, // 分享链接 该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
                imgUrl: shareData.imgUrl, // 分享图标
                success: function (res) {
                    //console.log("分享朋友成功返回的信息为:", res);;
                }
            })
            //console.log(6);
        });
        wx.ready(function () {//文档的即将废弃,其实分享用的就是旧方法,这个上面的新的分享updateTimelineShareData根本没有作用,但是不加分享无法成功
            wx.onMenuShareTimeline({
                title: shareData.title, // 分享标题
                link: shareData.link, // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
                imgUrl: shareData.imgUrl, // 分享图标
                success: function () {
                    // 用户点击了分享后执行的回调函数
                    //console.log("分享成功2");
                },
                cancel: function () {
                    //console.log("分享取消2");
                }
            });
        });
        //console.log(3);
        wx.error(function (res) {
            // config信息验证失败会执行error函数,如签名过期导致验证失败,具体错误信息可以打开config的debug模式查看,也可以在返回的res参数中查看,对于SPA可以在这里更新签名。
            //console.log('验证失败返回的信息:', res);
        });
       // console.log(4);
    }
    let isWeChatMiniProgram = function () {
        let ua = window.navigator.userAgent.toLowerCase();
        if (ua.match(/MicroMessenger/i) == "micromessenger") {
            return true;
        } else {
            return false;
        }
    };
    let _wechart = function () {
        
    };
     //请求微信配置参数接口(获取签名),由后台给接口给
    _wechart.prototype.getSignature = function () {
        let urls = window.location.href.split('#')[0];
        let urlPar = "/WeChartApp/GetSignature";
        let dataObj = { url: urls };
        let dataPar = { type: 'post', url: urlPar, data: dataObj };
        GDCRequest.search(dataPar, function (data) {
            //console.log(data);
        });
    };
    //微信分享到朋友圈和转发朋友注册,注册完就可以使用转发朋友和分享朋友圈
    //{
    //    title: "深圳市标题",
    //    desc: "深圳市描述",
    //    imgUrl: "https://域名/images/share03.jpg?rn=4"
    //}
    _wechart.prototype.shareFriend = function (_shareData) {
        if (!isWeChatMiniProgram()) { return; }//只有在微信的浏览器中才有转发和分享朋友圈
        let promise = new Promise(function (sucess,falid) {
            let urls = window.location.href.split('#')[0];
            let urlPar = "/WeChartApp/GetSignature";
            let dataObj = { url: urls };
            let dataPar = { type: 'post', url: urlPar, data: dataObj };
            GDCRequest.search(dataPar, function (data) {
                sucess(data);
            });
        });
        promise.then((res) => {
            //微信加签
            let obj = {
                appId: res.appId,
                nonceStr: res.nonceStr,
                signature: res.signature,
                timestamp: res.timestamp,
                jsApiList: ['updateAppMessageShareData', 'updateTimelineShareData']
            };
            //分享数据,这段主要是为了在hash模式下分享出去的链接不被浏览器截取,保证完全把链接分享出去
            let url = res.url;
            let shareData = {
                title: _shareData.title,// 分享标题
                desc: _shareData.desc,// 分享描述
                link: url,
                imgUrl: _shareData.imgUrl // 分享图标
            };
            //引用
            wexinShare(obj, shareData);
        });
    }
    win.GDCWechart = new _wechart();
})(window);

  4、 调用上面的方法,放在你想转发或者分享朋友圈的页面:

GDCWechart.shareFriend({
        title: "深圳市-龙年快乐标题",
        desc: "深圳市-龙年快乐描述",
        imgUrl: "https://微信公众号里面配置的域名/images/share03.jpg?rn=4"
    });

6、最坑的一个地方,我按照前面的步骤都开发完毕了,但是还是无法正常的转发或者分享朋友圈(此时我是把想转发或者分享朋友圈的链接直接发在微信聊天里面,直接点的链接进去,然后进行转发或者分享朋友圈的操作,我这么操作很多次都只能转发或者分享朋友圈的是链接,人都被搞疯了)。最后网上搜索,一个大神终于给我了一个方法,就是把链接转化成二维码,然后微信扫码二维码进来,就正常了。

7、注意分享朋友圈和转发只能在微信里面使用,离开了这个就不能使用了,并且只能用户自己手动去点右上角的三个点那里去完成转发或者分享朋友圈

8、获取签名的方法 /WeChartApp/GetSignature,我在后台已经封装好了的,如果使用者可以根据自己项目中封装好的来进行修改。返回的数据格式

    { appId:"公众号的appid ",

    nonceStr:"随机的字符串,相当于私匙,可以随便取,生成 signature使用的那个",

    signature:"签名",

    timestamp:"时间戳"

  }或者你自己按照实际需求修改或者  /WeChartApp/GetSignature 这部分的JS代码。

posted on 2024-02-06 10:57  华安  阅读(1189)  评论(0编辑  收藏  举报

导航