联系方式
企业电话: 021-64391578
商务联系: 18717819904 林经理
迅速网络微信
微信平台
迅速网络微信

关注迅速公众平台

迅速网络微信
联系微信
迅速网络微信

关注微信联系人

迅速网络微信
邮件咨询
邮件咨询: 1368069293@qq.com
智能AI

在线智能AI

JSSDK实现微信分享功能

上海迅速网络


html
<script src="https://res.wx.qq.com/open/js/jweixin-1.6.0.js"></script>
<script>
$(function() {
    // 分享配置(请替换为你的实际值)
    var shareData = {
        title: '这里是分享的标题',           // 分享标题
        desc: '这里是分享的描述内容',         // 分享描述(仅好友)
        link: location.href,                // 分享链接,建议动态获取
        imgUrl: 'https://yourdomain.com/share.jpg', // 分享图标(必须是绝对路径)
        success: function () {
            // 分享成功回调
            console.log('分享成功');
            // 可在此处添加统计、积分等逻辑
            //例如:addSharePoint(openid);
        },
        cancel: function () {
            // 分享取消回调
            console.log('分享已取消');
        },
        fail: function(res) {
            // 分享失败
            console.error('分享失败:', res);
            alert('分享失败,请检查网络或权限');
        }
    };

    // ================== 微信JSSDK 初始化 ==================
    // 注意:以下 wx.config 和 wx.ready 必须在后端正确生成签名后调用
    // 前端不能独立完成签名,必须由后端提供 jsapi_ticket、nonceStr、timestamp、signature

    // 示例:假设后端通过模板注入了这些变量(推荐方式)
    // 如果是 API 方式,需先请求后端获取 config 参数
    wx.config({
        debug: false, // 上线前设为 false
        appId: '你的公众号AppID',           // 必填,公众号的唯一标识
        timestamp: parseInt(<?= $timestamp ?>), // 必填,生成签名的时间戳(由后端提供)
        nonceStr: '<?= $nonceStr ?>',      // 必填,生成签名的随机串(由后端提供)
        signature: '<?= $signature ?>',    // 必填,签名(由后端生成)
        jsApiList: [
            'updateAppMessageShareData',    // 分享给好友
            'updateTimelineShareData'       // 分享到朋友圈
        ]
    });

    wx.ready(function() {
        // 所有接口调用都必须在 config 接口获得结果之后,config是一个客户端的异步操作,
        // 所以如果需要在页面加载时就调用相关接口,则应在 ready 回调中执行

        // 更新“分享给朋友”数据
        wx.updateAppMessageShareData(shareData);

        // 更新“分享到朋友圈”数据
        wx.updateTimelineShareData({
            title: shareData.title,
            link: shareData.link,
            imgUrl: shareData.imgUrl,
            success: shareData.success,
            cancel: shareData.cancel,
            fail: shareData.fail
        });

        console.log('微信JSSDK初始化成功,分享已设置');
    });

    wx.error(function(res) {
        // config失败会执行error
        console.error('微信JSSDK配置失败:', res);
        alert('分享功能初始化失败,请刷新重试');
    });

    // ================== 页面内按钮:复制链接并关闭 ==================
    $('.clipBoardTxt').on('click', function () {
        const url = location.href;
        const tempInput = $('<input>').val(url).appendTo('body').select();
        try {
            document.execCommand('copy');
            alert('链接已复制,快去分享给好友吧!');
        } catch (err) {
            alert('复制失败,请手动复制链接');
        }
        tempInput.remove();

        // 关闭微信网页
        setTimeout(function () {
            WeixinJSBridge && WeixinJSBridge.invoke('closeWindow', {});
        }, 1500);
    });

    // ================== 摇一摇功能(保留原逻辑,仅修复关键错误) ==================
    var SHAKE_THRESHOLD = 1800;
    var last_update = 0;
    var x = y = z = last_x = last_y = last_z = 0;
    var num = 0;
    var shake_status = 0; // 0:未开始, 1:进行中, 2:结束
    var numMax = 10; // 目标摇动次数
    var price = 0;

    function deviceMotionHandler(eventData) {
        var acceleration = eventData.accelerationIncludingGravity;
        var curTime = new Date().getTime();

        if ((curTime - last_update) > 100) {
            var diffTime = curTime - last_update;
            last_update = curTime;

            x = acceleration.x;
            y = acceleration.y;
            z = acceleration.z;

            var speed = Math.abs(x + y + z - last_x - last_y - last_z) / diffTime * 10000;

            if (speed > SHAKE_THRESHOLD && shake_status === 1) {
                num++;
                $('#numberCount').text(num); // 使用正确选择器
                $('#shakingAudio')[0].play(); // 播放音效

                if (num >= numMax) {
                    shake_status = 2;
                    window.removeEventListener('devicemotion', deviceMotionHandler);
                    $('#shakingResult')[0].play();
                    drawRedbag(openid); // 抢红包请求
                }
            }

            last_x = x;
            last_y = y;
            last_z = z;
        }
    }

    function listenPhoneShake() {
        if (window.DeviceMotionEvent) {
            window.addEventListener('devicemotion', deviceMotionHandler, false);
            console.log('摇一摇监听已开启');
        } else {
            alert('您的设备不支持摇一摇功能');
        }
    }

    // 启动摇一摇(示例触发)
    // listenPhoneShake(); // 在合适时机调用,如倒计时结束

});
</script>

 

php
 
$jsapiTicket = '获取自微信的jsapi_ticket'; // 通过 access_token 获取
$protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off') || $_SERVER['SERVER_PORT'] == 443 ? "https://" : "http://";
$url = "$protocol$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
$timestamp = time();
$nonceStr = createNonceStr(); // 随机字符串

// 生成签名
$string = "jsapi_ticket=$jsapiTicket&noncestr=$nonceStr&timestamp=$timestamp&url=$url";
$signature = sha1($string);

// 输出给前端
echo "<script>
    var appId = '你的AppID';
    var timestamp = $timestamp;
    var nonceStr = '$nonceStr';
    var signature = '$signature';
</script>";

相关推荐
PHP获取和格式化时间戳
Thinkphp5 自定义上传文件名的实现方法
tp5 使用paginate分页获取数据对象之后 如何对对象进行数据添加
搜索引擎索引量和收录量的对比与网站优化影响
软件定制开发平台的重要性与优势

特别申明:本站的主旨在于收集互联网运营相关的干货知识,给运营小伙伴提供便利。 网站所收集到的公开内容均来自于互联网或用户投稿,并不代表本站认同其观点, 也不对网站内容的真实性负责,如有侵权,请联系站长删除

业务联系

迅速服务号
扫码添加微信好友
我们来联系您