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来检测proxy
Oct 09 PHP
php下实现折线图效果的代码
Apr 28 PHP
PHP实现域名whois查询的代码(数据源万网、新网)
Feb 22 PHP
ie与session丢失(新窗口cookie丢失)实测及解决方案
Jul 15 PHP
thinkphp的URL路由规则与配置实例
Nov 26 PHP
php+xml编程之xpath的应用实例
Jan 24 PHP
php使用正则表达式进行字符串搜索的方法
Mar 23 PHP
php版微信自动获取收货地址api用法示例
Sep 22 PHP
PHP基于迭代实现文件夹复制、删除、查看大小等操作的方法
Aug 11 PHP
PHP实现的随机红包算法示例
Aug 14 PHP
PHP Post获取不到非表单数据的问题解决办法
Feb 27 PHP
php实现微信和支付宝支付的示例代码
Aug 11 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 中include()与require()的对比
2006/10/09 PHP
PHP微信支付开发实例
2016/06/22 PHP
thinkPHP数据库增删改查操作方法实例详解
2016/12/06 PHP
强制设为首页代码
2006/06/19 Javascript
不间断滚动JS打包类,基本可以实现所有的滚动效果,太强了
2007/12/08 Javascript
StringTemplate遇见jQuery冲突的解决方法
2011/09/22 Javascript
jquery中加载图片自适应大小主要实现代码
2013/08/23 Javascript
jquery 取子节点及当前节点属性值
2014/07/25 Javascript
jQuery插件formValidator自定义函数扩展功能实例详解
2015/11/25 Javascript
JavaScript中的函数(二)
2015/12/23 Javascript
在JavaScript中对HTML进行反转义详解
2016/05/18 Javascript
Nodejs全局安装和本地安装的不同之处
2016/07/04 NodeJs
vuex的使用及持久化state的方式详解
2018/01/23 Javascript
JS实现为动态创建的元素添加事件操作示例
2018/03/17 Javascript
jQuery.validate.js表单验证插件的使用代码详解
2018/10/22 jQuery
Vue传参一箩筐(页面、组件)
2019/04/04 Javascript
[48:53]2014 DOTA2华西杯精英邀请赛 5 25 LGD VS VG第一场
2014/05/26 DOTA
[02:04]2014DOTA2国际邀请赛 DK一个时代的落幕
2014/07/21 DOTA
[46:47]完美世界DOTA2联赛PWL S2 FTD vs Magma 第二场 11.20
2020/11/23 DOTA
python调用机器喇叭发出蜂鸣声(Beep)的方法
2015/03/23 Python
python字符串与url编码的转换实例
2018/05/10 Python
在Python中使用MongoEngine操作数据库教程实例
2019/12/03 Python
pycharm下配置pyqt5的教程(anaconda虚拟环境下+tensorflow)
2020/03/25 Python
Python tornado上传文件的功能
2020/03/26 Python
Django模板获取field的verbose_name实例
2020/05/19 Python
学python最电脑配置有要求么
2020/07/05 Python
值得收藏的HTML5资源(学习html5的朋友可以收藏下)
2010/07/20 HTML / CSS
HTML5实现简单图片上传所遇到的问题及解决办法
2016/01/20 HTML / CSS
Easy Spirit官网:美国休闲鞋履中的代表品牌
2019/04/12 全球购物
同学聚会老师邀请函
2014/01/28 职场文书
教师节演讲稿
2014/05/06 职场文书
学校法制宣传日活动总结
2014/11/01 职场文书
2015年节能减排工作总结
2015/05/14 职场文书
详解Python如何批量采集京东商品数据流程
2022/01/22 Python
DIY胆机必读:各国电子管评价
2022/04/06 无线电
SQLServer常见数学函数梳理总结
2022/08/05 MySQL