php版微信公众号自定义分享内容实现方法


Posted in PHP onSeptember 22, 2016

本文实例讲述了php版微信公众号自定义分享内容实现方法。分享给大家供大家参考,具体如下:

微信公众号号在手机中通过api接口可以实现自定义分享内容了,下面我们来看这个接口的实现步骤.

一、准备阶段

公众号一个,微网站一个.

二、绑定域名

先登录微信公众平台进入“公众号设置”的“功能设置”里填写“JS接口安全域名”.

备注:登录后可在“开发者中心”查看对应的接口权限。

三、代码

<?php
//curl获取请求文本内容
function get_curl_contents($url, $method ='GET', $data = array()) {
  if ($method == 'POST') {
    //使用crul模拟
    $ch = curl_init();
    //禁用htt<a href="/fw/photo.html" target="_blank">ps</a>
    <a href="/tags.php/curl_setopt/" target="_blank">curl_setopt</a>($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
    //允许请求以文件流的形式返回
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);
    curl_setopt($ch, CURLOPT_DNS_CACHE_TIMEOUT, 30);
    curl_setopt($ch, CURLOPT_URL, $url);
    $result = curl_exec($ch); //执行发送
    curl_close($ch);
  }else {
    if (ini_get('allow_<a href="/tags.php/fopen/" target="_blank">fopen</a>_url') == '1') {
      $result = file_get_contents($url);
    }else {
      //使用crul模拟
      $ch = curl_init();
      //允许请求以文件流的形式返回
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
      //禁用https
      curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
      curl_setopt($ch, CURLOPT_URL, $url);
      $result = curl_exec($ch); //执行发送
      curl_close($ch);
    }
  }
  return $result;
}
//获取微信公从号access_token
function wx_get_token() {
  $AppID = '1235464654';//AppID(应用ID)
  $AppSecret = '705641465sdfasdf456465a4sdf';//AppSecret(应用密钥)
  $url = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid='.$AppID.'&secret='.$AppSecret;
  $res = get_curl_contents($url);
  $res = json_decode($res, true);
  //这里应该把access_token缓存起来,至于要怎么缓存就看各位了,有效期是7200s
  return $res['access_token'];
}
//获取微信公从号ticket
function wx_get_jsapi_ticket() {
  $url = sprintf("https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=%s&type=jsapi", wx_get_token());
  $res = get_curl_contents($url);
  $res = json_decode($res, true);
  //这里应该把access_token缓存起来,至于要怎么缓存就看各位了,有效期是7200s
  return $res['ticket'];
}
$wx = array();
//生成签名的时间戳
$wx['timestamp'] = time();
//生成签名的随机串
$wx['noncestr'] = 'Wm3WZYTPz0wzccnW';
//jsapi_ticket是公众号用于调用微信JS接口的临时票据。正常情况下,jsapi_ticket的有效期为7200秒,通过access_token来获取。
$wx['jsapi_ticket'] = wx_get_jsapi_ticket();
//分享的地址,注意:这里是指当前网页的URL,不包含#及其后面部分,曾经的我就在这里被坑了,所以小伙伴们要小心了
$wx['url'] = 'http://www.baidu.com';
$string = sprintf("jsapi_ticket=%s&noncestr=%s×tamp=%s&url=%s", $wx['jsapi_ticket'], $wx['noncestr'], $wx['timestamp'], $wx['url']);
//生成签名
$wx['signature'] = sha1($string);
/*
注意事项
签名用的noncestr和timestamp必须与wx.config中的nonceStr和timestamp相同。
签名用的url必须是调用JS接口页面的完整URL。
出于安全考虑,开发者必须在服务器端实现签名的逻辑。
*/
?>

四、视图显示

在需要调用JS接口的页面引入如下JS文件,支持https:http://res.wx.qq.com/open/js/jweixin-1.0.0.js

通过config接口注入权限验证配置.

<script>
//通过config接口注入权限验证配置
wx.config({
  debug : false,
  appId : 'AppID',
  timestamp : '<?php echo $wx["timestamp"];?>',
  nonceStr : '<?php echo $wx["noncestr"];?>',
  signature : '<?php echo $wx["signature"];?>',
  jsApiList : ['onMenuShareTimeline', 'onMenuShareAppMessage', 'onMenuShareQQ', 'onMenuShareWeibo']
});
wx.ready(function(){
  var
    s_title = '分享标题',  // 分享标题
    s_link = '分享链接',  // 分享链接
    s_desc = '分享描述',  //分享描述
    s_imgUrl = '分享图片'; // 分享图标
  //朋友圈
  wx.onMenuShareTimeline({
    title: s_title, // 分享标题
    link: s_link, // 分享链接
    imgUrl: s_imgUrl, // 分享图标
    success: function () { },
    cancel: function () { }
  });
  //发送给好友
  wx.onMenuShareAppMessage({
    title: s_title, // 分享标题
    desc: s_desc, // 分享描述
    link: s_link, // 分享链接
    imgUrl: s_imgUrl, // 分享图标
    type: '', // 分享类型,music、video或link,不填默认为link
    dataUrl: '', // 如果type是music或video,则要提供数据链接,默认为空
    success: function () {},
    cancel: function () {}
  });
  //QQ好友
  wx.onMenuShareQQ({
    title: s_title, // 分享标题
    desc: s_desc, // 分享描述
    link: s_link, // 分享链接
    imgUrl: s_imgUrl, // 分享图标
    success: function () { },
    cancel: function () { }
  });
  //腾讯微博
  wx.onMenuShareWeibo({
    title: s_title, // 分享标题
    desc: s_desc, // 分享描述
    link: s_link, // 分享链接
    imgUrl: s_imgUrl, // 分享图标
    success: function () { },
    cancel: function () { }
  });
});
</script>

五、大功告成

基本上的流程就是这样了,比较麻烦的一点就是生成签名那一块,注意一点就行了.

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
PHP在Web开发领域的优势
Oct 09 PHP
使用php+xslt在windows平台上
Oct 09 PHP
PHP4实际应用经验篇(8)
Oct 09 PHP
php批量缩放图片的代码[ini参数控制]
Feb 11 PHP
如何解决CI框架的Disallowed Key Characters错误提示
Jul 05 PHP
php校验表单检测字段是否为空的方法
Mar 20 PHP
php中header跳转使用include包含解决参数丢失问题
May 08 PHP
php中使用gd库实现远程图片下载实例
May 12 PHP
php中smarty模板条件判断用法实例
Jun 11 PHP
php实现的操作excel类详解
Jan 15 PHP
PHP 实现页面静态化的几种方法
Jul 23 PHP
PHP addAttribute()函数讲解
Feb 03 PHP
php版微信公众平台接口开发之智能回复开发教程
Sep 22 #PHP
PHP判断用户是否已经登录(跳转到不同页面或者执行不同动作)
Sep 22 #PHP
PHP查看SSL证书信息的方法
Sep 22 #PHP
php版微信自动获取收货地址api用法示例
Sep 22 #PHP
php版微信公众平台回复中文出现乱码问题的解决方法
Sep 22 #PHP
php中foreach结合curl实现多线程的方法分析
Sep 22 #PHP
PHP实现上一篇下一篇的方法实例总结
Sep 22 #PHP
You might like
window.location和document.location的区别分析
2008/12/23 Javascript
在线编辑器中换行与内容自动提取
2009/04/24 Javascript
悄悄用脚本检查你访问过哪些网站的代码
2010/12/04 Javascript
JQuery入门——移除绑定事件unbind方法概述及应用
2013/02/05 Javascript
js取整数、取余数的方法
2014/05/11 Javascript
javascript学习笔记--数字格式类型
2014/05/22 Javascript
JS实现获取剪贴板内容的方法
2016/06/21 Javascript
JavaScript和JQuery获取DIV值的方法示例
2017/03/07 Javascript
vue2手机APP项目添加开屏广告或者闪屏广告
2017/11/28 Javascript
react-navigation 如何判断用户是否登录跳转到登录页的方法
2017/12/01 Javascript
vue.js默认路由不加载linkActiveClass问题的解决方法
2017/12/11 Javascript
详解vue-cli 3.0 build包太大导致首屏过长的解决方案
2018/11/10 Javascript
js中int和string数据类型互相转化实例
2019/01/16 Javascript
Vue中函数防抖节流的理解及应用实现
2020/04/24 Javascript
[52:27]2018DOTA2亚洲邀请赛 3.31 小组赛B组 paiN vs Secret
2018/04/01 DOTA
[01:11:46]DOTA2-DPC中国联赛 正赛 iG vs Magma BO3 第一场 2月23日
2021/03/11 DOTA
Python交换变量
2008/09/06 Python
介绍Python的Django框架中的QuerySets
2015/04/20 Python
python爬虫框架scrapy实战之爬取京东商城进阶篇
2017/04/24 Python
Python编程pygame模块实现移动的小车示例代码
2018/01/03 Python
python 找出list中最大或者最小几个数的索引方法
2018/10/30 Python
Python 从相对路径下import的方法
2018/12/04 Python
50行Python代码获取高考志愿信息的实现方法
2019/07/23 Python
python 实现绘制整齐的表格
2019/11/18 Python
python实现差分隐私Laplace机制详解
2019/11/25 Python
Django用数据库表反向生成models类知识点详解
2020/03/25 Python
idea2020手动安装python插件的实现方法
2020/07/17 Python
Python3爬虫中识别图形验证码的实例讲解
2020/07/30 Python
Python: glob匹配文件的操作
2020/12/11 Python
Ubuntu20.04环境安装tensorflow2的方法步骤
2021/01/29 Python
幼师岗位求职简历的自荐信格式
2013/09/21 职场文书
校园游戏活动新闻稿
2014/10/15 职场文书
有限责任公司股东合作协议书范本
2014/10/30 职场文书
公司行政主管岗位职责
2015/04/09 职场文书
检讨书怎么写?
2019/06/21 职场文书
十大最强水系宝可梦,最美宝可梦排第三,榜首大家最熟悉
2022/03/18 日漫