share.php页面

<?php
//公众号设置一下 JS接口安全域名,不要http,www的一级域名,比如http://www.baidu.com域名下的某个路径要分享,js安全域名中只需填上 baidu.com 即可 //关于分享地址,有两种情况
//第一种由后端固定分享地址,但是因为微信分享出去后的地址结尾带有from和isappinstalled参数。分享后再分享就会失效,所以前端判断获取这两参数,给后端动态添加到分享地址后面
$urlend = '';
if(!empty($_POST['from']) && ($_POST['from'] == 'timeline' || $_POST['from'] == 'singlemessage')){
$urlend = "?from=".$_POST['from'] . "&isappinstalled=".$_POST['isappinstalled'];
}
$shareurl = 'http://www.baidu.com/test/index.html'.$urlend;
//第二种,由前端 window.location.href 获取当前页,传给后端
if(!empty($_POST['shareurl'])){
$shareurl = $_POST['shareurl'];
} $data['ticket'] = 'bxLdikRXVbTPdHSM05e5u7AnbMMI4rNIxqVt3BVCv-JyYcjsM0DdvwuHhd69qZ3-EzyQnuaEawwfTUdJMumb6A';//假设已获取到ticket,具体获取方法格外查询
$data['timestamp'] = time();//当前时间戳
$data['noncestr'] = 'suijiwenzi';//自定义随机字符串
$data['url'] = $shareurl;//分享地址,url路径后面详细到文件扩展名时结尾不需要加/,否则详细到文件夹名则需要加/
//包括一些特殊路径比如 'http://www.baidu.com/test/index.php?s=home/index/test2' 其中有文件扩展名,则结尾也不需要加/
//说白了就是必须和当前浏览器路径完全一致
$data['appId'] = 'wxb71ed5a23a86e594';
$data['imgUrl'] = 'http://www.baidu.com/test/shareImg.jpg';
//生成签名
$string1 = "jsapi_ticket=".$data['ticket']."&noncestr=".$data['noncestr']."&timestamp=".$data['timestamp']."&url=".$data['url'];
$data['signature'] = sha1($string1);
// 显示获得的数据
echo json_encode($data);
exit;
?>

test_share.html页面

<!DOCTYPE html>
<html>
<head>
<title>测试html</title>
</head>
<body>
<!-- 以下jquery文件应换成实际js文件路径,否则报错 -->
<!-- <script type="text/javascript" src="js/jquery.min.js"></script> -->
<script type="text/javascript" src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script>
<script type="text/javascript">
//var from = GetQueryStringS("from");
//var isappinstalled = GetQueryStringS("isappinstalled");
var shareurl = window.location.href; $.post('share.php', {
//如果前端能直接获取当前页地址并传给后端,则 from 与 isappinstalled 可以不传
//'from' : from,
//'isappinstalled' : isappinstalled,
'shareurl' : shareurl
}, function(data) {
console.log(data);
var appId = data['appId'];
var timestamp = data['timestamp'];
var noncestr = data['noncestr'];
var signature = data['signature']; var url = data['url'];
var imgUrl = 'http://www.fotile.com/Video/html/img/shareImg1.jpg'; wx.config({
debug : true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
appId : appId, // 必填,公众号的唯一标识
timestamp : timestamp, // 必填,生成签名的时间戳
nonceStr : noncestr, // 必填,生成签名的随机串
signature : signature,// 必填,签名,见附录1
jsApiList : [ 'onMenuShareTimeline', 'onMenuShareAppMessage' ]
// 必填,需要使用的JS接口列表,所有JS接口列表见附录2
}); wx.ready(function() {
wx.onMenuShareTimeline({
title : '你敢信么?家里烟龄最长的竟是妈妈!', // 分享标题
desc : '最怕你被烟伤害的人,却是被烟伤害最久的人', // 分享描述
link : url, // 分享链接
imgUrl : imgUrl, // 分享图标
success : function() {
//alert('分享成功');
},
cancel : function() {
// 用户取消分享后执行的回调函数
}
});
// config信息验证后会执行ready方法,所有接口调用都必须在config接口获得结果之后,config是一个客户端的异步操作,所以如果需要在页面加载时就调用相关接口,则须把相关接口放在ready函数中调用来确保正确执行。对于用户触发时才调用的接口,则可以直接调用,不需要放在ready函数中。
wx.onMenuShareAppMessage({
title : '你敢信么?家里烟龄最长的竟是妈妈!', // 分享标题
desc : '最怕你被烟伤害的人,却是被烟伤害最久的人', // 分享描述
link : url, // 分享链接
imgUrl : imgUrl, // 分享图标
type : 'link', // 分享类型,music、video或link,不填默认为link
dataUrl : '', // 如果type是music或video,则要提供数据链接,默认为空
success : function() {
// 用户确认分享后执行的回调函数
},
cancel : function() {
// 用户取消分享后执行的回调函数
}
});
});
}, "json") function GetQueryStringS(name) {
var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");
var r = window.location.search.substr(1).match(reg);
if (r != null)
return unescape(r[2]);
return null;
}
</script>
</body>
</html>

PHP 微信分享的更多相关文章

  1. H5页面微信分享和手Q分享设置

    RT: 一. 手Q分享: 如下代码所示:设置好 description,name,image,即可,唯一注意的是image最好是200*200,要不然过小不美观,过大加载太慢 <head> ...

  2. 微信jsApI及微信分享对应在手机浏览器的调用总结。

    摘录自别人的博客: 第一篇:微信内置浏览器的JsAPI(WeixinJSBridge续) 之前有写过几篇关于微信内置浏览器(WebView)中特有的Javascript API(Javascript ...

  3. android微信分享不出去?四步搞定!

    现在做的项目中集成了友盟分享,产品要求集成微信.朋友圈.QQ.QQ空间.短信这几个分享平台.按照友盟的文档集成一切都很顺利,集成成功以后测试QQ.QQ空间.短信都没有问题,唯独微信和朋友圈一直分享不出 ...

  4. url带#号,微信授权,微信分享那些坑

    微信授权的方法是,在项目里面配置拦截器(此处可以参考各个框架的拦截器)没有拦截器也可以,反正意思就是跳转到项目里的时候判断微信环境 如果是微信环境, 判断微信环境的方法是 var ua = windo ...

  5. Android微信分享图片大于32k进行压缩

    微信分享视频的时候,需要传一个图片数组,大小不能大于32k. 解决方案:使用Bitmap自带的compress方法解决了这个问题. 源码如下: <span style="font-si ...

  6. ionic 微信分享值各种坑

    去前段时间公司的app需要做微信分享,然后网上找的教程,在做的时候发现网上的教程各种坑,现在将做得过程分享出来 在做功能之前你需要做几步预备工作, 1.安装jdk,jre,并加入全局变量[这个网上还是 ...

  7. 微信分享JS函数(原创)[已失效]

    //微信内置浏览器分享事件 //来自:http://www.cnblogs.com/cielwater //分享朋友圈事件 //UpdateWeixinJSBridge(CircleModel[Jso ...

  8. ionic单页面应用中微信分享的问题总结

    首先说一下 ionic 是单页面应用,也就是说整个项目就有一个index.html, 那么问题就就来了, 如果我们不同的页面要分享给大家的是不同的链接和图片,应该怎么去做呢? 这就是我们今天要总结的东 ...

  9. android微信分享要注意的地方

    最近在做android端分享的功能,在微信开放平台查看了下官网上的开发文档,一步一步的按文档上的步骤来: 1.申请你的AppID 2.下载开发工具包 3.搭建开发环境,引入libammsdk.jar文 ...

随机推荐

  1. mysql查看锁表情况

    mysql> show status like 'Table%'; +----------------------------+----------+ | Variable_name       ...

  2. iOS App 无代码入侵的方法hook

    继续Objective-C runtime的研究 最近公司项目在做用户行为分析 于是App端在某些页面切换,交互操作的时候需要给统计系统发送一条消息 在几十个Controller 的项目里,一个一个地 ...

  3. 【转载】查看freebsd 服务器硬件信息

    http://3918479.blog.51cto.com/3908479/857900 查看服务器的cpu配置 Fb-bj138# dmesg | grep CPU CPU: Intel(R) Co ...

  4. Linux下browser-sync无法启动Chrome的解决方法

    笔者的环境: OS: Ubuntu Linux Browser: Chrome, Firefox 每次希望启动chrome浏览器,系统都会报错: browser-sync start -s --dir ...

  5. Redhat 7 或者 CentOS 7 密码破解

    1.在如下界面按 e 2.在 linux16 这一行的最后面添加 rd.break,然后按 ctrl + x 进入单用户模式 3.以读写的方式重新挂载 sysroot 4.切换到 sysroot 目录 ...

  6. Python模块和包

    模块和包是python组织代码的基本方式. 模块: python的每一个脚本文件都可称之为模块,模块的名称就是脚本的文件名.例如当我们写了一个test.py的脚本文件,则可以在同目录下的另外一个脚本m ...

  7. sql 中convert和cast区别

    SQL中的cast和convert的用法和区别 更多 来源:SQL学习浏览量: 学习标签: cast convert sql 本文导读:SQL中的cast 和convert都是用来将一种数据类型的表达 ...

  8. 闲说HeartBeat心跳包和TCP协议的KeepAlive机制

    很多应用层协议都有HeartBeat机制,通常是客户端每隔一小段时间向服务器发送一个数据包,通知服务器自己仍然在线,并传输一些可能必要的数据.使用心跳包的典型协议是IM,比如QQ/MSN/飞信等协议. ...

  9. sort

    sort -n -k2 filename 按第二列,按顺序排列 sort -nr -k2 filename 按第二列,按反向顺序排列

  10. Testlink安装问题收录

    1.windows下安装testlink,进入安装页面后,在检查一些相关配置环境时报错,如下:     Checking if /var/testlink/logs/ directory exists ...