前端

引入js

<script type="text/javascript" src="http://res.wx.qq.com/open/js/jweixin-1.2.0.js"></script>

<script type="text/javascript">

$(function(){
            $('.wyh_pro').click(function() {
                $(this).hide();
            });
            $.ajax({
                url:'<?=site_url('api/api_wechat/jsapi_config_params');?>',
                type:'post',
                data:{url:'<?=$url;?>'},
                dataType:'json',
                async:false,
                success: function(res) {
                    wx.config({
                        debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
                        appId: res.data.appid, // 必填,公众号的唯一标识
                        timestamp: res.data.timestamp, // 必填,生成签名的时间戳
                        nonceStr: res.data.noncestr, // 必填,生成签名的随机串
                        signature: res.data.signature,// 必填,签名
                        jsApiList: [
                        'checkJsApi',  
                        'onMenuShareTimeline', 
                        'onMenuShareAppMessage', 
                        'onMenuShareQQ',  
                        'onMenuShareWeibo' 
                        ]
                    });
                }
            });
            wx.ready(function () {     
        
                wx.onMenuShareAppMessage({//分享朋友    
                    title: '<?=$_SESSION['user']['tenant_name']?>',    
                    desc: '<?=$_SESSION['user']['tenant_name']?>分享',    
                    link: '<?=site_url('wechat/main/enter/').$tenant_id;?>',    
                    // imgUrl: '<?=base_url();?>media/wechat/luckdraw/img/logo.png'
                });  
                wx.onMenuShareTimeline({//分享朋友圈  
                    title: '<?=$_SESSION['user']['tenant_name']?>',    //标题
                    desc: '<?=$_SESSION['user']['tenant_name']?>分享',    //内容
                    link: '<?=site_url('wechat/main/enter/').$tenant_id;?>',    //页面
                    // imgUrl: '<?=base_url();?>media/wechat/luckdraw/img/logo.png'//logo图片
                });    
            });

});

</script>

后台

/**
     * wechat
     * 获取jsapi config参数
     */
    public function jsapi_config_params() {
        $sign_data = [];
        $sign_data['jsapi_ticket'] = $this->get_jsapi_ticket($_SESSION['user']['tenant_id']);//获取jsapi_ticket
        $this->return['data']['noncestr'] = $sign_data['noncestr'] = md5(rand(100000,999999));//生成noncestr
        $this->return['data']['timestamp'] = $sign_data['timestamp'] = time();//生成timestamp
        $this->return['data']['url'] = $sign_data['url'] = $this->input->post('url');//生成url
        $this->return['data']['signature'] = $this->get_jsapi_sign($sign_data);//生成signature
        $this->return['data']['appid'] = $this->app_id;//这是appid
        $this->result();

}

//验证签名

private function get_jsapi_sign($data) {
        ksort($data);
        $tmpSign = $this->arrToTempStr($data);
        $sign = strtolower(sha1($tmpSign));
        return $sign;

}

/**
     * wechat
    * 获取当前jsapi_ticket
    */

public function get_jsapi_ticket($tenant_id) {

//将jsapi_ticket存入数据库$tenant_id为数据库的唯一标识数据库表结构如下

$this->load->model('system_wechat_jsapi_tickets_model','system_wechat_jsapi_tickets');

//查询出jsapi_ticket是否存在

$res = $this->system_wechat_jsapi_tickets->find(['tenant_id' => $tenant_id]);

//不存在就创建一条

if (!$res || !is_array($res)) {

$jsapi_ticket = $this->get_new_jsapi_ticket($tenant_id);//获取一个新的jsapi_ticket

//在数据库增加一条新的数据

$this->system_wechat_jsapi_tickets->create(['jsapi_ticket' => $jsapi_ticket,'time' => date('Y-m-d H:i:s'),'tenant_id' => $tenant_id]);
            return $jsapi_ticket;//返回jsapi_ticket
        } else if (time() - strtotime($res['time']) > 7150) {//如果生成的jsapi_ticket时间超过7200秒就更改jsapi_ticket
            $jsapi_ticket = $this->get_new_jsapi_ticket($tenant_id);
            $this->system_wechat_jsapi_tickets->update(['jsapi_ticket' => $jsapi_ticket,'time' => date('Y-m-d H:i:s')],['id' => $res['id']]);
            return $jsapi_ticket;//返回jsapi_ticket
        } else {
            return $res['jsapi_ticket'];//正常直接返回数据库存放的jsapi_ticket
        }

}

/**
     *重新获取jsapi_ticket
     */
    private function get_new_jsapi_ticket($tenant_id) {

$result = file_get_contents('https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=' . $this->get_access_token($tenant_id) . '&type=jsapi');

//get_access_token带着唯一标识获取token

$result = json_decode($result,true);
        return $result['ticket'];
    }

/**
     * 获取当前access_token同获取jsapi_ticket一样数据库表结构为

*/

public function get_access_token($tenant_id) {
        $this->load->model('system_wechat_access_token_model','system_wechat_access_token');
        $res = $this->system_wechat_access_token->find(['tenant_id' => $tenant_id]);
        if (!$res || !is_array($res)) {
            $access_token = $this->get_new_access_token();
            // 插入access_token
            $this->system_wechat_access_token->create(['access_token' => $access_token,'time' => date('Y-m-d H:i:s'),'tenant_id' => $tenant_id]);
            return $access_token;
        } else if (time() - strtotime($res['time']) > 7150) {
            $access_token = $this->get_new_access_token();
            // 更新access_token
            $this->system_wechat_access_token->update(['access_token' => $access_token,'time' => date('Y-m-d H:i:s')],['id' => $res['id']]);
            return $access_token;
        } else {
            return $res['access_token'];
        }

}

/**
     * 重新从微信获取access_token
     */
    private function get_new_access_token() {
        $result = file_get_contents('https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=' . $this->app_id . '&secret=' . $this->app_secret);
        $result = json_decode($result,true);
        return $result['access_token'];

}

/**
     * 数组转签名字符串
     */
    private function arrToTempStr($arr) {
        $str = '';
        foreach ($arr as $key => $value) {
            $str .= $key . '=' . $value . '&';
        }
        return substr($str,0,-1);
    }

微信公众号分享给微信好友和朋友圈相关推荐

  1. java微信公众号分享页面,微信公众号分享功能防坑指南

    //1.分享出去的链接域名必须和微信公众号后台配置的业务域名一致,注意一点,微信公众号配置的业务域名不能带端口号,否则分享不成功,微信小程序到是没有这个限制. //2.需要把即将废弃的分享接口也加进去 ...

  2. 微信分享次数统计、微信公众号分享关注统计

    作为系列文章的第五篇,本文重点探讨数据采集层中的微信分享追踪系统.微信分享,早已成为移动互联网运营的主要方向之一,以Web H5页面(下面称之为微信海报)为载体,利用微信庞大的好友关系进行传播,实现宣 ...

  3. 微信公众号分享链接自定义hash值的处理

    微信公众号默认的分享样式是直接分享一条链接的,样式丑陋.但是微信jsdk暴露了分享的API可以自定义分享样式. 一.分享鉴权及分享接口冲定义 这一块的文档很全面,不做细述.关键代码如下: functi ...

  4. 微信公众号分享配置无效。。分享出来的只是纯链接了,如何自定义微信公众号的分享

    微信公众号分享配置无效..分享出来的只是纯链接了 挺久没接微信公众号的项目开发了,最近突然接了一个,结果微信自定义分享给我整懵了.原本配置的好好的,屡试不爽的代码,居然死活不生效,开启debug,开发 ...

  5. 微信公众号分享网页注意点

    最近自己要做微信分享的防封,就研究一下市面做的分享防封原理,基本分流防封是一个做法. 过程讲述: 通过一个微信公众号分享一个入口,记住这个分享内容网页的内容最好一点违规的都没有,标题和图片可以带有诱导 ...

  6. 公众号关注html引导页,微信公众号分享的引导页(附素材)

    参考 : https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141115 不过要提醒的是,这种自定义的分享,微信要即将废弃了 ...

  7. 微信公众号分享问题总结

    文章目录 前言 微信公众号分享问题总结 微信的一些其他问题 结束 前言 -time:2020/11/18 第一次写博客,以后准备在解决一些问题的时候,写在博客里,方便自己寻找 这篇就 总结一些微信公众 ...

  8. (第三方平台)开发相关,解除80端口占用,微信公众号分享jssdk实现,微信开放平台登录接口接入,2022微信分享接入本地调试,微信分享定制

    一.开发相关 1.平台地址 微信开放平台 QQ互联平台SDK 2.文章收集 来自CSDN兄台的QQ登录使用的教程 微信网站应用开发的详细流程和引导 VueJs单页应用实现微信网页授权及微信分享功能 [ ...

  9. 微信公众号数据2019_微信公众号榜单排名,2020微信公众号排名

    微信公众号榜单排名,2020微信公众号排名 公众号排名优化的注意事项及细节今天给大家分享一下,作为微信公众号的排名优化对于大多数人来说都已经知道了有这个渠道的事情,其实很多的新产品及渠道出来以后有不少 ...

最新文章

  1. 【卷积码系列2】(n,k,m)卷积码的生成多项式矩阵系数转网格图描述(不使用MATLAB库函数)
  2. [react] createElement与cloneElement两者有什么区别?
  3. dedecms 添加,编辑文章时 文章标题有字数限制的解决办法。
  4. OnePlus是什么手机
  5. [leetcode]5321. 阈值距离内邻居最少的城市
  6. 汽车票售票系统 php,客车网上售票系统(2)
  7. 项目周期所涉及到的文档控制说明
  8. c语言1106回文数,Codeforces 1106 简要题解
  9. 用什么软件可以修改PDF文件,软件的操作方法
  10. 惠普服务器蓝屏怎么修复,惠普电脑蓝屏出现WDF_VIOLATION错误代码解决办法
  11. 信息工程计算机应用技术专业介绍,信息工程系举行2019级新生计算机应用技术专业介绍会...
  12. 凤凰跟范跑跑-龌龊的交易
  13. 六种常见WIFI部署场景
  14. python init构造函数___Python中的init\uuuu构造函数
  15. 树莓派 人体感应器HC-SR501的应用
  16. 【独行秀才】macOS Big Sur 11.5 正式版(20G71)原版镜像
  17. 比尔-盖茨2010年年信:世界首富的幸福观
  18. 奇梦达何以“贱卖”西安研发中心
  19. 05mysql---函数
  20. 分享软件——百度网盘快速下载和照片转字符文字

热门文章

  1. 样式padding-left和margin-left有什么区别?(from baidu zidao)
  2. 基于机器学习的自适应超体素分割揭示了人脑中的躯体定位组织
  3. Python下载网易云歌单歌曲,这个脚本你给多少分!
  4. 在win10上通过usb连接树莓派
  5. Ever-Flowers IN Never-Dream(19)
  6. win7显示dns服务器故障,Win7怎么解决DNS服务器故障?
  7. 增加php的amqp扩展
  8. java地图点线面_点线面类型互转
  9. Glide 入门到精通之四——图片缩放和调整大小
  10. 百度短网址 php,调用百度短网址API生成短网址