H5页面分享微信朋友和朋友圈

3,814 阅读4分钟

文档--JS-SDK说明文档 developers.weixin.qq.com/doc/offiacc…

我是单独写了一个js————wxshare.js,在main.js中引入

import "./tools/share_wx";

JSSDK使用

1、绑定域名

先登录微信公众平台进入"公众号设置"—>"功能设置"里填写如下的JS接口安全域名 备注:登录后可在“开发者中心”查看对应的接口权限。

2、引入JS文件

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

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

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

安装js-sdk

"jweixin-module": "^1.6.0"

npm install jweixin-module --save

3、通过config接口注入权限验证配置。

所有需要使用JS-SDK的页面必须先注入配置信息,否则将无法调用

获取权限验证配置:

* 获取access_token(是公众号的全局唯一接口调用凭据,公众号调用各接口时都需使用access_token) //https://developers.weixin.qq.com/doc/offiaccount/Basic_Information/Get_access_token.html
https请求方式: GET
https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET

* 用access_token 获得jsapi_ticket(有效期7200秒,开发者必须在自己的服务全局缓存jsapi_ticket):
https请求方式: GET
https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=ACCESS_TOKEN&type=jsapi
* 用jsapi_ticket生成JS-SDK权限验证的签名

-----------------------以上获取签名需要后端配合,前端只需要接口调用获取---------------------------------

4、 注入config后通过ready接口处理成功验证

wx.ready(function(){
  // config信息验证后会执行ready方法,所有接口调用都必须在config接口获得结果之后,config是一个客户端的异步操作,所以如果需要在页面加载时就调用相关接口,则须把相关接口放在ready函数中调用来确保正确执行。对于用户触发时才调用的接口,则可以直接调用,不需要放在ready函数中。
});

附代码---wxshare.js

import axios from "axios";
import wx from "jweixin-module";
//给url给后台生成config配置
axios({
  method: "post",
  url: "/profitapi/getSign",    
  data: {
    url: window.location.href   //去掉hash后的url进行生成秘钥
  },
  timeout: 5000
})
  .then(function(res) {
    if (res.status === 200) {
      let appId = res.data.appId;
      let nonceStr = res.data.nonceStr;
      let timestamp = res.data.timeStamp;
      let signature = res.data.signature;

      let tit = "橙彩广告";
      let myurl = window.location.href;
      let des =
        "常州橙彩文化传媒有限公司简介....";
      wx_share(tit, des, myurl, appId, nonceStr, timestamp, signature);
    }
  })
  .catch(function(error) {
    if (error.statusText === "timeout") {
      // 请求超时
      alert(error);
    } else {
    }
  });

function wx_share(tit, des, myurl, appId, nonceStr, timestamp, signature) {
  wx.config({
    debug: true,
    // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。发布请改成false
    appId: appId, // 必填,公众号的唯一标识
    timestamp: timestamp, // 必填,生成签名的时间戳
    nonceStr: nonceStr, // 必填,生成签名的随机串
    signature: signature, // 必填,签名
    jsApiList: ["updateAppMessageShareData", "updateTimelineShareData"] // 必填,需要使用的JS接口列表
  });
  // 分享到朋友
  wx.ready(function() {
    // 检查api是否可用接口
    /* wx.checkJsApi({
    jsApiList: ["onMenuShareAppMessage"],
    success: function(res) {-->
        alert(res);-->
    }
    });*/
    // 自定义“分享给朋友”及“分享到QQ”按钮的分享内容
    wx.updateAppMessageShareData({
      title: tit, // 分享时的标题
      desc: des, // 分享描述
      link: myurl, // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
      imgUrl:
        "https://attachmentgw/.../fs/cn/5c/20254C1C9B5B69943A1EF968.jpg",   // 分享图标
      success() {
        // 设置成功
        console.log("updateAppMessageShareData success");
      }
    });
    // 自定义“分享到朋友圈”及“分享到QQ空间”按钮的分享内容
    wx.updateTimelineShareData({
      title: tit,
      link: myurl,
      imgUrl:
        "https://attachmentgw/.../fs/cn/5c/20254C1C9B5B69943A1EF968.jpg",
      success() {
        console.log("updateTimelineShareData success");
      }
    });
  });
}

调试(强烈建议)

强烈建议使用微信开发者工具进行调试

填坑:

1、invalid url domain当前页面所在域名与使用的appid没有绑定,请确认正确填写绑定的域名

2、invalid signature签名错误

* 确认config中nonceStr(js中驼峰标准大写S), timestamp与用以签名中的对应noncestr, timestamp一致。
* 确认url是页面完整的url(请在当前页面alert(location.href.split('#')[0])确认),包括'http(s)://'部分,以及'?'后面的GET参数部分,但不包括'#'hash后面的部分。
* 确认 config 中的 appid 与用来获取 jsapi_ticket 的 appid 一致。
* 确保一定缓存access_token和jsapi_ticket。
* 确保你获取用来签名的url是动态获取的--因为页面一旦分享,微信客户端会在你的链接末尾加入其它参数,如果不是动态获取当前链接,将导致分享后的页面签名失败(就是为什么二次分享失败的原因)

3、 the permission value is offline verifying这个错误是因为config没有正确执行,或者是调用的JSAPI没有传入config的jsApiList参数中。建议按如下顺序检查:

* 确认config正确通过。
* 如果是在页面加载好时就调用了JSAPI,则必须写在wx.ready的回调中。
* 确认config的jsApiList参数包含了这个JSAPI。

DEMO页面和示例代码

www.weixinsxy.com/jssdk/ demo.open.weixin.qq.com/jssdk/sampl…