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生成静态页面详解
Nov 19 PHP
初级的用php写的采集程序
Mar 16 PHP
PHP实现定时生成HTML网站首页实例代码
Nov 20 PHP
PHP--用万网的接口实现域名查询功能
Dec 13 PHP
使用openssl实现rsa非对称加密算法示例
Jan 24 PHP
thinkphp控制器调度使用示例
Feb 24 PHP
php实现复制移动文件的方法
Jul 29 PHP
Yii框架组件和事件行为管理详解
May 20 PHP
PHP常见的6个错误提示及解决方法
Jul 07 PHP
yii2的restful api路由实例详解
May 14 PHP
Laravel 5.5 实现禁用用户注册示例
Oct 24 PHP
PHP命令行与定时任务
Apr 01 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 神盾解密工具
2014/06/08 PHP
phpmailer简单发送邮件的方法(附phpmailer源码下载)
2016/06/13 PHP
php封装的page分页类完整实例
2016/10/18 PHP
Mac系统下搭建Nginx+php-fpm实例讲解
2020/12/15 PHP
JS实现切换标签页效果实例代码
2013/11/01 Javascript
javascript中的原型链深入理解
2014/02/24 Javascript
js字符串日期yyyy-MM-dd转化为date示例代码
2014/03/06 Javascript
JS中判断null、undefined与NaN的方法
2014/03/26 Javascript
zepto中使用swipe.js制作轮播图附swipeUp,swipeDown不起效果问题
2015/08/27 Javascript
JavaScript中this的四个绑定规则总结
2016/09/26 Javascript
Bootstrap Table 搜索框和查询功能
2017/11/30 Javascript
JS实现仿微信支付弹窗功能
2018/06/25 Javascript
解决Vue.js父组件$on无法监听子组件$emit触发事件的问题
2018/09/12 Javascript
使用layer.msg 时间设置不起作用的解决方法
2019/09/12 Javascript
微信小程序静默登录的实现代码
2020/01/08 Javascript
vue 实现tab切换保持数据状态
2020/07/21 Javascript
Python字符串格式化%s%d%f详解
2018/02/02 Python
Python常见工厂函数用法示例
2018/03/21 Python
Python爬虫之pandas基本安装与使用方法示例
2018/08/08 Python
Python玩转PDF的各种骚操作
2019/05/06 Python
Pandas DataFrame数据的更改、插入新增的列和行的方法
2019/06/25 Python
python3模拟实现xshell远程执行liunx命令的方法
2019/07/12 Python
Django中的cookie和session
2019/08/27 Python
Django框架序列化与反序列化操作详解
2019/11/01 Python
python线程join方法原理解析
2020/02/11 Python
django执行原始查询sql,并返回Dict字典例子
2020/04/01 Python
利用python实现汉诺塔游戏
2021/03/01 Python
Sisley法国希思黎中国官网:享誉全球的奢华植物美容品牌
2019/06/30 全球购物
巴西独家产品和现场演示购物网站:Shoptime
2019/07/11 全球购物
PHP如何删除一个Cookie值
2012/11/15 面试题
土木工程专业个人求职信
2013/12/30 职场文书
初中三年毕业生的自我评价分享
2014/02/14 职场文书
文明风采获奖感言
2014/02/18 职场文书
如何写好建议书
2014/03/13 职场文书
代办出身证明书
2014/10/21 职场文书
单身证明格式样本
2015/06/15 职场文书