微信二次分享

微信二次分享

效果演示

微信二次分享

如何运行项目

// 克隆代码到本地
git clone https://github.com/Jameswain/WeiXinSDK.git    
// 安装依赖
npm i
// 运行项目
npm run dev

微信二次分享

通过charles配置代理,配置如下:

微信二次分享

微信二次分享

微信二次分享

微信二次分享

charles配置如下,你可以直接导入到你charles的Map remote,记住把IP地址换成你的IP地址。

<?xml version='1.0' encoding='UTF-8' ?>
<?charles serialisation-version='2.0' ?>
<map>
  <toolEnabled>true</toolEnabled>
  <mappings>
    <mapMapping>
      <sourceLocation>
        <protocol>http</protocol>
        <host>m.ximalaya.com</host>
        <port>80</port>
        <path>/49265909/album/11501536/</path>
      </sourceLocation>
      <destLocation>
        <protocol>http</protocol>
        <host>192.168.1.103</host>
        <port>8080</port>
        <path>/</path>
      </destLocation>
      <preserveHostHeader>false</preserveHostHeader>
      <enabled>true</enabled>
    </mapMapping>
    <mapMapping>
      <sourceLocation>
        <protocol>http</protocol>
        <host>m.ximalaya.com</host>
        <port>80</port>
        <path>/49265909/album/11501536/static/lib/jweixin-1.4.0.js</path>
      </sourceLocation>
      <destLocation>
        <protocol>http</protocol>
        <host>192.168.1.103</host>
        <port>8080</port>
        <path>/static/lib/jweixin-1.4.0.js</path>
      </destLocation>
      <preserveHostHeader>false</preserveHostHeader>
      <enabled>true</enabled>
    </mapMapping>
    <mapMapping>
      <sourceLocation>
        <protocol>http</protocol>
        <host>m.ximalaya.com</host>
        <port>80</port>
        <path>/app.js</path>
      </sourceLocation>
      <destLocation>
        <protocol>http</protocol>
        <host>192.168.1.103</host>
        <port>8080</port>
        <path>/app.js</path>
      </destLocation>
      <preserveHostHeader>false</preserveHostHeader>
      <enabled>true</enabled>
    </mapMapping>
  </mappings>
</map>

配置好代理以后,在微信里打开 m.ximalaya.com/49265909/album/11501536/ 这个网址,看到以下效果,表示代理配置成功,然后你就可以进行二次分享的测试了。

微信二次分享

接下来通过详细的步骤介绍如何接入微信二次分享操作。

官方接入文档:https://mp.weixin.qq.com/wiki...

1、配置JS接口安全域名

1、做二次分享首先需要申请一个微信服务号。

2、登录微信公众平台进入“公众号设置”的“功能设置”里填写“JS接口安全域名

微信二次分享

微信二次分享

微信二次分享

注意:这里的JS接口安全域名就是你需要进行二次分享页面的域名。

微信二次分享

注意:配置JS接口安全域名时,首先需要MP_verify_576FDJKHHJK29XXTpb.txt 文件放置在域名根目录下;然后才能保存成功,如果配置的域名下没有MP_verify_576FDJKHHJK29XXTpb.txt 文件是无法保存成功的。

2、引入js文件

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

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

以上是官方的原文提供的js文件地址,我们一般都会把jweixin-1.4.0.js文件下载下来放在我们域名的静态文件中进行引入。

微信二次分享

https://h5.jameswain.com/static/lib/jweixin-1.4.0.js // 发布到线上的地址

在index.html页面中加入以下代码:

微信二次分享

3、访问服务端接口获取配置信息

​ 这里需要通过服务端提供的获取配置信息接口,获取权限验证的相关配置,例如我获取配置信息的接口是:http://m.ximalaya.com/x-third... 返回结果如下:

{
    "appId": "wx3a4b4454f28a932b",
    "timestamp": 1541226502,
    "nonceStr": "705a85bb-1e66-4a54-85a8-ebef769faee6",
    "signature": "3b4e00872606b69438c168c13fad772327b1d1b3"
}

编写配置微信分享公共代码

// src/common/wxsdk.js
import axios from 'axios'
/**
 * 获取微信分享配置接口地址
 * 换项目的时候,直接拷贝该文件,修改这个接口地址即可直接使用微信分享
 */
const GET_SHARE_CONFIG_URL = '/x-thirdparty-web/weixinJssdk/config?signatureUrl=http%3A%2F%2Fm.ximalaya.com%2F49265909%2Falbum%2F11501536%2F&thirdpartyId=17&_=1541230577945';

let wxconfig = null;
/**
 * 初始化微信分享配置
 */
async function initWeiXinConfig() {
  try {
    const { data } = await axios.get(GET_SHARE_CONFIG_URL);
    wxconfig = data;
    wx.config({
      debug: true,                                // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
      appId: wxconfig.appId,                              // 必填,公众号的唯一标识
      timestamp: wxconfig.timestamp,                      // 必填,生成签名的时间戳
      nonceStr: wxconfig.nonceStr,                        // 必填,生成签名的随机串
      signature: wxconfig.signature,                      // 必填,签名
      jsApiList: [                                        // 必填,需要使用的JS接口列表
        'checkJsApi',               // 判断当前客户端是否支持指定JS接口
        'onMenuShareTimeline',      // 获取“分享到朋友圈”按钮点击状态及自定义分享内容接口
        'onMenuShareAppMessage',    // 获取“分享给朋友”按钮点击状态及自定义分享内容接口
        'onMenuShareQQ',            // 获取“分享到QQ”按钮点击状态及自定义分享内容接口
        'onMenuShareWeibo',         // 获取“分享到腾讯微博”按钮点击状态及自定义分享内容接口
        'onMenuShareQZone',         // 获取“分享到QZone”按钮点击状态及自定义分享内容接口
        'hideMenuItems',            // 批量隐藏功能按钮接口
        'showMenuItems',            // 批量显示功能按钮接口
        'hideAllNonBaseMenuItem',   // 隐藏所有非基础按钮接口
        'showAllNonBaseMenuItem',   // 显示所有功能按钮接口
        'translateVoice',           // 识别音频并返回识别结果接口
        'startRecord',              // 开始录音接口
        'stopRecord',               // 停止录音接口
        'onVoiceRecordEnd',
        'playVoice',                // 播放语音接口
        'onVoicePlayEnd',
        'pauseVoice',               // 暂停播放接口
        'stopVoice',                // 停止播放接口
        'uploadVoice',              // 上传语音接口
        'downloadVoice',            // 下载语音接口
        'chooseImage',              // 拍照或从手机相册中选图接口
        'previewImage',             // 预览图片接口
        'uploadImage',              // 上传图片接口
        'downloadImage',            // 下载图片接口
        'getNetworkType',           // 获取网络状态接口
        'openLocation',             // 使用微信内置地图查看位置接口
        'getLocation',              // 获取地理位置接口
        'hideOptionMenu',           // 隐藏右上角菜单接口
        'showOptionMenu',           // 显示右上角菜单接口
        'closeWindow',              // 关闭当前网页窗口接口
        'scanQRCode',               // 调起微信扫一扫接口
        'chooseWXPay',              // 发起一个微信支付请求
        'openProductSpecificView',  // 跳转微信商品页接口
        'addCard',                  // 批量添加卡券接口
        'chooseCard',               // 调起适用于门店的卡券列表并获取用户选择列表
        'openCard'                  // 查看微信卡包中的卡券接口
      ]
    });
  } catch (e) {
    console.error(e);
  }
};

export default {
  /**
   * 设置微信分享
   * @param opts
   */
  share(opts) {
    if (wx) {
      if (!wxconfig) {
        initWeiXinConfig();
      }
      //  默认配置
      const defaultOpts = {
        title: '互联网之子',
        desc: '在长大的过程中,我才慢慢发现,我身边的所有事,别人跟我说的所有事,那些所谓本来如此,注定如此的事,它们其实没有非得如此,事情是可以改变的。更重要的是,有些事既然错了,那就该做出改变。',
        link: window.location.href,
        imgUrl: 'http:// demo.open.weixin.qq.com/jssdk/images/p2166127561.jpg',
        trigger: function (res) {
          //  不要尝试在trigger中使用ajax异步请求修改本次分享的内容,因为客户端分享操作是一个同步操作,这时候使用ajax的回包会还没有返回
          console.log('用户点击分享到朋友圈', res);
        },
        success: function (res) {
          console.log('已分享');
        },
        cancel: function (res) {
          console.log('已取消');
        },
        fail: function (res) {
          console.log(JSON.stringify(res));
        }
      }
      wx.ready(function () {
        //  分享到朋友圈
        wx.onMenuShareTimeline({...defaultOpts, ...opts, ...{title: opts.desc, desc: opts.title}});
        //  分享给朋友
        wx.onMenuShareAppMessage({...defaultOpts, ...opts});
        //  分享到QQ
        wx.onMenuShareQQ({...defaultOpts, ...opts});
        //  分享到腾讯微博
        wx.onMenuShareWeibo({...defaultOpts, ...opts})
        //  分享到QZone
        wx.onMenuShareQZone({...defaultOpts, ...opts});
      });
      wx.error(function (res) {
        console.log('error=>', res);
      });
    } else {
      console.log('当前不是微信环境');
    }
  }
}

4、在入口文件中进行分享配置

​  在Vue的入口文件中进行微信二次分享的配置,分享文案可以根据你的业务进行调整。
注意:二次分享必须要把代码部署到你配置的JS接口安全域名下才能看到效果。

// src/main.js
import wxsdk from './common/wxsdk'

// 配置微信分享
wxsdk.share({
  title: '互联网之子',
  desc: '长大的过程中,我才慢慢发现,我身边的所有事,别人跟我说的所有事,那些所谓本来如此,注定如此的事,它们其实没有非得如此,事情是可以改变的。更重要的是,有些事既然错了,那就该做出改变。',
  imgUrl: 'https://gss0.bdstatic.com/94o3dSag_xI4khGkpoWK1HF6hhy/baike/crop%3D0%2C25%2C550%2C363%3Bc0%3Dbaike80%2C5%2C5%2C80%2C26/sign=afce76f80055b31988b6d8357e99ae14/267f9e2f070828381f3de6edb299a9014c08f112.jpg',
  trigger: function (res) {
    //  不要尝试在trigger中使用ajax异步请求修改本次分享的内容,因为客户端分享操作是一个同步操作,这时候使用ajax的回包会还没有返回
    console.log('用户点击分享到朋友圈', res);
  },
  success: function (res) {
    console.log('已分享');
  },
  cancel: function (res) {
    console.log('已取消');
  },
  fail: function (res) {
    console.log(JSON.stringify(res));
  }
});

此时微信二次分享就已经大功告成了。

相关推荐