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
php目录操作实例代码
Feb 21 PHP
php防止伪造数据从地址栏URL提交的方法
Aug 24 PHP
PHP封装的HttpClient类用法实例
Jun 17 PHP
使用xampp搭建运行php虚拟主机的详细步骤
Oct 21 PHP
优化WordPress的Google字体以加速国内服务器上的运行
Nov 24 PHP
php实现scws中文分词搜索的方法
Dec 25 PHP
php获取本机真实IP地址实例代码
Mar 31 PHP
PHP APP微信提现接口代码
Sep 30 PHP
微信公众平台开发教程②微信端分享功能图文详解
Apr 10 PHP
微信推送功能实现方式图文详解
Jul 12 PHP
php解析非标准json、非规范json的方式实例
May 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
德生PL450的电路分析和低放电路的改进办法
2021/03/02 无线电
php的header和asp中的redirect比较
2006/10/09 PHP
PHP遍历目录并返回统计目录大小
2014/06/09 PHP
详解PHP对象的串行化与反串行化
2016/01/24 PHP
php中使用GD库做验证码
2016/03/31 PHP
php文件包含目录配置open_basedir的使用与性能详解
2017/04/03 PHP
php判断str字符串是否是xml格式数据的方法示例
2017/07/26 PHP
PHP+AjaxForm异步带进度条上传文件实例代码
2017/08/14 PHP
PHP中常用的三种设计模式详解【单例模式、工厂模式、观察者模式】
2019/06/14 PHP
优化JavaScript脚本的性能的几个注意事项
2006/12/22 Javascript
javascript高亮效果的二种实现方法
2008/09/14 Javascript
javascript 函数调用规则
2009/08/26 Javascript
jquery.jstree 增加节点的双击事件代码
2010/07/27 Javascript
在JavaScript里嵌入大量字符串常量的实现方法
2013/07/07 Javascript
JavaScript使用Prototype实现面向对象的方法
2015/04/14 Javascript
JQuery中层次选择器用法实例详解
2015/05/18 Javascript
基于nodejs+express4.X实现文件下载的实例代码
2017/07/13 NodeJs
详解JavaScript函数callee、call、apply的区别
2019/03/08 Javascript
koa2服务端使用jwt进行鉴权及路由权限分发的流程分析
2019/07/22 Javascript
JavaScript原型式继承实现方法
2019/11/06 Javascript
js实现带箭头的进度流程
2020/03/26 Javascript
浅谈JavaScript中等号、双等号、 三等号的区别
2020/08/06 Javascript
[09:37]2018DOTA2国际邀请赛寻真——不懈追梦的Team Serenity
2018/08/13 DOTA
python迭代器实例简析
2014/09/25 Python
Python与人工神经网络:使用神经网络识别手写图像介绍
2017/12/19 Python
用Python3创建httpServer的简单方法
2018/06/04 Python
Matplotlib中文乱码的3种解决方案
2018/11/15 Python
Django Rest framework之认证的实现代码
2018/12/17 Python
Python爬虫 urllib2的使用方法详解
2019/09/23 Python
CSS3 选择器 基本选择器介绍
2012/01/21 HTML / CSS
Herschel美国官网:背包、手提袋及配件
2020/03/10 全球购物
轻金属冶金专业毕业生自荐信
2013/11/02 职场文书
大学毕业生最详细的自我评价分享
2013/11/18 职场文书
模范班主任事迹材料
2014/12/17 职场文书
工作转正自我鉴定范文
2019/06/21 职场文书
电脑关机速度很慢怎么办 提升电脑关机速度设置教程
2022/04/08 数码科技