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的FTP学习(二)
Oct 09 PHP
用PHP读取RSS feed的代码
Aug 01 PHP
php 解决旧系统 查出所有数据分页的类
Aug 27 PHP
php-cli简介(不会Shell语言一样用Shell)
Jun 03 PHP
php版淘宝网查询商品接口代码示例
Jun 17 PHP
简单分析ucenter 会员同步登录通信原理
Aug 25 PHP
Yii 快速,安全,专业的PHP框架
Sep 03 PHP
PHP检测用户语言的方法
Jun 15 PHP
thinkPHP模型初始化实例分析
Dec 03 PHP
PHP CURL post数据报错 failed creating formpost data
Oct 16 PHP
PHP实现打包下载文件的方法示例
Oct 07 PHP
PHP上传图片到数据库并显示的实例代码
Dec 20 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
用phpmyadmin更改mysql5.0登录密码
2008/03/25 PHP
php数组的一些常见操作汇总
2011/07/17 PHP
如何用phpmyadmin设置mysql数据库用户的权限
2012/01/09 PHP
PHP根据两点间的经纬度计算距离
2014/10/31 PHP
编写跨浏览器的javascript代码必备[js多浏览器兼容写法]
2008/10/29 Javascript
jQuery Ajax 全解析
2009/02/08 Javascript
js 模拟气泡屏保效果代码
2010/07/10 Javascript
js下通过prototype扩展实现indexOf的代码
2010/12/08 Javascript
js日历功能对象
2012/01/12 Javascript
网页编辑器ckeditor和ckfinder配置步骤分享
2012/05/24 Javascript
js和html5实现手机端刮刮卡抽奖效果完美兼容android/IOS
2013/11/18 Javascript
javascript的日期对象、数组对象、二维数组使用说明
2014/12/22 Javascript
JavaScript资源预加载组件和滑屏组件的使用推荐
2016/03/10 Javascript
基于javascript实现数字英文验证码
2017/01/25 Javascript
Angular2中监听数据更新的方法
2018/08/31 Javascript
Vue一个案例引发的递归组件的使用详解
2018/11/15 Javascript
Vue 指令实现按钮级别权限管理功能
2019/04/23 Javascript
layer ui 导入文件之前传入数据的实例
2019/09/23 Javascript
vue 对axios get pust put delete封装的实例代码
2020/01/05 Javascript
简单的python后台管理程序
2017/04/13 Python
深入浅析python with语句简介
2018/04/11 Python
python3通过selenium爬虫获取到dj商品的实例代码
2019/04/25 Python
python实现微信机器人: 登录微信、消息接收、自动回复功能
2019/04/29 Python
Python Selenium操作Cookie的实例方法
2021/02/28 Python
python实现发送邮件
2021/03/02 Python
新秀丽拉杆箱美国官方网站:Samsonite美国
2016/07/25 全球购物
技术总监个人的自我评价范文
2013/12/18 职场文书
校园新闻广播稿
2014/01/10 职场文书
清明节演讲稿
2014/05/27 职场文书
施工安全标语
2014/06/07 职场文书
政风行风评议工作总结
2014/10/21 职场文书
给老婆的检讨书
2015/01/27 职场文书
2015年宣传部个人工作总结
2015/05/14 职场文书
2016年学校安全教育月活动总结
2016/04/06 职场文书
pytorch中F.avg_pool1d()和F.avg_pool2d()的使用操作
2021/05/22 Python
Win11自动黑屏怎么办 Win11自动黑屏设置教程
2022/07/15 数码科技