php微信浏览器分享设置以及回调详解


Posted in PHP onAugust 01, 2016

在微信中分享给好友/分享到朋友圈这个功能应该是比较常用的了,就拿分享到朋友圈举例,分享出去的内容在朋友圈的展示是以一张小图片+一个简单的介绍的形式来给好友看到的,点击后才是详情,那么这么一来,这张小图片和这段小简介就直接成为了这个被分享后的内容的被点击率的重中之重。在默认情况下,这张图片会载入内容主题部分的第一张大图片,而简介只会加载一个网址。这样的展示方式还是相当不尽如人意的,那我们来看一下这一些内容,是通过什么形式来设置的,拿PHP来做一个举例: 

首先我们需要有一个公众号,并且获得appid及appsecret。 

然后,我们通过appid和appsecret,就可以向微信平台来换取access_token了。 

define("APPID", $appid);
define("APPSECRET", $appsecret);
 
// 获取access_token
$token_access_url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" . APPID . "&secret=" . APPSECRET;
$res = file_get_contents($token_access_url); //获取文件内容或获取网络请求的内容
$result = json_decode($res, true); //接受一个 JSON 格式的字符串并且把它转换为 PHP 变量
$access_token = $result['access_token'];

通过access_token,我们可以向微信平台索取一个jsapi_ticket:

// 获取jsapi_ticket
$ticket_url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=TOKEN";

$res = file_get_contents($ticket_url); //获取文件内容或获取网络请求的内容
$result = json_decode($res, true); //接受一个 JSON 格式的字符串并且把它转换为 PHP 变量
$ticket = $result['ticket'];

好了,准备工作就绪,我们可以开始我们的设置了。 

微信的分享设置是通过wx.config来进行的。 

<script>
wx.config({
  debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
  appId: '<?php echo APPID;?>', // 必填,公众号的唯一标识
  timestamp: <?php echo $timestamp;?>, // 必填,生成签名的时间戳
  nonceStr: '<?php echo $noncestr;?>', // 必填,生成签名的随机串
  signature: '<?php echo $signature;?>',// 必填,签名
  jsApiList: ['onMenuShareTimeline','onMenuShareAppMessage'] // 必填,需要使用的JS接口列表
});
</script>

中间appid就是我们微信公众号的appid,timestamp是当前的时间戳,noncestr是随机的字符串,用来生成签名的,signature是生成的签名,jsapilist是我们需要使用的微信接口,这边的话我们就使用分享给好友以及分享到朋友圈这两个接口就可以了。 

简单列一下timestamp,noncestr,以及signature的生成流程: 

// 生成签名
 // 生成随机字符串
class RandChar{
 function getRandChar($length){
  $str = null;
  $strPol = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz";
  $max = strlen($strPol)-1;

  for($i=0;$i<$length;$i++){
  $str.=$strPol[rand(0,$max)];//rand($min,$max)生成介于min和max两个数之间的一个随机整数
  }
  return $str;
 }
}
$randCharObj = new RandChar();
$noncestr = $randCharObj->getRandChar(16);


$timestamp = time();
if ($_SERVER['QUERY_STRING']){
  $url = 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'].'?'.$_SERVER['QUERY_STRING'];
}else{
  $url = 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'];
}

$parameters = array("noncestr" => $noncestr,
            "jsapi_ticket" => $ticket,
            "timestamp" => $timestamp,
            "url" => $url);
ksort($parameters);

$string1 = "";
foreach ($parameters as $key => $val){
  $string1 .= $key."=".$val."&";
}
$string1 = substr($string1,0,-1);
$signature = sha1($string1);

至此,我们对于wx.config的一个配置就已经完成了,接下去就可以自由设置我们刚刚提到的小图片和简介内容了: 

wx.ready(function(){
    // 分享到朋友圈设置
    wx.onMenuShareTimeline({
      title: '测试标题', // 分享标题
      link: 'http://www.baidu.com', // 分享链接
      imgUrl: 'http://mp.weixin.qq.com/wiki/static/assets/dc5de672083b2ec495408b00b96c9aab.png', // 分享图标
      success: function () { 
        alert("分享成功");
      },
      cancel: function () { 
        alert("分享失败");
      }
    });
    // 分享给好友
    wx.onMenuShareAppMessage({
      title: '测试标题', // 分享标题
      desc: '测试分享描述', // 分享描述
      link: 'http://www.baidu.com', // 分享链接
      imgUrl: 'http://mp.weixin.qq.com/wiki/static/assets/dc5de672083b2ec495408b00b96c9aab.png', // 分享图标
      type: '', // 分享类型,music、video或link,不填默认为link
      dataUrl: '', // 如果type是music或video,则要提供数据链接,默认为空
      success: function () { 
        alert("分享成功");
      },
      cancel: function () { 
        alert("分享失败");
      }
    });
  })

中间提一下,success和cancel这两个的值也是相当常用的,分别表示成功分享后的js回调以及取消分享后的回调,用来做一些判断用户分享朋友圈后显示心理测试答案之类的小功能还是很有用的哦。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
输出控制类
Oct 09 PHP
一个改进的UBB类
Oct 09 PHP
PHP 将逗号、空格、回车分隔的字符串转换为数组的函数
Jun 07 PHP
php生成略缩图代码
Jul 16 PHP
PHP中几个可以提高运行效率的代码写法、技巧分享
Aug 21 PHP
windows中为php安装mongodb与memcache
Jan 06 PHP
支持png透明图片的php生成缩略图类分享
Feb 08 PHP
四个PHP非常实用的功能
Sep 29 PHP
PHP 类与构造函数解析
Feb 06 PHP
PHP中for循环与foreach的区别
Mar 06 PHP
yii2 resetful 授权验证详解
May 18 PHP
WordPress伪静态规则设置代码实例
Dec 10 PHP
PHP+Apache+Mysql环境搭建教程
Aug 01 #PHP
Thinkphp和Bootstrap结合打造个性的分页样式(推荐)
Aug 01 #PHP
PHP实现将MySQL重复ID二维数组重组为三维数组的方法
Aug 01 #PHP
利用PHP自动生成印有用户信息的名片
Aug 01 #PHP
php+ajax登录跳转登录实现思路
Jul 31 #PHP
nginx下安装php7+php5
Jul 31 #PHP
header与缓冲区之间的深层次分析
Jul 30 #PHP
You might like
在PHP中使用Sockets 从Usenet中获取文件
2008/01/10 PHP
解析PHP高效率写法(详解原因)
2013/06/20 PHP
php实现二进制和文本相互转换的方法
2015/04/18 PHP
php 判断页面或图片是否经过gzip压缩的方法
2017/04/05 PHP
关于laravel5.5的定时任务详解(demo)
2019/10/23 PHP
用 JSON 处理缓存
2007/04/27 Javascript
prototype Element学习笔记(篇二)
2008/10/26 Javascript
jQuery Validation实例代码 让验证变得如此容易
2010/10/18 Javascript
推荐30个新鲜出炉的精美 jQuery 效果
2012/03/26 Javascript
jquery动画3.创建一个带遮罩效果的图片走廊
2012/08/24 Javascript
js Date概念详细介绍
2013/11/22 Javascript
js清理Word格式示例代码
2014/02/13 Javascript
jquery获取颜色在ie和ff下的区别示例介绍
2014/03/28 Javascript
Nodejs如何搭建Web服务器
2016/03/28 NodeJs
jQuery+CSS实现简单切换菜单示例
2016/07/27 Javascript
jQuery属性选择器用法示例
2016/09/09 Javascript
KnockoutJS 3.X API 第四章之数据控制流component绑定
2016/10/10 Javascript
简单实现nodejs上传功能
2017/01/14 NodeJs
js基于myFocus实现轮播图效果
2017/02/14 Javascript
利用纯JS实现像素逐渐显示的方法示例
2017/08/14 Javascript
Vue.js简易安装和快速入门(第二课)
2017/10/17 Javascript
nodejs提示:cross-device link not permitted, rename错误的解决方法
2019/06/10 NodeJs
微信小程序 动态修改页面数据及参数传递过程详解
2019/09/27 Javascript
JavaScript canvas实现雪花随机动态飘落
2020/02/08 Javascript
JavaScript中的惰性载入函数及优势
2020/02/18 Javascript
vue任意关系组件通信与跨组件监听状态vue-communication
2020/10/18 Javascript
简单谈谈python中的lambda表达式
2018/01/19 Python
python常用库之NumPy和sklearn入门
2019/07/11 Python
利用python批量爬取百度任意类别的图片的实现方法
2020/10/07 Python
详解appium自动化测试工具(monitor、uiautomatorviewer)
2021/01/27 Python
Html5如何唤起百度地图App的方法
2019/01/27 HTML / CSS
农业大学毕业生的个人自我评价
2013/10/11 职场文书
大学生求职工作的自我评价
2014/02/13 职场文书
大学生个人求职信
2014/06/02 职场文书
体操比赛口号
2014/06/10 职场文书
导游词之河北白洋淀
2020/01/15 职场文书