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为表单获取的URL 地址预设 http 字符串函数代码
May 26 PHP
浅析php fwrite写入txt文件的时候用 \r\n不能换行的问题
Aug 06 PHP
php ZipArchive压缩函数详解实例
Nov 06 PHP
php读取mysql的简单实例
Jan 15 PHP
php遍历数组的4种方法总结
Jul 05 PHP
页面利用渐进式JPEG来提升用户体验度
Dec 01 PHP
PHP register_shutdown_function()函数的使用示例
Jun 23 PHP
php反射类ReflectionClass用法分析
May 12 PHP
PHP使用curl制作简易百度搜索
Nov 03 PHP
php 替换文章中的图片路径,下载图片到本地服务器的方法
Feb 06 PHP
PHP+MySQL实现输入页码跳转到指定页面功能示例
Jun 01 PHP
PhpStorm2020 + phpstudyV8 +XDebug的教程详解
Sep 17 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
开发大型 PHP 项目的方法
2007/01/02 PHP
php去除html标记的原生函数详解
2015/01/27 PHP
MacOS 安装 PHP的图片裁剪扩展Tclip
2015/03/25 PHP
php错误日志简单配置方法
2016/07/11 PHP
js的[defer]和[async]属性
2014/11/24 Javascript
asp.net+jquery.form实现图片异步上传的方法(附jquery.form.js下载)
2016/05/05 Javascript
jQuery插件学习教程之SlidesJs轮播+Validation验证
2016/07/12 Javascript
JS根据生日月份和日期计算星座的简单实现方法
2016/11/24 Javascript
浅析JavaScript动画模拟拖拽原理
2016/12/09 Javascript
使用SVG基本操作API的实例讲解
2017/09/14 Javascript
详解Node.js模板引擎Jade入门
2018/01/19 Javascript
vue-better-scroll 的使用实例代码详解
2018/12/03 Javascript
Vue模板语法中数据绑定的实例代码
2019/05/17 Javascript
js实现表格数据搜索
2020/08/09 Javascript
[45:59]完美世界DOTA2联赛PWL S2 FTD vs GXR 第二场 11.22
2020/11/24 DOTA
[01:06:19]DOTA2-DPC中国联赛定级赛 LBZS vs SAG BO3第二场 1月8日
2021/03/11 DOTA
Python中内置数据类型list,tuple,dict,set的区别和用法
2015/12/14 Python
Python实现字典去除重复的方法示例
2017/07/31 Python
使用Eclipse如何开发python脚本
2018/04/11 Python
Python Numpy库安装与基本操作示例
2019/01/08 Python
对python:循环定义多个变量的实例详解
2019/01/20 Python
python numpy 按行归一化的实例
2019/01/21 Python
使用Python做定时任务及时了解互联网动态
2019/05/15 Python
Python图片的横坐标汉字实例
2019/12/04 Python
CSS3制作精致的照片墙特效
2016/06/07 HTML / CSS
浅谈HTML5 &amp; CSS3的新交互特性
2016/07/19 HTML / CSS
即时搜索数百万张门票:SeatsForEveryone.com
2018/08/26 全球购物
Made in Design德国:设计师家具、灯具和装饰
2019/10/31 全球购物
sort命令的作用和用法
2012/11/04 面试题
Linux的主要特性
2016/09/03 面试题
口腔医学技术应届生求职信
2013/11/09 职场文书
校园联欢晚会主持词
2014/03/17 职场文书
会计系毕业求职信
2014/08/07 职场文书
农村党建工作汇报材料
2014/10/27 职场文书
群众路线教育实践活动总结
2014/10/30 职场文书
幼儿园老师个人总结
2015/02/28 职场文书