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 相关文章推荐
php_xmlhttp 乱码问题解决方法
Aug 07 PHP
PHP array操作10个小技巧分享
Jun 23 PHP
PHP设计模式之命令模式的深入解析
Jun 13 PHP
PHP常用技术文之文件操作和目录操作总结
Sep 27 PHP
php通过session防url攻击方法
Dec 10 PHP
PHP获取一年中每个星期的开始和结束日期的方法
Feb 12 PHP
php实现Mongodb自定义方式生成自增ID的方法
Mar 23 PHP
php将日期格式转换成xx天前的格式
Apr 16 PHP
PHP中使用curl入门教程
Jul 02 PHP
深入理解Yii2.0乐观锁与悲观锁的原理与使用
Jul 26 PHP
PHP实现SMTP邮件的发送实例
Sep 27 PHP
PHP中关于php.ini参数优化详解
Feb 28 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
destoon实现调用图文新闻的方法
2014/08/21 PHP
Thinkphp将二维数组变为标签适用的一维数组方法总结
2014/10/30 PHP
CI框架Session.php源码分析
2014/11/03 PHP
PHP图片处理之使用imagecopyresampled函数实现图片缩放例子
2014/11/19 PHP
PHP实现的QQ空间g_tk加密算法
2015/07/09 PHP
PHP利用imagick生成组合缩略图
2016/02/19 PHP
thinkPHP订单数字提醒功能的实现方法
2016/12/01 PHP
jquery 插件学习(五)
2012/08/06 Javascript
node.js中的console.warn方法使用说明
2014/12/09 Javascript
Javascript中实现String.startsWith和endsWith方法
2015/06/10 Javascript
JavaScript让Textarea支持tab按键的方法
2015/06/26 Javascript
基于jquery实现鼠标左右拖动滑块滑动附源码下载
2015/12/23 Javascript
Fullpage.js固定导航栏-实现定位导航栏
2016/03/17 Javascript
详解本地Node.js服务器作为api服务器的解决办法
2017/02/28 Javascript
JS实现的随机排序功能算法示例
2017/06/09 Javascript
在vue.js中使用JSZip实现在前端解压文件的方法
2018/09/05 Javascript
微信小程序scroll-view横向滑动嵌套for循环的示例代码
2018/09/20 Javascript
微信小程序实现左滑修改、删除功能
2020/10/19 Javascript
微信小程序rich-text富文本用法实例分析
2019/05/20 Javascript
jquery传参及获取方式(两种方式)
2020/02/13 jQuery
小程序点餐界面添加购物车左右摆动动画
2020/09/23 Javascript
[53:36]Liquid vs VP Supermajor决赛 BO 第三场 6.10
2018/07/05 DOTA
Python中字典(dict)和列表(list)的排序方法实例
2014/06/16 Python
Python入门_浅谈数据结构的4种基本类型
2017/05/16 Python
python用类实现文章敏感词的过滤方法示例
2019/10/27 Python
Python如何发送与接收大型数组
2020/08/07 Python
详解如何修改python中字典的键和值
2020/09/29 Python
Dillard’s百货官网:Dillards.com
2018/05/26 全球购物
澳大利亚在线奢侈品时尚零售平台:Azura Runway
2021/01/13 全球购物
意大利时尚奢侈品店:D’Aniello Boutique
2021/01/19 全球购物
高校毕业生登记表自我鉴定
2013/11/03 职场文书
中专生求职自荐信范文
2013/12/22 职场文书
销售员求职个人的自我评价
2014/02/19 职场文书
读群众路线心得体会
2014/03/07 职场文书
网络研修随笔感言
2015/11/18 职场文书
2016秋季田径运动会广播稿
2015/12/21 职场文书