程序员

微信公众开发 - H5分享流程和封装

2018-11-28  本文已影响95人  _既白_

H5 分享流程

第一步,绑定域名
【先登录微信公众平台进入“公众号设置”的“功能设置”里填写“JS接口安全域名”。 备注:登录后可在“开发者中心”查看对应的接口权限。】
这里绑定的时候需要注意不要带前面的http协议头。写法跟上一篇《微信公众号开发 - 静默授权获取用户信息》中的网页回调域名设置的写法是一样的。

第二步,引入JS文件

安装: npm install weixin-js-sdk
使用: var wx = require('weixin-js-sdk');

or

在需要调用JS接口的页面引入如下JS文件,(支持https): 
http://res.wx.qq.com/open/js/jweixin-1.0.0.js 
请注意,如果你的页面启用了https,务必引入 : 
https://res.wx.qq.com/open/js/jweixin-1.0.0.js ,否则将无法在iOS9.0以上系统中成功使用JSSDK

第三步,通过config接口注入权限验证配置

wx.config({
    debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
    appId: '', // 必填,公众号的唯一标识
    timestamp: , // 必填,生成签名的时间戳
    nonceStr: '', // 必填,生成签名的随机串
    signature: '',// 必填,签名,见附录1
    jsApiList: [] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2
});

 appId,timestamp,nonceStr,signature 必须后台签名返回这个四个字段的值。

第四步,通过ready接口处理成功验证

wx.ready(function(){

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

第五步,通过error接口处理失败验证

wx.error(function(res){
    /** config信息验证失败会执行error函数,如签名过期导致验证失败,具体错误信息可以打开
config的debug模式查看,也可以在返回的res参数中查看,对于SPA可以在这里更新签名。*/
});

H5 分享封装

import {$http} from '../tools';
import wx from 'weixin-js-sdk'
export function WxShare(shareObj) {

    let url = encodeURIComponent(window.location.href.split('#')[0]);
    $http.post(`xxxxxx`, {
        pageUrl: url
    }).then(function (res) {
        wx.config({
            debug: false,
            appId: res.result.appId, // 和获取Ticke的必须一样------必填,公众号的唯一标识
            timestamp: res.result.timestamp, // 必填,生成签名的时间戳
            nonceStr: res.result.noncestr, // 必填,生成签名的随机串
            signature: res.result.signature,// 必填,签名,见附录1
            //需要分享的列表项:发送给朋友,分享到朋友圈,分享到QQ,分享到QQ空间
            jsApiList: [
                'onMenuShareAppMessage', 'onMenuShareTimeline',
                'onMenuShareQQ', 'onMenuShareQZone'
            ]
        });
        let share_config = {
            "imgUrl": shareObj.imgUrl,
            "desc": shareObj.desc,
            "title": shareObj.title,
            "link": shareObj.link,
            "success": function () {
                //分享成功后的回调函数
                // alert('分享成功')
            },
            "cancel": function () {
                //用户取消分享执行的回调函数
                // alert('分享成功')
            }
        };

        wx.ready(function () {
            wx.onMenuShareAppMessage(share_config);//分享给好友
            wx.onMenuShareTimeline(share_config);//分享到朋友圈
            wx.onMenuShareQQ(share_config);//分享给手机QQ
            wx.onMenuShareQZone(share_config);//分享给手机QQ
        });
    });

    // 处理验证失败的信息
    wx.error(function (res) {
        alert(res.toString());
    });
WxShare({
                title: res.result.shareCircleTitle,
                desc: res.result.shareFriendSubtitle,
                imgUrl: 'https://static.jxypapp.com/wechat/common/share-logo(1).png',
                link: 'http://test-recycle-h5.jxypapp.com?shareFlag=shared&teamId='+res.result.teamList[0]['teamId'] + '&activityId=' + state.activityId
               });

注意事项:link中域名必须要和绑定域名相同。
上一篇下一篇

猜你喜欢

热点阅读