莫让这世间的庸俗扰了清修,尽管三观已被腐蚀,但未来总是光明的。
2015/03/24/ - - 177 条评论 - 浏览量 : 155693

说明:2015年,微信公众平台升级了开发文档。

其实就是限制了没有加入公众平台的人的分享权限。

如果你没有公众平台的账号,你也可以copy过去使用,只是分享的时候没有介绍,只有标题和图片。

右下角灰色的介绍会用一个当前的网址代替。

说明:该代码所示没有图样,只有点击右上角的分享到朋友圈或者分享给朋友,才会显示出效果。

URL中不能含有? 建议使用伪静态


提示:最好去注册个账号https://mp.weixin.qq.com

注册的应该是非个人的订阅号,不然没有分享的功能。不用谢~

效果如下图所示:


我的是php,首先要做一个php的函数(我php差,我就这么叫,不服来打我~)

代码如下:

function jssdk(){
		$appid = '这里替换成你的appid';
		$secret = '这里替换成你的key';
		$_title = '微信';
		$code = $_GET['code'];//获取code
		$_SESSION['code'] = $code;//设置code缓存给微信付账使用
		$auth = file_get_contents("https://api.weixin.qq.com/sns/oauth2/access_token?appid=".$appid."&secret=".$secret."&code=".$code."&grant_type=authorization_code");//通过code换取网页授权access_token
		$jsonauth = json_decode($auth); //对JSON格式的字符串进行编码
		$arrayauth = get_object_vars($jsonauth);//转换成数组
		$openid = $arrayauth['openid'];//输出openid
		$access_token = $arrayauth['access_token'];
		$_SESSION['openid'] = $openid;
		
		$accesstoken = file_get_contents("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$appid."&secret=".$secret."");//获取access_token
		$token = json_decode($accesstoken); //对JSON格式的字符串进行编码
		$t = get_object_vars($token);//转换成数组
		$access_token = $t['access_token'];//输出access_token
		
		$jsapi = file_get_contents("https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=".$access_token."&type=jsapi");
		$jsapi = json_decode($jsapi);
		$j = get_object_vars($jsapi);
		$jsapi = $j['ticket'];//get JSAPI
		
		$time = 14999923234;
		$noncestr= $time;
		$jsapi_ticket= $jsapi;
		$timestamp=$time;
		$url='http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
		$and = "jsapi_ticket=".$jsapi_ticket."&noncestr=".$noncestr."&timestamp=".$timestamp."&url=".$url."";
		$signature = sha1($and);
		return $signature;
	}

最后的一句代码,就是说,如果你在输出页面使用<?=jssdk();?>,那么就会输出$signature的内容。其中上面的$time是我手动指定的,这个一定要跟输出页面的js代码的值一样。

输出页面代码如下:

<script type="text/javascript" src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script>
<script language="javascript" type="text/javascript">
wx.config({
    debug: false,//这里是开启测试,如果设置为true,则打开每个步骤,都会有提示,是否成功或者失败
    appId: '这里换成你的appid',
    timestamp: '14999923234',//这个一定要与上面的php代码里的一样。
    nonceStr: '14999923234',//这个一定要与上面的php代码里的一样。
    signature: '<?=jssdk();?>',
    jsApiList: [
      // 所有要调用的 API 都要加到这个列表中
	    'onMenuShareTimeline',
        'onMenuShareAppMessage',
        'onMenuShareQQ',
        'onMenuShareWeibo'
    ]
});
wx.ready(function () {
	wx.onMenuShareTimeline({
		title: "<?=$act['act_name']?>", // 分享标题
		link: "http://www.brandhd.com/v/events/view/<?=$act['act_id']?>", // 分享链接
		imgUrl: "http://www.brandhd.com<?=$act['act_poster_small']?>", // 分享图标
		success: function () { 
			// 用户确认分享后执行的回调函数
		},
		cancel: function () { 
			// 用户取消分享后执行的回调函数
		}
	});
	wx.onMenuShareAppMessage({
		title: "<?=$act['act_name']?>", // 分享标题
		desc: "<?=substr($act['act_stime'],0,10)?><?=$act['act_place']?>", // 分享描述
		link: "http://www.brandhd.com/v/events/view/<?=$act['act_id']?>", // 分享链接
		imgUrl: "http://www.brandhd.com<?=$act['act_poster_small']?>", // 分享图标
		type: '', // 分享类型,music、video或link,不填默认为link
		dataUrl: '', // 如果type是music或video,则要提供数据链接,默认为空
		success: function () { 
			// 用户确认分享后执行的回调函数
		},
		cancel: function () { 
			// 用户取消分享后执行的回调函数
		}
	});
	wx.onMenuShareQQ({
		title: "<?=$act['act_name']?>", // 分享标题
		desc: "<?=substr($act['act_stime'],0,10)?>\n<?=$act['act_place']?>", // 分享描述
		link: "http://www.brandhd.com/v/events/view/<?=$act['act_id']?>", // 分享链接
		imgUrl: "http://www.brandhd.com<?=$act['act_poster_small']?>", // 分享图标
		success: function () { 
		   // 用户确认分享后执行的回调函数
		},
		cancel: function () { 
		   // 用户取消分享后执行的回调函数
		}
	});
	wx.onMenuShareWeibo({
		title: "<?=$act['act_name']?>", // 分享标题
		desc: "<?=substr($act['act_stime'],0,10)?>\n<?=$act['act_place']?>", // 分享描述
		link: "http://www.brandhd.com/v/events/view/<?=$act['act_id']?>", // 分享链接
		imgUrl: "http://www.brandhd.com<?=$act['act_poster_small']?>", // 分享图标
		success: function () { 
		   // 用户确认分享后执行的回调函数
		},
		cancel: function () { 
			// 用户取消分享后执行的回调函数
		}
	});
});
</script>


      • var imgUrl = '˂img src=''/˃';
        var lineLink ='http://zcj0303.sgz.cnmei.com/4g/fengmian.php?u_id=';
        var descContent ='... 诚邀';
        var shareTitle = '新郎 : & 新娘1: 诚邀';
        var appid = '';
        求指教
      • 这为啥一定要是微信浏览器中才能显示呢,还有就是调用这个js必须是先点微信自带的分享朋友圈然后在退出来 在点击按钮才显示出来
      • 大神,求助,我前面都OK,但是自己做了个按钮,想在网页上直接点击分享,但是报错android 上返回 System:access_denied,ios 上返回not allowed
          • @小皇大神,我自己做的按钮(分享到朋友圈)必须先点击微信自带的分享到朋友圈后才有反应···,求解!是不是微信自带的按钮还做了些其他的初始化工作,比如网站认证啊,啥的···
              • 微信早已经屏蔽了按钮类的触发,必须使用微信自带的分享。这个代码只是圈定分享后的内容是这样的。并非很只能的去自定义分享按钮。
      • 请教@小皇大神 分享到微博是要按钮出发 还是在微博里直接分享即可,我在微博里直接分享貌似 得不到想要的描述内容!
      • 你好,我刚才用了你的代码,发现第一次调用弹不出分享界面,当我点击右上角分享到朋友圈,关闭发送界面退到分享界面,这个时候可以调用你的分享到朋友圈代码了
      • 我写了一个按钮,点击触发“发送给好友”,可是,点击时,没反应,但是如果先点击微信自带的“发送给好友”之后,再点击按钮,就会弹出发送给好友的页面,为什么???
          • 看看代码实现, 实际上是提前加载预设的信息, title, desc……
            然后触发右上角按钮, 读取准备好的信息,
            这个接口并不是真正调用发送朋友圈/ 好友信息用的,
            微信实际是监听右上角事件。