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+DBM的同学录程序(5)
Oct 09 PHP
表单复选框向PHP传输数据的代码
Nov 13 PHP
PHP 截取字符串 分别适合GB2312和UTF8编码情况
Feb 12 PHP
Linux fgetcsv取得的数组元素为空字符串的解决方法
Nov 25 PHP
MongoDB在PHP中的常用操作小结
Feb 20 PHP
微信支付开发教程(一)微信支付URL配置
May 28 PHP
功能强大的PHP图片处理类(水印、透明度、旋转)
Oct 21 PHP
详解WordPress中添加和执行动作的函数使用方法
Dec 29 PHP
thinkphp中字符截取函数msubstr()用法分析
Jan 09 PHP
PHP数据的提交与过滤基本操作实例详解
Nov 11 PHP
浅析PHP类的反射来实现依赖注入过程
Feb 06 PHP
Thinkphp 框架基础之入口文件功能、定义与用法分析
Apr 27 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的面试题集
2006/11/19 PHP
使用GROUP BY的时候如何统计记录条数 COUNT(*) DISTINCT
2011/04/23 PHP
微信公众号开发之语音消息识别php代码
2016/08/08 PHP
PHP实现的堆排序算法详解
2017/08/17 PHP
PHP xpath()函数讲解
2019/02/11 PHP
在视频前插入广告
2006/11/20 Javascript
JavaScript DOM学习第八章 表单错误提示
2010/02/19 Javascript
基于jquery的checkbox下拉框插件代码
2010/06/25 Javascript
JavaScript中的onerror事件概述及使用
2013/04/01 Javascript
jquery 实现两级导航菜单附效果图
2014/03/07 Javascript
javascript中DOM复选框选择用法实例
2015/05/14 Javascript
JS使用正则表达式过滤多个词语并替换为相同长度星号的方法
2016/08/03 Javascript
JavaScript制作简单分页插件
2016/09/11 Javascript
基于jQuery封装的分页组件
2017/06/26 jQuery
Vue Autocomplete 自动完成功能简单示例
2019/05/25 Javascript
小程序实现悬浮搜索框
2019/07/12 Javascript
关于NodeJS中的循环引用详解
2019/07/23 NodeJs
layui表格数据复选框回显设置方法
2019/09/13 Javascript
jQuery实现form表单基于ajax无刷新提交方法实例代码
2019/11/04 jQuery
[53:23]Secret vs Liquid 2018国际邀请赛淘汰赛BO3 第二场 8.25
2018/08/29 DOTA
Python高级应用实例对比:高效计算大文件中的最长行的长度
2014/06/08 Python
Python聊天室实例程序分享
2016/01/05 Python
Python实现的多叉树寻找最短路径算法示例
2018/07/30 Python
Python基于datetime或time模块分别获取当前时间戳的方法实例
2019/02/19 Python
selenium处理元素定位点击无效问题
2019/06/12 Python
用Python画一个LinkinPark的logo代码实例
2019/09/10 Python
python开发实例之python使用Websocket库开发简单聊天工具实例详解(python+Websocket+JS)
2020/03/18 Python
如何用Python输出一个Fibonacci数列
2016/08/28 面试题
初中生自我评价
2014/02/01 职场文书
解放思想大讨论活动总结
2015/05/09 职场文书
物业保安辞职信
2015/05/12 职场文书
2016中秋晚会开幕词
2016/03/03 职场文书
python实现语音常用度量方法的代码详解
2021/05/25 Python
openstack中的rpc远程调用的方法
2021/07/09 Python
vue+echarts实现多条折线图
2022/03/21 Vue.js
vue实现可以快进后退的跑马灯组件
2022/04/08 Vue.js