• H5接入微信JS-SDK实现分享微信、朋友圈、QQ、微博等


    前段时间因业务需要将app的内容以h5的形式分享到微信、朋友圈、QQ、QQ空间,所以再次记录下接入微信JS-SDK的全部流程:

    后端:需要写一个获取公众号access_token得接口,将微信JS-SDK需要的参数返回给前端就可以了,参考:官方地址

    前端:参考:微信JS-SDK官方地址

       1、绑定域名

        需要在微信工作号后台进行配置,如果没有公众号需要先在微信公众平台申请公众号;如已有微信公众号需登录公众号进行以下设置:

        1>左侧开发-->基本配置-->IP白名单中,将服务器的测试地址IP及正式地址IP配置,顺便将开发者ID和开发者密码保存下来,后面要用;

        

        

        2>左侧设置-->公众号设置-->功能设置-->JS接口安全域名,中将你服务器的测试和正式地址填入,必须都是带证书的域名即https开头的域名;

          

        2、在需要分享的页面引入JS文件

        在需要调用JS接口的页面引入如下JS文件,(支持https):http://res.wx.qq.com/open/js/jweixin-1.6.0.js

        如需进一步提升服务稳定性,当上述资源不可访问时,可改访问:http://res2.wx.qq.com/open/js/jweixin-1.6.0.js (支持https)。

        备注:支持使用 AMD/CMD 标准模块加载方法加载

    <script src="./js/jquery-3.4.1.min.js"></script>
    <script src="./js/rem.js"></script>
    <script src="https://res2.wx.qq.com/open/js/jweixin-1.6.0.js"></script>

       3、通过config接口注入权限验证配置,见代码

       4、在ready接口中处理成功验证,见代码

       5、在error接口处理失败验证,见代码

       说明:我是将分享的逻辑及配置写到了一个share.js中,这样做的好处就是其他需要分享的页面可以直接引入使用,不需要重复配置;

       分享逻辑share.js如下:

       我这里使用了jQuery,操作DOM元素方便,所以还需要在页面引入jQuery.js,分享share.js我是在页面拿到数据后利用jQuery动态引入的,之所以这样引入,是为了避免用户偶尔分享失败的问题,因为获取页面数据的http请求和share.js中的http请求是异步的,会出现share.js还没有请求成功,用户就点击了分享导致分享失败,自己多试几遍就知道了。

      1 $(function () {
      2 
      3     let _type = Number($("#type").text()),  //用于区分是学生还是企业 1-学生 2-企业
      4         localUrl = encodeURIComponent(window.location.href.split('#')[0]),  //对url进行编码
      5         // _url = "https://iservice.xxxxxx.com.cn";   //测试地址
      6         _url = "https://www.xxxx.com.cn";     //正式地址
      7 
      8     // 接入微信SDK
      9     $.ajax({
     10         //后台获取参数接口
     11         url: _url + "/weChatOfficialAccounts/getJSSign",
     12         type: 'get',
     13         data: {
     14             url: decodeURIComponent(localUrl)   //将传给后台的url解码,避免生成的签名错误
     15         },
     16         success: function (res) {
     17             // console.log(res)
     18             //得到参数
     19             let appId = "wxxxxad6axxxxx49",   //微信公众号后台获取
     20                 nonceStr = res.data.nonceStr,   //随机字符串,接口返回的
     21                 signature = res.data.signature, //生成的签名,接口返回的
     22                 timestamp = res.data.timestamp, //时间戳,必须秒为单位,接口返回的
     23                 shareUrl = res.data.url,        //确保分享的地址和签名的地址一致,所以分享的地址让后台直接返回来
     24                 shareTitle = '', //分享标题
     25                 shareDesc = '',  //分享内容
     26                 shareImg = '',    //分享图片
     27                 metaStr = '';   //QQ分享
     28 
     29             if (_type === 1) {  //学生宣传页
     30                 shareTitle = "招幼教,急!急!急!"
     31                 shareDesc = "全国上千家幼儿园等你来应聘..."
     32                 shareImg = _url + '/yi/upload/share_h5_student.png'
     33                 /*QQ分享*/
     34                 metaStr = `<meta itemprop="name" content="${shareTitle}"/>
     35                            <meta itemprop="image" content="${shareImg}"/>
     36                            <meta itemprop="description" name="description" content="${shareDesc}"/>`
     37                 $("head").append(metaStr)
     38             } else if (_type === 2) {   //企业宣传页
     39                 shareTitle = "您招老师吗?"
     40                 shareDesc = "本人已考取教师资格证书,普通话证书等,擅长钢琴,舞蹈,创意美术,喜欢..."
     41                 shareImg = _url + '/yi/upload/share_h5_garden.png'
     42                 /*QQ分享*/
     43                 metaStr = `<meta itemprop="name" content="${shareTitle}"/>
     44                            <meta itemprop="image" content="${shareImg}"/>
     45                            <meta itemprop="description" name="description" content="${shareDesc}"/>`
     46                 $("head").append(metaStr)
     47             } else if (_type === 3 || _type === 4 || _type === 5 || _type === 6 || _type === 7 || _type === 8 || _type === 9) {   //首页home.html
     48                 shareTitle = "一站式服务"
     49                 shareDesc = "线上招聘双选,APP实习管理及在线实习报告生成,就业质量跟踪及再就业推荐"
     50                 shareImg = _url + '/yi/upload/share_h5_home.png'
     51                 /*QQ分享*/
     52                 metaStr = `<meta itemprop="name" content="${shareTitle}"/>
     53                            <meta itemprop="image" content="${shareImg}"/>
     54                            <meta itemprop="description" name="description" content="${shareDesc}"/>`
     55                 $("head").append(metaStr)
     56             } else if (_type === 10) {  //h5新闻详情
     57                 shareTitle = $(".h1").text()
     58                 shareDesc = $("p:first").text()
     59                 shareImg = $("img:first").attr("src")
     60                 /*QQ分享*/
     61                 metaStr = `<meta itemprop="name" content="${shareTitle}"/>
     62                            <meta itemprop="image" content="${shareImg}"/>
     63                            <meta itemprop="description" name="description" content="${shareDesc}"/>`
     64                 $("head").append(metaStr)
     65             } else if (_type === 11) {  //学生简历
     66                 console.log('页面标题', document.title)
     67                 shareTitle = $(".stuName").text() + '的简历'
     68                 shareDesc = $(".selfEvaluateAduit").text()
     69                 shareImg = $(".scroll_box img:first").attr("src")
     70                 /*QQ分享*/
     71                 metaStr = `<meta itemprop="name" content="${shareTitle}"/>
     72                            <meta itemprop="image" content="${shareImg}"/>
     73                            <meta itemprop="description" name="description" content="${shareDesc}"/>`
     74                 $("head").append(metaStr)
     75             } else {
     76                 shareTitle = $(document).attr("title")
     77                 shareDesc = $("#desc").text()
     78             }
     79 
     80             //通过微信config接口注入配置
     81             wx.config({
     82                 debug: false, // 默认为false  为true的时候是调试模式,会打印出日志(PC-控制台、手机-alert弹出)
     83                 appId: appId,
     84                 timestamp: timestamp,
     85                 nonceStr: nonceStr,
     86                 signature: signature,
     87                 jsApiList: [
     88                     "updateAppMessageShareData",  //“分享给朋友”及“分享到QQ”
     89                     "updateTimelineShareData",  //“分享到朋友圈”及“分享到QQ空间”
     90                     'onMenuShareWeibo'  //分享到腾讯微博
     91                 ]
     92             });
     93 
     94             //配置自定义分享内容
     95             window.share_config = {
     96                 'share': {
     97                     'title': shareTitle, // 分享标题
     98                     'desc': shareDesc, // 分享描述
     99                     'link': shareUrl, // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致(就是在公众号后台配置的那个)
    100                     'imgUrl': shareImg, // 分享图标
    101                     'success': function (res) {
    102                         // 设置成功
    103                         console.log("分享成功", res)
    104                     },
    105                     'cancel': function (err) {
    106                         console.log("取消分享", err)
    107                     }
    108                 }
    109             };
    110 
    111             // config信息验证后会执行ready方法,所有接口调用都必须在config接口获得结果之后,config是一个客户端的异步操作,所以如果需要在页面加载时就调用相关接口,则须把相关接口放在ready函数中调用来确保正确执行。对于用户触发时才调用的接口,则可以直接调用,不需要放在ready函数中。
    112             wx.ready(function () {
    113                 wx.updateAppMessageShareData(share_config.share); // 微信好友、qq
    114                 wx.updateTimelineShareData(share_config.share); // 微信朋友圈、qq空间
    115                 wx.onMenuShareWeibo(share_config.share); // 腾讯微博
    116             });
    117 
    118             // config信息验证失败会执行error函数,如签名过期导致验证失败,具体错误信息可以打开config的debug模式查看,也可以在返回的res参数中查看,对于SPA可以在这里更新签名。
    119             wx.error(function(err){
    120                 console.log('错误信息', err)
    121             });
    122         },
    123         fail: function (err) {
    124             console.log("ajax请求失败", err)
    125         },
    126     });
    127 
    128 })

        以上步骤全部完成,就可以分享了!

  • 相关阅读:
    Linux Shell 01 脚本与变量
    Linux下shell颜色配置
    Linux下Redis安装及配置
    Linux Shell 03 条件测试
    OSX下VirtualBox安装CentOS
    Log4j配置与使用
    Linux 环境变量的配置
    OS X下安装Redis及配置开机启动
    圈复杂度
    (转)Qt Model/View 学习笔记 (一)——Qt Model/View模式简介
  • 原文地址:https://www.cnblogs.com/rzsyztd/p/13803973.html
Copyright © 2020-2023  润新知