php分享朋友圈的实现代码


Posted in PHP onFebruary 18, 2019

本文实例为大家分享了php实现分享朋友圈的具体代码,供大家参考,具体内容如下

<?php
class JSSDK {
 private $appId;
 private $appSecret;
 
 public function __construct($appId, $appSecret) {
 $this->appId = $appId;
 $this->appSecret = $appSecret;
 }
 
 public function getSignPackage() {
 $jsapiTicket = $this->getJsApiTicket();
 
 // 注意 URL 一定要动态获取,不能 hardcode.
 $protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://";
 $url = "$protocol$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
 
 $timestamp = time();
 $nonceStr = $this->createNonceStr();
 
 // 这里参数的顺序要按照 key 值 ASCII 码升序排序
 $string = "jsapi_ticket=$jsapiTicket&noncestr=$nonceStr×tamp=$timestamp&url=$url";
 
 $signature = sha1($string);
 
 $signPackage = array(
  "appId"  => $this->appId,
  "nonceStr" => $nonceStr,
  "timestamp" => $timestamp,
  "url"  => $url,
  "signature" => $signature,
  "rawString" => $string
 );
 return $signPackage; 
 }
 
 private function createNonceStr($length = 16) {
 $chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
 $str = "";
 for ($i = 0; $i < $length; $i++) {
  $str .= substr($chars, mt_rand(0, strlen($chars) - 1), 1);
 }
 return $str;
 }
 
 private function getJsApiTicket() {
 // jsapi_ticket 应该全局存储与更新,以下代码以写入到文件中做示例
 $data = json_decode(file_get_contents("jsapi_ticket.json"));
 if ($data->expire_time < time()) {
  $accessToken = $this->getAccessToken();
  // 如果是企业号用以下 URL 获取 ticket
  // $url = "https://qyapi.weixin.qq.com/cgi-bin/get_jsapi_ticket?access_token=$accessToken";
  $url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?type=jsapi&access_token=$accessToken";
  $res = json_decode($this->httpGet($url));
  $ticket = $res->ticket;
  if ($ticket) {
  $data->expire_time = time() + 7000;
  $data->jsapi_ticket = $ticket;
  $fp = fopen("jsapi_ticket.json", "w");
  fwrite($fp, json_encode($data));
  fclose($fp);
  }
 } else {
  $ticket = $data->jsapi_ticket;
 }
 
 return $ticket;
 }
 
 private function getAccessToken() {
 // access_token 应该全局存储与更新,以下代码以写入到文件中做示例
 $data = json_decode(file_get_contents("access_token.json"));
 if ($data->expire_time < time()) {
  // 如果是企业号用以下URL获取access_token
  // $url = "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=$this->appId&corpsecret=$this->appSecret";
  $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=$this->appId&secret=$this->appSecret";
  $res = json_decode($this->httpGet($url));
  $access_token = $res->access_token;
  if ($access_token) {
  $data->expire_time = time() + 7000;
  $data->access_token = $access_token;
  $fp = fopen("access_token.json", "w");
  fwrite($fp, json_encode($data));
  fclose($fp);
  }
 } else {
  $access_token = $data->access_token;
 }
 return $access_token;
 }
 
 private function httpGet($url) {
 $curl = curl_init();
 curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
 curl_setopt($curl, CURLOPT_TIMEOUT, 500);
 curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
 curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
 curl_setopt($curl, CURLOPT_URL, $url);
 
 $res = curl_exec($curl);
 curl_close($curl);
 
 return $res;
 }
}
$jssdk = new JSSDK("wx6b3844d6802f74aa", "c8710c8f4e0afce7611f5cd0013c4573");
$signPackage = $jssdk->GetSignPackage();
?>
<script src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script>
<script>
 /*
 * 注意:
 * 1. 所有的JS接口只能在公众号绑定的域名下调用,公众号开发者需要先登录微信公众平台进入“公众号设置”的“功能设置”里填写“JS接口安全域名”。
 * 2. 如果发现在 Android 不能分享自定义内容,请到官网下载最新的包覆盖安装,Android 自定义分享接口需升级至 6.0.2.58 版本及以上。
 * 3. 常见问题及完整 JS-SDK 文档地址:http://mp.weixin.qq.com/wiki/7/aaa137b55fb2e0456bf8dd9148dd613f.html
 *
 * 开发中遇到问题详见文档“附录5-常见错误及解决办法”解决,如仍未能解决可通过以下渠道反馈:
 * 邮箱地址:weixin-open@qq.com
 * 邮件主题:【微信JS-SDK反馈】具体问题
 * 邮件内容说明:用简明的语言描述问题所在,并交代清楚遇到该问题的场景,可附上截屏图片,微信团队会尽快处理你的反馈。
 */
 wx.config({
 debug: false,
 appId: '<?php echo $signPackage["appId"];?>',
 timestamp: <?php echo $signPackage["timestamp"];?>,
 nonceStr: '<?php echo $signPackage["nonceStr"];?>',
 signature: '<?php echo $signPackage["signature"];?>',
 jsApiList: ['onMenuShareTimeline',
 'onMenuShareAppMessage'
  // 所有要调用的 API 都要加到这个列表中
 ]
 });
 wx.ready(function () {
//分享朋友
 wx.onMenuShareAppMessage({ 
  title: '你的分享标题', // 分享标题
  desc: '你的分享描述', // 分享描述
  link: "你的链接?pid=<?php echo $userone['id']?>", // 分享链接
  imgUrl: '图片地址', // 分享图标
  type: '', // 分享类型,music、video或link,不填默认为link
  dataUrl: '', // 如果type是music或video,则要提供数据链接,默认为空
  success: function () { 
   //alert('成功分享到您的朋友');
  },
  cancel: function () { 
 //alert('取消分享到您的朋友');
  // 用户取消分享后执行的回调函数
  }
 });
 
 //朋友圈
 wx.onMenuShareTimeline({
  title: '你的分享标题', // 分享标题
  desc: '你的分享描述', // 分享描述
  link: "你的链接?pid=<?php echo $userone['id']?>", // 分享链接
  imgUrl: '图片地址', // 分享图标
  success: function () { 
  // 用户确认分享后执行的回调函数
  },
  cancel: function () { 
  // 用户取消分享后执行的回调函数
  }
 });
 
 });
</script>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
PHP4在WinXP下IIS和Apache2服务器上的安装实例
Oct 09 PHP
PHP中ADODB类详解
Mar 25 PHP
php部分常见问题总结
Mar 27 PHP
PHP中利用substr_replace将指定两位置之间的字符替换为*号
Jan 27 PHP
使用迭代器 遍历文件信息的详解
Jun 08 PHP
php数据类型判断函数有哪些
Sep 23 PHP
Yii框架中 find findAll 查找出制定的字段的方法对比
Sep 10 PHP
用PHP代码给图片加水印
Jul 01 PHP
php根据日期或时间戳获取星座信息和生肖等信息
Oct 20 PHP
Apache PHP MySql安装配置图文教程
Aug 27 PHP
PHP 实现页面静态化的几种方法
Jul 23 PHP
Laravel框架路由和控制器的绑定操作方法
Jun 12 PHP
php微信分享到朋友圈、QQ、朋友、微博
Feb 18 #PHP
php实现微信分享朋友链接功能
Feb 18 #PHP
PHP实现唤起微信支付功能
Feb 18 #PHP
thinkphp5使用无限极分类
Feb 18 #PHP
thinkphp5实现无限级分类
Feb 18 #PHP
php实现文章评论系统
Feb 18 #PHP
php无限级分类实现评论及回复功能
Feb 18 #PHP
You might like
PHP开发的微信现金红包功能示例
2017/06/29 PHP
jquery $.ajax相关用法分享
2012/03/16 Javascript
一款jquery特效编写的大度宽屏焦点图切换特效的实例代码
2013/08/05 Javascript
JQUERY 设置SELECT选中项代码
2014/02/07 Javascript
JS实现仿QQ聊天窗口抖动特效
2015/05/10 Javascript
javascript实现相同事件名称,不同命名空间的调用方法
2015/06/26 Javascript
jQuery实现控制文字内容溢出用省略号(…)表示的方法
2016/02/26 Javascript
AngularJS过滤器详解及示例代码
2016/08/16 Javascript
利用vue写todolist单页应用
2016/12/15 Javascript
jQuery实现页面滚动时智能浮动定位
2017/01/08 Javascript
使用koa2创建web项目的方法步骤
2019/03/12 Javascript
使用vue2.6实现抖音【时间轮盘】屏保效果附源码
2019/04/24 Javascript
js实现无缝滚动双图切换效果
2019/07/09 Javascript
VUE注册全局组件和局部组件过程解析
2019/10/10 Javascript
javascript将16进制的字符串转换为10进制整数hex
2020/03/05 Javascript
简单介绍Python中的try和finally和with方法
2015/05/05 Python
Python 3.8新特征之asyncio REPL
2019/05/28 Python
Python Pandas数据结构简单介绍
2019/07/03 Python
pycharm实现在虚拟环境中引入别人的项目
2020/03/09 Python
python 装饰器重要在哪
2021/02/14 Python
html5+css3实现一款注册表单实例
2013/04/17 HTML / CSS
Canvas图片分割效果的实现
2019/07/29 HTML / CSS
AmazeUI 平滑滚动效果的示例代码
2020/08/20 HTML / CSS
香港零食网购:上仓胃子
2020/06/08 全球购物
建筑工程自我鉴定
2013/10/18 职场文书
现场施工员岗位职责
2014/03/10 职场文书
镇政府副镇长群众路线专题民主生活会对照检查材料
2014/09/19 职场文书
英语复习计划
2015/01/19 职场文书
2015年度护士个人工作总结
2015/04/09 职场文书
食品安全主题班会
2015/08/13 职场文书
篮球拉拉队口号
2015/12/25 职场文书
2016大学优秀学生干部事迹材料
2016/03/01 职场文书
2016年“我们的节日·中秋节”活动总结
2016/04/05 职场文书
python 实现定时任务的四种方式
2021/04/01 Python
Java SSM配置文件案例详解
2021/08/30 Java/Android
js中Object.create实例用法详解
2021/10/05 Javascript