微信JSSDK分享功能图文实例详解

本文实例讲述了微信JSSDK分享功能。分享给大家供大家参考,具体如下:

这里以微信分享到朋友圈,分享给微信好友为例为参考,进行调用测试,想添加其他的功能,自行查看开发人员文档即可

工欲善其事,必先利其器,好好利用下边的帮助工具,都是腾讯给开发人员的工具

1.微信开发者说明文档:点击查看

2.微信WEB开发者工具:

Windows 64位版本:下载地址

Windows 32位版本:下载地址

Mac版本:下载地址

3.微信JSSDK分享sample:点击下载

4.在线DEMO:http://203.195.235.76/jssdk/

微信版本6.0以后,原有的WeixinJSBridge.on('menu:share:timeline', function (argv) {}不再可在以使用,那如何在使用微信的其他功能呢?官方给出了JSSDK的使用,帮助我们解决~

前言:

虽然微信提供了JSSDK,但是这不意味着你可以用自定义的按钮来直接打开微信的分享界面,这套JSSDK只是把微信分享接口的内容定义好了,实际还是需要用户点击右上角的菜单按钮进行主动的分享,用户点开分享界面之后,出现的内容就会是你定义的分享标题、图片和链接

1.JSSDK使用步骤

2.实测图解

  • 2.1 测试页面:

2.2分享到朋友圈:



2.3分享到朋友圈:

(这个是触发success的效果,配图描述写错了,抱歉)

(这个是触发cancel的效果)

2.3调试界面:

3.实测代码样例

后台代码(jssdk.php见后边):

	//获取apptoken
	require_once "jssdk.php";
	$jssdk = new JSSDK($appid,$appsecret);//这里填写自己的appid 和secret
	$signPackage = $jssdk->GetSignPackage();
	$this->assign("signPackage",$signPackage);

JS配置代码

<script type="text/javascript" src='http://res.wx.qq.com/open/js/jweixin-1.0.0.js'></script>
 <script type="text/javascript">
 wx.config({
 debug: false,
 appId: '{$signPackage["appId"]}',
 timestamp: '{$signPackage["timestamp"]}',
 nonceStr: '{$signPackage["nonceStr"]}',
 signature: '{$signPackage["signature"]}',
 jsApiList: [
  // 所有要调用的 API 都要加到这个列表中
  'checkJsApi',
  'onMenuShareTimeline',
  'onMenuShareAppMessage',
  'onMenuShareQQ',
  'onMenuShareWeibo',
  'onMenuShareQZone'
 ]
 });
 </script>
 <script type="text/javascript" src='http://203.195.235.76/jssdk/js/zepto.min.js'></script>

JS分享代码:

<script type="text/javascript">
  //完成wx.config,执行这里
   wx.ready(function () {
    //分享到朋友圈
    wx.onMenuShareTimeline({
     title: '1111111', // 分享标题
     link:window.location.href,
     imgUrl: "{pigcms:$res['pic']}", // 分享图标
     success: function () {
		 // 分享成功执行此回调函数
     alert('success');
     },
     cancel: function () {
     alert('cancel');
     }
    });

    //分享给朋友
    wx.onMenuShareAppMessage({
     title: '22222', // 分享标题
     desc: '22222',
     link:window.location.href,
     imgUrl: "{pigcms:$res['pic']}", // 分享图标
     trigger: function (res) {
      // 不要尝试在trigger中使用ajax异步请求修改本次分享的内容,因为客户端分享操作是一个同步操作,这时候使用ajax的回包会还没有返回
     },
     success: function (res) {
		  // 分享成功执行此回调函数
      alert('已分享');
     },
     cancel: function (res) {
      alert('已取消');
     },
     fail: function (res) {
      alert(JSON.stringify(res));
     }
    });
   });

</script>

JSSDK类

jssdk.php

<?php
class JSSDK {
 private $appId;
 private $appSecret;

 public function __construct($appId, $appSecret) {
 $this->appId = $appId;
 $this->appSecret = $appSecret;
 }

 public function getSignPackage() {
 $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 = time();
 $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,
  "rawString" => $string
 );
 return $signPackage;
 }

 private function createNonceStr($length = 16) {
 $chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
 $str = "";
 for ($i = 0; $i < $length; $i++) {
  $str .= substr($chars, mt_rand(0, strlen($chars) - 1), 1);
 }
 return $str;
 }

 private function getJsApiTicket() {

  $accessToken = $this->getAccessToken();

  // 如果是企业号用以下 URL 获取 ticket
  // $url = "https://qyapi.weixin.qq.com/cgi-bin/get_jsapi_ticket?access_token=$accessToken";
  $url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?type=jsapi&access_token=$accessToken";
  $res = json_decode($this->httpGet($url));

  $ticket = $res->ticket;

 return $ticket;
 }

 private function getAccessToken() {
 // access_token 应该全局存储与更新,以下代码以写入到文件中做示例
 // 如果是企业号用以下URL获取access_token
 // $url = "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=$this->appId&corpsecret=$this->appSecret";
  $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=$this->appId&secret=$this->appSecret";
  $res = json_decode($this->httpGet($url));
  $access_token = $res->access_token;

 return $access_token;
 }

 private function httpGet($url) {
 $curl = curl_init();
 curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
 curl_setopt($curl, CURLOPT_TIMEOUT, 500);
 curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
 curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
 curl_setopt($curl, CURLOPT_URL, $url);

 $res = curl_exec($curl);
 curl_close($curl);

 return $res;
 }
}

更多关于PHP相关内容感兴趣的读者可查看本站专题:《PHP微信开发技巧汇总》、《php curl用法总结》、《PHP网络编程技巧总结》、《php字符串(string)用法总结》、《PHP中json格式数据操作技巧汇总》及《PHP针对XML文件操作技巧总结》

希望本文所述对大家PHP程序设计有所帮助。

(0)

相关推荐

  • 微信支付终于成功了(安卓、iOS)在此分享

    经过了几天的痛苦煎熬,终于把微信支付调通,整个调试过程很痛苦,痛苦的主要来源是微信支付的调试真的是,以前调试公众号支付也是一波三折啊.好吧,开始!首先说明,我这里主要没有使用getToken,getOrder方法,我的所有参数全部是在后端生成传递给前端的,看了一下前面朋友分享的源代码,还用到了jquery,md5,sha对于新手来说简直是天文啊,而且jquery在apicloud中效率不好,所以放弃了研究那个代码,另外官方也说了,最好签名等参数全部服务器端生成,微信也是这么说的. 注意:微信本身

  • 微信二次分享报错invalid signature问题及解决方法

    基于微信公众号开发的h5页面(使用jssdk接口),由用户A分享给用户B,用户B再次分享这个页面时,不能成功分享.问题出在用户B收到的分享链接与用户A打开的链接不同 A用户的链接为 http://test.com/test.html B用户收到的连接 http://test.com/test.html&from=singlemessage from=singlemessage是微信客户端为了区分分享来源再链接后自动添加的标记,再次分享时,需要在js代码中对自动获取的连接进行encodeURICo

  • 微信分享的标题、缩略图、连接及描述设置方法

    微信分享的标题.缩略图.连接及描述该如何设置,使用微信分享过程中会遇到这个情况,无解的朋友可以看看下面的代码 <script> var imgUrl = 'http://topic.xcar.com.cn/201403/ad_q3/pic/banner.jpg'; var lineLink = 'http://topic.xcar.com.cn/201403/ad_q3/index.php'; var descContent = "http://topic.xcar.com.cn/2

  • 微信小程序生成分享海报方法(附带二维码生成)

    昨天写了一篇小程序本地生成二维码的功能小程序本地生成二维码,趁热打铁今天给大家分享一下小程序内生成海报的功能以及具体步骤 这次分享海报里面的元素比较少,进行绘制的分别有头像,海报背景以及二维码(二维码的生成请看上面<小程序本地生成二维码>一文),此次没有涉及到文字的绘制,不过原理大致相同,这篇文章就不对文字绘制进行阐述了. 下面我们就开始吧

  • 基于js实现微信发送好友如何分享到朋友圈、微博

    微信浏览器内置了javascript私有对象WeixinJSBridge,可以实现发送给朋友.分享到朋友圈.分享到微博等功能. <script> var imgUrl = "图片地址"; var lineLink = "当前网址"; var descContent = "描述"; var shareTitle = '标题'; var appid = ''; function shareFriend() { WeixinJSBridge

  • 微信小程序实现的自定义分享功能示例

    本文实例讲述了微信小程序实现的自定义分享功能.分享给大家供大家参考,具体如下: 大家都知道,小程序有分享的功能,可以分享整个程序,也可以自定义分享的内容 onShareAppMessage 在 Page 中定义 onShareAppMessage 函数,设置该页面的分享信息. 只有定义了此事件处理函数,右上角菜单才会显示"分享"按钮 用户点击分享按钮的时候会调用 此事件需要 return 一个 Object,用于自定义分享内容 示例代码: Page({ onShareAppMessag

  • 微信公众平台开发教程②微信端分享功能图文详解

    本文实例讲述了微信公众平台微信端分享功能.分享给大家供大家参考,具体如下: 背景 初次尝试微信公众号的开发,对于学习方法的探索都是来源于网上的博客.问答,对于参差不齐的信息,自己也是有苦说不出,抽出一点时间写点文章,既是对自己的学习总结,也希望给予同是菜鸟的小白一点帮助. 今天想添加微信分享的功能,如果不进行自定义设计,那么当我们点击分享朋友圈.好友或者QQ好友.空间时,默认的标题就是<title>标签中的信息,而显示的描述信息就是链接,图片多是默认为页面中显示的第一张图片,显然这样的处理是不

  • php微信分享到朋友圈、QQ、朋友、微博

    本文实例为大家分享了php微信分享到朋友圈.QQ.朋友.微博的具体代码,供大家参考,具体内容如下 前台代码 <script src="http://res.wx.qq.com/open/js/jweixin-1.2.0.js"></script> <script> wx.config({ debug: false, appId: "{$signPackage['appId']}", timestamp: "{$signP

  • php实现微信分享朋友链接功能

    本文为大家分享了php实现微信分享朋友链接,供大家参考,具体内容如下 不是些高深知识,但是第一次做,确实费了很多的时间,终于一点一点的扣了出来,目前已经使用中. 解决这个问题,总共碰到了几次BUG,1是生成的签名不对,自己打印出来,在去微信的签名算法页面一一核对.这时候如果对了,还是不成功.那就是需要动态获取URL链接的.最后需要将 函数写在为微信的ready函数内,但是看文档讲需要用户触发的函数可以不写进去,所以当所有的问题解决后,发送给朋友的链接总是原生态的,后台又尝试将函数写入ready才

  • PHP开发微信支付的代码分享

    微信支付,即便交了保证金,你还是处理测试阶段,不能正式发布.必须到你通过程序测试提交订单.发货通知等数据到微信的系统中,才能申请发布. 然后,因为在微信中是通过JS方式调用API,必须在微信后台设置支付授权目录,而且要到二级三级目录下去,这对于使用MVC框架来说,是个小问题. 使用MVC,在开发环境,url往往是native url格式,不能保证一定是带有路径/的形式 所以,比较可靠的方式,是创建实体的子文件夹,这样的化,在系统整体url方面,需要进行一些改造. 另外,最后一步,js调用时,对于

随机推荐