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开发中常用的三个表单验证函数使用小结
Mar 03 PHP
php中选择什么接口(mysql、mysqli)访问mysql
Feb 06 PHP
深入php数据采集的详解
Jun 02 PHP
关于PHP模板Smarty的初级使用方法以及心得分享
Jun 21 PHP
ThinkPHP调用百度翻译类实现在线翻译
Jun 26 PHP
腾讯CMEM的PHP扩展编译安装方法
Sep 25 PHP
php上传大文件失败的原因及应对策略
Oct 20 PHP
微信红包随机生成算法php版
Jul 21 PHP
PHP实现将base64编码字符串转换成图片示例
Jun 22 PHP
PHP的简单跳转提示的实现详解
Mar 14 PHP
PHP写API输出的时用echo的原因详解
Apr 28 PHP
laravel 实现设置时区的简单方法
Oct 10 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 is_dir() 判断给定文件名是否是一个目录
2010/05/10 PHP
PHP对表单提交特殊字符的过滤和处理方法汇总
2014/02/18 PHP
php中smarty模板条件判断用法实例
2015/06/11 PHP
php 函数使用可变数量的参数方法
2017/05/02 PHP
浅谈PHP中的面向对象OOP中的魔术方法
2017/06/12 PHP
php微信公众号开发之关键词回复
2018/10/20 PHP
理解Javascript闭包
2013/11/01 Javascript
Javascript写入txt和读取txt文件示例
2014/02/12 Javascript
javascript与有限状态机详解
2014/05/08 Javascript
js获取滚动距离的方法
2015/05/30 Javascript
基于Bootstrap实现的下拉菜单手机端不能选择菜单项的原因附解决办法
2016/07/22 Javascript
微信小程序 textarea 组件详解及简单实例
2017/01/10 Javascript
js实现图片轮播效果学习笔记
2017/07/26 Javascript
JavaScript中this用法学习笔记
2019/03/17 Javascript
js实现弹幕墙效果
2020/12/10 Javascript
python实现根据窗口标题调用窗口的方法
2015/03/13 Python
Python数组遍历的简单实现方法小结
2016/04/27 Python
全面了解Python环境配置及项目建立
2016/06/30 Python
详解Python实现多进程异步事件驱动引擎
2017/08/25 Python
利用python将图片转换成excel文档格式
2017/12/30 Python
python学生信息管理系统(初级版)
2018/10/17 Python
Python3 Tkinter选择路径功能的实现方法
2019/06/14 Python
python使用mitmproxy抓取浏览器请求的方法
2019/07/02 Python
django 解决扩展自带User表遇到的问题
2020/05/14 Python
Python使用Matlab命令过程解析
2020/06/04 Python
浅谈matplotlib中FigureCanvasXAgg的用法
2020/06/16 Python
澳大利亚牛仔裤商店:Just Jeans
2016/10/13 全球购物
英国最大的在线照明商店:Litecraft
2020/08/31 全球购物
叙述DBMS对数据控制功能有哪些
2016/06/12 面试题
总经理驾驶员岗位职责
2013/12/04 职场文书
四年的个人工作自我评价
2013/12/10 职场文书
2014年庆元旦活动方案
2014/02/15 职场文书
航海技术专业毕业生求职信
2014/04/06 职场文书
管理工程专业求职信
2014/08/10 职场文书
推销搭讪开场白
2015/05/28 职场文书
Redis keys命令的具体使用
2022/06/05 Redis