关于新版本微信分享的一些汇总

<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">因为公司的项目主要是在微信上运行的,所以就要接触微信的分享接口等。</span>

但是因为微信要处理那些类似于“分享后查看结果”的页面,就把接口给改了,发布了新版本的微信,针对这个问题。

新的微信sdk说明文档地址:http://mp.weixin.qq.com/wiki/7/aaa137b55fb2e0456bf8dd9148dd613f.html


大概看了一下内容还是挺丰富的,但是:

在使用微信JS-SDK对应的JS接口前,需确保公众号已获得使用对应JS接口的权限,可登录微信公众平台进入“开发者中心”查看对应的接口权限。

注意: 所有的JS接口只能在公众号绑定的域名下调用,公众号开发者需要先登录微信公众平台进入“公众号设置”》“功能设置”里填写“JS接口安全域名”。


所以,要用的话,也不是那么的方便。

昨天听说有牛人破了这个问题,详细的代码如下:


首先引入WeiXinapi.js文件:

一个js代码的地址:http://soth.zerom.cn/zylt_invite_6/js/WeixinApi.js


然后,在html中必须加入以下DOM:

<div style="display:none">
        <p>
            <button id="optionMenu">WeixinApi.hideOptionMenu</button>
        </p>
        <p>
            <button id="networkType">WeixinApi.getNetworkType</button>
        </p>
        <p>
            <button id="imagePreview">WeixinApi.imagePreview</button>
        </p>
        <p>
            <button id="closeWindow">WeixinApi.closeWindow</button>
        </p>
        <p>
            <button id="scanQRCode">WeixinApi.scanQRCode</button>
        </p>

        <p>
            <button id="getInstallState">WeixinApi.getInstallState</button>
        </p>

        <p>
            <button id="sendEmail">WeixinApi.sendEmail</button>
        </p>

        <p>
            <a href="http://www.baidufe.com/fe/demo/static/html/weixin-api-demo.html?" id="refresh">点击这里刷新!!!!</a>
        </p>
    </div>

因为这个是不需要显示的内容,所以display:none;

然后在最后加入分享的js:

// 开启Api的debug模式
        WeixinApi.enableDebugMode();

        // 给按钮增加click事件:请不要太纠结这个写法,demo而已
        var addEvent = function(elId,listener){
            document.getElementById(elId)
                    .addEventListener('click',function(e){
                        if(!window.WeixinApi || !window.WeixinJSBridge) {
                            //alert('请确认您是在微信内置浏览器中打开的,并且WeixinApi.js已正确引用');
                            e.preventDefault();
                            return false;
                        }
                        listener(this,e);
                    },false);
        };

        // 两个Flag
        var optionMenuOn = true;
        var toolbarOn = true;

        // optionMenu的控制
        addEvent('optionMenu',function(el,e){
            if(optionMenuOn) {
                el.innerHTML = "WeixinApi.showOptionMenu";
                WeixinApi.hideOptionMenu();
            }else{
                el.innerHTML = "WeixinApi.hideOptionMenu";
                WeixinApi.showOptionMenu();
            }
            optionMenuOn = !optionMenuOn;
        });

        // 获取网络类型
        addEvent('networkType',function(el,e){
            WeixinApi.getNetworkType(function(network) {
                alert("当前网络类型:" + network);
            });
        });

        // 调起客户端的图片播放组件
        addEvent('imagePreview',function(el,e){
            location.href = "http://www.baidufe.com/wximage?tag=%E7%BE%8E%E5%A5%B3";
        });

        // 关闭窗口
        addEvent('closeWindow',function(el,e){
            WeixinApi.closeWindow({
                success : function(resp){
                    alert('关闭窗口成功!');
                },
                fail : function(resp){
                    alert('关闭窗口失败');
                }
            });
        });

        // 打开扫码
        addEvent('scanQRCode',function(el,e){
            WeixinApi.scanQRCode({
                success : function(resp){
                    alert('扫描器已打开!');
                },
                fail : function(resp){
                    alert('扫描器无法打开');
                }
            });
        });

        // 判断是否安装对应的应用(需要官方打开权限)
        addEvent("getInstallState", function(el, e) {
            WeixinApi.getInstallState({
                packageName: "cn.dxy.android.aspirin",
                packageUrl: "dxy-aspirin"
            }, {
                success: function(resp) {
                    alert("App is installed, version " + resp.version);
                },
                fail: function(resp) {
                    alert("Oops, something goes wrong or app is not installed.");
                }
            })
        });

        // 发送邮件
        addEvent("sendEmail", function(el, e) {
            WeixinApi.sendEmail({
                subject : '邀请函|1月11日紫悦龙庭新品发布会',
                body : '邀请函|1月11日紫悦龙庭新品发布会'
            });
        });

        // 刷新
        addEvent('refresh',function(el,e){
            e.preventDefault();
            location.replace('?' + Math.random(),true);
        });

        // 需要分享的内容,请放到ready里
        WeixinApi.ready(function(Api) {

            // 微信分享的数据
            var wxData = {
                "appId": "", // 服务号可以填写appId
                "imgUrl" : '',
                "link" : '',
                "desc" : '',
                "title" : ""
            };

            // 分享的回调
            var wxCallbacks = {
                // 关闭favorite
                favorite:false,

                // 分享操作开始之前
                ready : function() {
                    // 你可以在这里对分享的数据进行重组
                    //alert("准备分享");
                },
                // 分享被用户自动取消
                cancel : function(resp) {
                    // 你可以在你的页面上给用户一个小Tip,为什么要取消呢?
                    //alert("分享被取消,msg=" + resp.err_msg);
                },
                // 分享失败了
                fail : function(resp) {
                    // 分享失败了,是不是可以告诉用户:不要紧,可能是网络问题,一会儿再试试?
                   // alert("分享失败,msg=" + resp.err_msg);
                },
                // 分享成功
                confirm : function(resp) {
                    // 分享成功了,我们是不是可以做一些分享统计呢?
                    //alert("分享成功,msg=" + resp.err_msg);
                },
                // 整个分享过程结束
                all : function(resp,shareTo) {
                    // 如果你做的是一个鼓励用户进行分享的产品,在这里是不是可以给用户一些反馈了?
                    //alert("分享" + (shareTo ? "到" + shareTo : "") + "结束,msg=" + resp.err_msg);
                }
            };

            // 用户点开右上角popup菜单后,点击分享给好友,会执行下面这个代码
            Api.shareToFriend(wxData, wxCallbacks);

            // 点击分享到朋友圈,会执行下面这个代码
            Api.shareToTimeline(wxData, wxCallbacks);

            // 点击分享到腾讯微博,会执行下面这个代码
            Api.shareToWeibo(wxData, wxCallbacks);

            // iOS上,可以直接调用这个API进行分享,一句话搞定
            Api.generalShare(wxData,wxCallbacks);

            // 有可能用户是直接用微信“扫一扫”打开的,这个情况下,optionMenu、toolbar都是off状态
            // 为了方便用户测试,我先来trigger show一下
            // optionMenu
            var elOptionMenu = document.getElementById('optionMenu');
            elOptionMenu.click(); // 先隐藏
            elOptionMenu.click(); // 再显示
        });

通过上面的三个步骤,就可以实现在新版本的手机微信上正常的分享指定的图片和文案了。

但是昨天测试了一下,如果在:

// 分享操作开始之前
                ready : function() {
                    // 你可以在这里对分享的数据进行重组
                    //alert("准备分享");
                },

这里重新给wxData赋值是无效的,因为分享的链接不是固定的,而是有变化的,所以这个方法暂时解决不了。

不知道是我使用方法有误还是怎么地?如果有大牛知道,请指教。


我在ready里面写的代码是:

wxData = {
                "appId": "", // 服务号可以填写appId
                "imgUrl" : '',
                "link" :sharelink,
                "desc" : '',
                "title" : ""
            };

其中sharelink是变量,在页面的处理程序中,这个sharelink变量会改变,但是在ready里面并没有修改成功,分享出去依然是初始化的值。


发现一个说明新版sdk的使用方法的帖子,收了,日后可以用到。

http://www.cocoachina.com/bbs/read.php?tid=281137&page=1&toread=1#tpc



补充原作者的测试页面以及博客:

http://www.baidufe.com/fe/demo/static/html/weixin-api-demo.html

http://www.baidufe.com/?from=singlemessage&isappinstalled=0

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值