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开源建站平台小结
Apr 22 PHP
php与paypal整合方法
Nov 28 PHP
PHP通过iconv将字符串从GBK转换为UTF8字符集
Jul 18 PHP
浅析php插件 Simple HTML DOM 用DOM方式处理HTML
Jul 01 PHP
php三维数组去重(示例代码)
Nov 26 PHP
php5.4以下版本json不支持不转义内容中文的解决方法
Jan 13 PHP
自己写的php中文截取函数mb_strlen和mb_substr
Feb 09 PHP
php curl中gzip的压缩性能测试实例分析
Nov 08 PHP
PHP使用PHPExcel实现批量上传到数据库的方法
Jun 08 PHP
在 Laravel 中 “规范” 的开发短信验证码发送功能
Oct 26 PHP
Ajax中的JSON格式与php传输过程全面解析
Nov 14 PHP
php中的explode()函数实例介绍
Jan 18 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 和 MySQL 基础教程(四)
2006/10/09 PHP
调整优化您的LAMP应用程序的5种简单方法
2011/06/26 PHP
php skymvc 一款轻量、简单的php
2011/06/28 PHP
浅析PHP文件下载原理
2014/12/25 PHP
yii2 RBAC使用DbManager实现后台权限判断的方法
2016/07/23 PHP
Smarty模板常见的简单应用分析
2016/11/15 PHP
php写入文件不覆盖的实例讲解
2019/09/17 PHP
用js+xml自动生成表格的东西
2006/12/21 Javascript
javascript一点特殊用法
2008/05/28 Javascript
JS 判断代码全收集
2009/04/28 Javascript
IE event.srcElement和FF event.target 功能比较
2010/03/01 Javascript
jquery之empty()与remove()区别说明
2010/09/10 Javascript
javascript利用apply和arguments复用方法
2013/11/25 Javascript
jquery简单实现滚动条下拉DIV固定在头部不动
2013/11/25 Javascript
JavaScript检查弹出窗口是否被阻拦的方法技巧
2015/03/13 Javascript
javascript中for/in循环及使用技巧
2015/09/01 Javascript
AngularJS 实现JavaScript 动画效果详解
2016/09/08 Javascript
JavaScript中清空数组的三种方式
2017/03/22 Javascript
JS简单实现数组去重的方法示例
2017/03/27 Javascript
详解如何去除vue项目中的#——History模式
2017/10/13 Javascript
详解小程序缓存插件(mrc)
2018/08/17 Javascript
在JavaScript中如何访问暂未存在的嵌套对象
2019/06/18 Javascript
vuex 实现getter值赋值给vue组件里的data示例
2019/11/05 Javascript
对python中的iter()函数与next()函数详解
2018/10/18 Python
使用opencv识别图像红色区域,并输出红色区域中心点坐标
2020/06/02 Python
Python类绑定方法及非绑定方法实例解析
2020/10/09 Python
初中班主任经验交流材料
2014/05/16 职场文书
授权委托书样本及填写说明
2014/09/19 职场文书
2014保险公司内勤工作总结
2014/12/16 职场文书
入党积极分子考察意见
2015/06/02 职场文书
“5.12”护士节主持词
2015/07/04 职场文书
单位病假条范文
2015/08/17 职场文书
MySQL中出现乱码问题的终极解决宝典
2021/05/26 MySQL
《勇者辞职不干了》上卷BD发售宣传CM公开
2022/04/08 日漫
Java使用HttpClient实现文件下载
2022/08/14 Java/Android
CentOS7设置ssh服务以及端口修改方式
2022/12/24 Servers