• PHP 微信分享


    share.php页面

    <?php
    //公众号设置一下 JS接口安全域名,不要http,www的一级域名,比如http://www.baidu.com域名下的某个路径要分享,js安全域名中只需填上 baidu.com 即可
    
    
    //关于分享地址,有两种情况
    //第一种由后端固定分享地址,但是因为微信分享出去后的地址结尾带有from和isappinstalled参数。分享后再分享就会失效,所以前端判断获取这两参数,给后端动态添加到分享地址后面
    $urlend = '';
    if(!empty($_POST['from']) && ($_POST['from'] == 'timeline' || $_POST['from'] == 'singlemessage')){
        $urlend = "?from=".$_POST['from'] . "&isappinstalled=".$_POST['isappinstalled'];
    }
    $shareurl = 'http://www.baidu.com/test/index.html'.$urlend;
    //第二种,由前端 window.location.href 获取当前页,传给后端
    if(!empty($_POST['shareurl'])){
        $shareurl = $_POST['shareurl'];
    }
    
    
    
    $data['ticket']    = 'bxLdikRXVbTPdHSM05e5u7AnbMMI4rNIxqVt3BVCv-JyYcjsM0DdvwuHhd69qZ3-EzyQnuaEawwfTUdJMumb6A';//假设已获取到ticket,具体获取方法格外查询
    $data['timestamp'] = time();//当前时间戳
    $data['noncestr']  = 'suijiwenzi';//自定义随机字符串
    $data['url']       = $shareurl;//分享地址,url路径后面详细到文件扩展名时结尾不需要加/,否则详细到文件夹名则需要加/
    //包括一些特殊路径比如 'http://www.baidu.com/test/index.php?s=home/index/test2' 其中有文件扩展名,则结尾也不需要加/
    //说白了就是必须和当前浏览器路径完全一致
    $data['appId']     = 'wxb71ed5a23a86e594';
    $data['imgUrl']    = 'http://www.baidu.com/test/shareImg.jpg';
    //生成签名
    $string1           = "jsapi_ticket=".$data['ticket']."&noncestr=".$data['noncestr']."&timestamp=".$data['timestamp']."&url=".$data['url'];
    $data['signature'] = sha1($string1);
    // 显示获得的数据
    echo json_encode($data);
    exit;
    ?>

    test_share.html页面

    <!DOCTYPE html>
    <html>
    <head>
    <title>测试html</title>
    </head>
    <body>
        <!-- 以下jquery文件应换成实际js文件路径,否则报错 -->
        <!-- <script type="text/javascript" src="js/jquery.min.js"></script> -->
        <script type="text/javascript" src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script>
        <script type="text/javascript">
            //var from           = GetQueryStringS("from");
            //var isappinstalled = GetQueryStringS("isappinstalled");
            var shareurl       = window.location.href;
    
            $.post('share.php', {
                //如果前端能直接获取当前页地址并传给后端,则 from 与 isappinstalled 可以不传
                //'from' : from,
                //'isappinstalled' : isappinstalled,
                'shareurl' : shareurl
            }, function(data) {
                console.log(data);
                var appId     = data['appId'];
                var timestamp = data['timestamp'];
                var noncestr  = data['noncestr'];
                var signature = data['signature'];
    
                var url       = data['url'];
                var imgUrl    = 'http://www.fotile.com/Video/html/img/shareImg1.jpg';
    
                wx.config({
                    debug : true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
                    appId : appId, // 必填,公众号的唯一标识
                    timestamp : timestamp, // 必填,生成签名的时间戳
                    nonceStr : noncestr, // 必填,生成签名的随机串
                    signature : signature,// 必填,签名,见附录1
                    jsApiList : [ 'onMenuShareTimeline', 'onMenuShareAppMessage' ]
                // 必填,需要使用的JS接口列表,所有JS接口列表见附录2
                });
    
                wx.ready(function() {
                    wx.onMenuShareTimeline({
                        title : '你敢信么?家里烟龄最长的竟是妈妈!', // 分享标题
                        desc : '最怕你被烟伤害的人,却是被烟伤害最久的人', // 分享描述
                        link : url, // 分享链接
                        imgUrl : imgUrl, // 分享图标
                        success : function() {
                            //alert('分享成功');
                        },
                        cancel : function() {
                            // 用户取消分享后执行的回调函数
                        }
                    });
                    // config信息验证后会执行ready方法,所有接口调用都必须在config接口获得结果之后,config是一个客户端的异步操作,所以如果需要在页面加载时就调用相关接口,则须把相关接口放在ready函数中调用来确保正确执行。对于用户触发时才调用的接口,则可以直接调用,不需要放在ready函数中。
                    wx.onMenuShareAppMessage({
                        title : '你敢信么?家里烟龄最长的竟是妈妈!', // 分享标题
                        desc : '最怕你被烟伤害的人,却是被烟伤害最久的人', // 分享描述
                        link : url, // 分享链接
                        imgUrl : imgUrl, // 分享图标
                        type : 'link', // 分享类型,music、video或link,不填默认为link
                        dataUrl : '', // 如果type是music或video,则要提供数据链接,默认为空
                        success : function() {
                            // 用户确认分享后执行的回调函数
                        },
                        cancel : function() {
                            // 用户取消分享后执行的回调函数
                        }
                    });
                });
            }, "json")
    
            function GetQueryStringS(name) {
                var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");
                var r = window.location.search.substr(1).match(reg);
                if (r != null)
                    return unescape(r[2]);
                return null;
            }
        </script>
    </body>
    </html>
  • 相关阅读:
    net.core.somaxconn的作用
    Python Mysql unsupported format character 'Y' (0x59) at index xx
    Oracle Compile Object
    Python 读取股市行情信息
    Microsoft Dynamics CRM 高级查找不能搜索实体的解决方案(浏览器插件)
    生成宝塔面板的命令
    项目路由设置了 history路由方式后,页面刷新404
    vue3 vite 在嵌套多层路由后部署服务器刷新空白
    js计算耗时,可多次调用获取耗时
    Element中Tree树结构组件中实现Ctrl和Shift多选
  • 原文地址:https://www.cnblogs.com/dreamhome/p/5994660.html
Copyright © 2020-2023  润新知