最近在为一个php网站添加微信分享带图片,描述的功能,这个功能之前了解过,但并没有彻底实现过,这个功能需要认证的公众号支持。
第一步:在已经认证的公众号配置安全域名(网上很多教程)
第二步:在微信公众平台文档获取示例源码,阅读文档,如果时间紧迫可直接阅读源码
第三步:阅读源码并按需求修改源码

源码地址

源码文档结构如下:

由于网站采用mvc结构,并不能像sample.php那样调用jssdk.php,一开始,我是想直接使用

<script type="text/javascript" src="xxxxxxx/sample.php"></script>

即将sample.php当成javascript,但后来想了一下,这样做可能会有被跨域调用的风险,还是乖乖地使用ajax方式调用。

这里我先说明一下我遇到的问题,因为debug模式下可能一直弹出wx.config配置不正确的问题
1、先到微信公众号后台查看一下你有没有获取到分享接口的权限,
2、查看一下你的url有没有写死
3、查看一下你的传入的url是不是当前网页的url,否则会报错

代码展示
这里我们需要修改一下代码:
先上代码:
jssdk.php(只需修改getSignPackage方法,由于url不能hardcode,所以url作为参数传入)

//添加参数,$url由ajax传过来
public function getSignPackage($url) {$jsapiTicket = $this->getJsApiTicket();// 注意 URL 一定要动态获取,不能 hardcode.$protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://";//$url = "$protocol$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";//注释这行$timestamp = $this->now;$nonceStr = $this->createNonceStr();// 这里参数的顺序要按照 key 值 ASCII 码升序排序$string = "jsapi_ticket=$jsapiTicket&noncestr=$nonceStr&timestamp=$timestamp&url=$url";$signature = sha1($string);$signPackage = array("appId"     => $this->appId,"nonceStr"  => $nonceStr,"timestamp" => $timestamp,"url"       => $url,"signature" => $signature);return $signPackage; }

getwxconf.php接收ajax数据并返回wx.conf配置所需数据(json格式)

define('DT_DEBUG', 0);
if(DT_DEBUG) {error_reporting(E_ALL);$mtime = explode(' ', microtime());$debug_starttime = $mtime[1] + $mtime[0];
} else {error_reporting(0);
}
if(isset($_REQUEST['GLOBALS']) || isset($_FILES['GLOBALS'])) exit('Request Denied');
@set_magic_quotes_runtime(0);
$MQG = get_magic_quotes_gpc();
foreach(array('_POST', '_GET') as $__R) {if($$__R) { foreach($$__R as $__k => $__v) {if(substr($__k, 0, 1) == '_') if($__R == '_POST') { unset($_POST[$__k]); } else { unset($_GET[$__k]); }if(isset($$__k) && $$__k == $__v) unset($$__k);}}
}//以上代码防止$_GET['url']报错require_once "jssdk.php";//引入jssdk.php$jssdk = new JSSDK("yourappid", "yoursecret");//配置appid和app_secret
$url = !empty($_GET['url']) ? $_GET['url'] : '';
$signPackage = $jssdk->GetSignPackage($url);//传入url
echo json_encode($signPackage);
?>

修改footer.htm模板文件,加入jssdk

<script src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script>
<script  type="text/javascript">
$(function(){var url = location.href.split('#').toString();//url不能写死$.ajax({debug : true,//开启或关闭debug,方便调试type : "get",url : "getwxconf.inc2.php",dataType : "json",async : false,data:{url:url},success : function(data) {wx.config({appId: data.appId,//appId通过微信服务号后台查看timestamp: data.timestamp,//生成签名的时间戳nonceStr: data.nonceStr,//生成签名的随机字符串signature: data.signature,//签名jsApiList: [//需要调用的JS接口列表'checkJsApi','onMenuShareTimeline','onMenuShareAppMessage','onMenuShareQQ','onMenuShareWeibo']});},error:function(xhr, status, error){}})var meta = document.getElementsByTagName('meta'); var share_desc = ''; for(i in meta){ if(typeof meta[i].name!="undefined"&&meta[i].name.toLowerCase()=="description"){ share_desc = meta[i].content; } }//获取页面标题var wstitle = document.title //此处填写分享标题var wsdesc = share_desc; //此处填写分享简介(网站描述)var wslink = url; //此处获取分享链接var wsimg = "favicon.ico"; //此处获取分享缩略图wx.ready(function () {// 分享到朋友圈wx.onMenuShareTimeline({title: wstitle,link: wslink,imgUrl: wsimg,success: function () {alert('分享成功');},cancel: function () {}});// 分享给朋友wx.onMenuShareAppMessage({title: wstitle,desc: wsdesc,link: wslink,imgUrl: wsimg,success: function () {alert('分享成功');},cancel: function () {}});// 分享到QQwx.onMenuShareQQ({title: wstitle,desc: wsdesc,link: wslink,imgUrl: wsimg,success: function () {alert('分享成功');},cancel: function () {}});// 微信到腾讯微博wx.onMenuShareWeibo({title: wstitle,desc: wsdesc,link: wslink,imgUrl: wsimg,success: function () {alert('分享成功');},cancel: function () {}});// 分享到QQ空间wx.onMenuShareQZone({title: wstitle,desc: wsdesc,link: wslink,imgUrl: wsimg,success: function () {alert('分享成功');},cancel: function () {}});});
})</script>

总结:wx.conf这里卡了很久,后来发现是url问题,一开始我是写hardcode,后来查看文档发现必须动态获取;将hardcode改回$url = "$protocol$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]"还是报错,后来发现这个$url获取的是当前php文件的url而不是网页的路径,所以必须在前端传入url参数。

微信分享带图片,描述(php版)相关推荐

  1. vue 微信分享带图片,带title,带简介

    效果图如下 我写在app.vue中 <script> import sdk from './router/share'; // 引入sdk.export default {name: 'A ...

  2. 微信分享带图片加如下div

    <head> <meta charset="utf-8" /> <title>领红包未输入手机号</title> <meta ...

  3. 微信分享功能问题-描述内容换行,导致js加载失败

    jsContent内容存在换行符,导致js处理失败, 解决办法,在后台接口中替换'/r/n'为空,并截取前30位 weiXinJsSdk.setSharcontent(StringUtils.isNo ...

  4. 微信分享带缩略图,标题,简介的JS代码(亲测有效)

    (function(){    var appId = '',             imgUrl = 'http://huaweiapu.toprand.com/ascendG7/assets/i ...

  5. php微信分享带缩略图,静态页面实现微信分享带缩略图、标题和描述

    在前一篇文章<微信转发或分享朋友圈带缩略图.标题和描述的实现方法>中,余斗已经教大家如何实现在自有网站上实现微信分享后自带缩略图.标题和描述,这里是在动态php页面中实现,这里有很大的局限 ...

  6. 微信分享js 微信JS-SDK 微信分享接口开发(介绍版)

    https://blog.csdn.net/u013713832/article/details/72778692 本文主要是分享自己的开发过程,希望能给部分存在同样问题的朋友一点点帮助: 最近项目中 ...

  7. 微信JS-SDK 微信分享接口开发(介绍版)

    最近项目中的网页通过微信分享朋友或朋友圈等功能出现了无法显示分享图片等信息,后经过排查发现是微信版本升级导致,采用js-sdk完成分享接口,为了快速实现该功能效果,于是我打算通过前台js进行实现来看看 ...

  8. android微信分享icon不能显示,微信分享 icon图片不显示问题

    微信分享中,会有一个小图标显示出来,该怎么做,注意哪些问题 这个图片能显示的条件: 宽高大于300px 页面从上到下的第一张图片 除了上面两点,经过测试,还有以下要注意的 img标签上不能出现 dis ...

  9. 微信分享链接制作(先行版)

    (我在thinkphp的官网和QQ空间更新过)关于微信分享,即微信名片式的链接(如下图),首先需要有经过验证的微信公众号,否则是玩不来的. 制作这种名片式的分享链接的步骤如下: 1.需要在公众号里绑定 ...

最新文章

  1. 我对虚拟化的认识(一)
  2. 如何才能使用内存小或者显存小的设备训练神经网络
  3. linux connect自动重连,Linux系统中使用sshfs挂载远程主机的目录到本地系
  4. c++ 编译添加dll_matconvnet安装、编译、配置
  5. ux体验网站 英国_定义网站图像时的UX注意事项
  6. undefined reference to `std::cout'等错误
  7. rust新版组队指令_Rust最新控制台命令2017
  8. pycharm不能输入代码或删除代码
  9. PCA(主成分分析)的工作原理
  10. 【USACO】sprime
  11. hdu acm 1010
  12. 2008 php mysql_windows 2008配置Nginx+PHP+Mysql
  13. 新浪微博api的使用
  14. Java 设计简单班级管理系统
  15. 邱锡鹏《神经网络与深度学习》蒲公英书学习笔记
  16. Nginx配置规则详解,配置解释
  17. Spring data报错:Inferred type 'S' for type parameter 'S' is not within its bound;
  18. 2.Hadoop环境配置之虚拟机安装配置
  19. Intellij IDEA使用技巧
  20. DAO层,Service层,Controller层的作用

热门文章

  1. 玩头条整整20天了,发的内容只有头条,已有差不多250元的收益了
  2. Photoshop分享| 拼贴海报
  3. 吉林大学老师蓝牙点名被赞“有创意”
  4. m基于FPGA的GPS收发系统开发,包括码同步,载波同步,早迟门跟踪环,其中L1采用QPSK,L2采用BPSK
  5. 「管理数学基础」2.3 泛函分析:赋范空间与巴拿赫空间
  6. android 项目编译报错 符号: 类 shape 位置: 程序包 android.widget
  7. Python3实现向指定邮箱发送邮件(支持附件文件、图片等)
  8. Log4j2跨线程打印traceId
  9. plt_iris Matplotlib画图参数 Numpy 莺尾花演示
  10. Win10安装了Office右键没有新建Word,excel,PPT等选项解决方法