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 相关文章推荐
PHP array_flip() 删除重复数组元素专用函数
May 16 PHP
php中经典方法实现判断多维数组是否为空
Oct 23 PHP
PHP文章按日期(月日)SQL归档语句
Nov 29 PHP
PHP-Fcgi下PHP的执行时间设置方法
Aug 02 PHP
php file_get_contents抓取Gzip网页乱码的三种解决方法
Nov 12 PHP
Yii获取当前url和域名的方法
Jun 08 PHP
twig里使用js变量的方法
Feb 05 PHP
PHP实现登陆并抓取微信列表中最新一组微信消息的方法
Jul 10 PHP
浅析PHP类的反射来实现依赖注入过程
Feb 06 PHP
ThinkPHP5.0框架验证码功能实现方法【基于第三方扩展包】
Mar 11 PHP
ThinkPHP框架结合Ajax实现用户名校验功能示例
Jul 03 PHP
php设计模式之迭代器模式实例分析【星际争霸游戏案例】
Apr 07 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
ADODB结合SMARTY使用~超级强
2006/11/25 PHP
利用php递归实现无限分类 格式化数组的详解
2013/06/08 PHP
PHP图片处理之使用imagecopyresampled函数裁剪图片例子
2014/11/19 PHP
php+Mysqli利用事务处理转账问题实例
2015/02/11 PHP
简单解析PHP程序的运行流程
2016/06/23 PHP
js获取变量
2006/08/24 Javascript
页面调用单个swf文件,嵌套出多个方法。
2011/11/21 Javascript
JavaScript 判断浏览器是否支持SVG的代码
2013/03/21 Javascript
js 调用百度地图api并在地图上进行打点添加标注
2014/05/13 Javascript
IE8下Jquery获取select选中的值post到后台报错问题
2014/07/02 Javascript
JS实现选项卡实例详解
2015/11/17 Javascript
基于JS实现Android,iOS一个手势动画效果
2016/04/27 Javascript
js完整倒计时代码分享
2016/09/18 Javascript
vue2.0移除或更改的一些东西(移除index key)
2017/08/28 Javascript
React Native使用百度Echarts显示图表的示例代码
2017/11/07 Javascript
基于vue1和vue2获取dom元素的方法
2018/03/17 Javascript
jquery获取file表单选择文件的路径、名字、大小、类型
2019/01/18 jQuery
详解微信小程序回到顶部的两种方式
2019/05/09 Javascript
[03:40]2014DOTA2国际邀请赛 B神专访:躲箭真的很难
2014/07/13 DOTA
Python3基础之list列表实例解析
2014/08/13 Python
对Python 3.2 迭代器的next函数实例讲解
2018/10/18 Python
Django学习笔记之为Model添加Action
2019/04/30 Python
python常用函数与用法示例
2019/07/02 Python
Python使用matplotlib绘制三维参数曲线操作示例
2019/09/10 Python
django商品分类及商品数据建模实例详解
2020/01/03 Python
Python批量将图片灰度化的实现代码
2020/04/11 Python
快速解决jupyter notebook启动需要密码的问题
2020/04/21 Python
LN-CC美国:伦敦时尚生活的缩影
2019/02/19 全球购物
RIP版本1跟版本2的区别
2013/12/30 面试题
爱心倡议书范文
2014/05/12 职场文书
机械设备与数控技术专业求职信
2014/08/10 职场文书
婚礼庆典答谢词
2015/01/20 职场文书
高中生个性发展自我评价
2015/03/09 职场文书
2015社区健康教育工作总结
2015/05/20 职场文书
安全学习心得体会范文
2016/01/18 职场文书
纯html+css实现Element loading效果
2021/08/02 HTML / CSS