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 相关文章推荐
NT IIS下用ODBC连接数据库
Oct 09 PHP
php 攻击方法之谈php+mysql注射语句构造
Oct 30 PHP
PHP及Zend Engine的线程安全模型分析
Nov 10 PHP
解析PHP中VC6 X86和VC9 X86的区别及 Non Thread Safe的意思
Jun 28 PHP
ThinkPHP中的三大自动简介
Aug 22 PHP
CI框架中site_url()和base_url()的区别
Jan 07 PHP
php构造函数与析构函数
Apr 23 PHP
图文详解phpstorm配置Xdebug进行调试PHP教程
Jun 13 PHP
用php和jQuery来实现“顶”和“踩”的投票功能
Oct 13 PHP
PHP设计模式之装饰器模式实例详解
Feb 07 PHP
thinkPHP5框架闭包函数与子查询传参用法示例
Aug 02 PHP
php redis setnx分布式锁简单原理解析
Oct 23 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
Linux下安装PHP MSSQL扩展教程
2014/10/24 PHP
Php-Redis安装测试笔记
2015/03/05 PHP
Smarty变量用法详解
2016/05/11 PHP
js绑定事件this指向发生改变的问题解决方法
2013/04/23 Javascript
document.write()及其输出内容的样式、位置控制
2013/08/12 Javascript
Javascript中克隆一个数组的实现代码
2013/12/06 Javascript
对于Form表单reset方法的新认识
2014/03/05 Javascript
文本域光标操作的jQuery扩展分享
2014/03/10 Javascript
使用JavaScript的ActiveXObject对象检测应用程序是否安装的方法
2014/04/15 Javascript
JavaScript中对象属性的添加和删除示例
2014/05/12 Javascript
jQuery关键词说明插件cluetip使用指南
2015/04/21 Javascript
动态设置form表单的action属性的值的简单方法
2016/05/25 Javascript
nodeJs内存泄漏问题详解
2016/09/05 NodeJs
原生的强大DOM选择器querySelector介绍
2016/12/21 Javascript
JS实现的邮箱提示补全效果示例
2018/01/30 Javascript
Vue 动态组件components和v-once指令的实现
2019/08/30 Javascript
layui表单提交到后台自动封装到实体类的方法
2019/09/12 Javascript
在Vue中实现随hash改变响应菜单高亮
2020/03/09 Javascript
《javascript设计模式》学习笔记一:Javascript面向对象程序设计对象成员的定义分析
2020/04/07 Javascript
微信小程序使用GoEasy实现websocket实时通讯
2020/05/19 Javascript
python中实现延时回调普通函数示例代码
2017/09/08 Python
Python根据成绩分析系统浅析
2019/02/11 Python
python调用摄像头拍摄数据集
2019/06/01 Python
tensorflow dataset.shuffle、dataset.batch、dataset.repeat顺序区别详解
2020/06/03 Python
Python logging模块异步线程写日志实现过程解析
2020/06/30 Python
Python安装第三方库攻略(pip和Anaconda)
2020/10/15 Python
详解CSS3 用border写 空心三角箭头 (两种写法)
2017/09/29 HTML / CSS
css3实现二维码扫描特效的示例
2020/10/29 HTML / CSS
爱他美官方海外旗舰店:Aptamil奶粉
2017/12/22 全球购物
英国屋顶用品和材料超市:Roofing Supplies UK
2019/08/24 全球购物
adidas泰国官网:adidas TH
2020/07/11 全球购物
法制报告会主持词
2014/04/02 职场文书
企业精神口号
2014/06/11 职场文书
家长反馈意见及建议
2015/06/03 职场文书
2015大学迎新晚会策划书
2015/07/16 职场文书
教务处教学工作总结
2015/08/10 职场文书