PHP部分

扩展类代码部分:

<?php
namespace Think; class JsSdk {
private $appId;
private $appSecret;
public $debug = false; public function __construct($appId, $appSecret) {
$this->appId = $appId;
$this->appSecret = $appSecret;
} public function getSignPackage() {
$jsapiTicket = $this->getJsApiTicket();
$url = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
$timestamp = time();
$nonceStr = $this->createNonceStr(); // 这里参数的顺序要按照 key 值 ASCII 码升序排序
$string = "jsapi_ticket=$jsapiTicket&noncestr=$nonceStr&timestamp=$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 = ) {
$chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
$str = "";
for ($i = ; $i < $length; $i++) {
$str .= substr($chars, mt_rand(, strlen($chars) - ), );
}
return $str;
} private function getJsApiTicket() {
//debug模式
if ($this->debug) {
// jsapi_ticket 应该全局存储与更新,以下代码以写入到文件中做示例
$data = json_decode(file_get_contents("jsapi_ticket.json"));
} else {
//从cache中读取,基于ThinkPHP的缓存机制
$data = (object)(S('jsapi_ticket_json'));
} if ($data->expire_time < time()) {
$accessToken = $this->getAccessToken();
$url = "http://api.weixin.qq.com/cgi-bin/ticket/getticket?type=1&access_token=$accessToken";
$res = json_decode($this->httpGet($url));
$ticket = $res->ticket; if ($ticket) {
$data->expire_time = time() + ;
$data->jsapi_ticket = $ticket; //debug模式
if ($this->debug) {
$fp = fopen("jsapi_ticket.json", "w");
fwrite($fp, json_encode($data));
fclose($fp);
} else {
//将对象以数组的形式进行缓存
S('jsapi_ticket_json', (array)$data);
} }
} else {
$ticket = $data->jsapi_ticket;
} return $ticket;
} private function getAccessToken() { //debug模式
if ($this->debug) {
// access_token 应该全局存储与更新,以下代码以写入到文件中做示例
$data = json_decode(file_get_contents("access_token.json"));
dump($data);
die();
} else {
//从缓存中读取数组并转成对象
$data = (Object)(S('access_token.json'));
} if ($data->expire_time < time()) {
$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() + ;
$data->access_token = $access_token; //debug模式
if ($this->debug) {
$fp = fopen("access_token.json", "w");
fwrite($fp, json_encode($data));
fclose($fp);
} else {
//缓存数组
S('access_token.json', (array)$data);
} }
} 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, );
curl_setopt($curl, CURLOPT_URL, $url);
$res = curl_exec($curl);
//错误检测
$error = curl_error($curl);
curl_close($curl); //发生错误,抛出异常
if($error) throw new \Exception('请求发生错误(表检查是否在授权域名下访问):' . $error); return $res;
}
}

控制器部分代码:

public function reurnWeixinCode() {
$jssdk = new \Think\Jssdk(WX_GONGZHONGHAO_APPID, WX_GONGZHONGHAO_APPSECRET);
$signPackage = $jssdk->GetSignPackage();
return $signPackage;
}

Html部分

 <script type="text/javascript">
var imgUrl = "{$img_url}";
var link = "{$huodong_url}";
var descContent = '{$desc}'; var shareTitle = '{$title}';
var appid = '';
</script>
<script type="text/javascript" src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js";></script>
<script type="text/javascript">
wx.config({
// debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,
可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
appId: '{$signPackage['appId']}', // 必填,公众号的唯一标识
timestamp: {$signPackage['timestamp']}, // 必填,生成签名的时间戳
nonceStr: '{$signPackage['nonceStr']}', // 必填,生成签名的随机串
signature: '{$signPackage['signature']}',// 必填,签名,见附录1
jsApiList: [
'onMenuShareTimeline',
'onMenuShareAppMessage',
'onMenuShareQQ',
'onMenuShareWeibo'
] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2
});
wx.ready(function(){ //朋友圈
wx.onMenuShareTimeline({
title: shareTitle,
link: link,
imgUrl: imgUrl,
trigger: function (res) {
// alert('用户点击并朋友圈');
},
success: function () {
// 用户确认分享后执行的回调函数
//alert('Timeline分享成功');
},
cancel: function () {
// 用户取消分享后执行的回调函数
// alert('您取消了分享Timeline');
}
});
wx.onMenuShareAppMessage({
title: shareTitle,
link: link,
desc: descContent,
imgUrl: imgUrl,
type: '', // 分享类型,music、video或link,不填默认为link
dataUrl: '', // 如果type是music或video,则要提供数据链接,默认为空
success: function () {
// alert('分享给朋友分享成功');
},
cancel: function () {
// alert('您取消了分享给朋友');
}
});
wx.onMenuShareQQ({
title: shareTitle,
desc: descContent,
link: link,
imgUrl: imgUrl, success: function () {
// alert('qq分享成功');
},
cancel: function () {
// alert('您取消了分享给qq');
}
});
wx.onMenuShareWeibo({
title: shareTitle,
desc: descContent,
link: link,
imgUrl: imgUrl,
success: function () {
// alert('weibo分享成功');
},
cancel: function () {
// alert('weibo取消');
}
});
// config信息验证后会执行ready方法,所有接口调用都必须在config接口获得结果之后,
config是一个客户端的异步操作,所以如果需要在页面加载时就调用相关接口,
则须把相关接口放在ready函数中调用来确保正确执行。对于用户触发时才调用的接口,
则可以直接调用,不需要放在ready函数中。
});
wx.error(function (res) {
// alert(res.errMsg);
});
</script>

关于微信分享到朋友圈(Thinkphp-tp3.2框架下实现)的更多相关文章

  1. 关于微信分享到朋友圈(Thinkphp框架下实现)

    PHP部分 扩展类代码部分: <?php namespace Think; class JsSdk {       private $appId;       private $appSecre ...

  2. UC和QQ两个主流浏览器 * 点击触发微信分享到朋友圈或发送给朋友的功能(转载)

    转载(声明:仅供学习使用) /** * 此插件主要作用是在UC和QQ两个主流浏览器 * 上面触发微信分享到朋友圈或发送给朋友的功能 * 代码编写过程中 参考: * http://mjs.sinaimg ...

  3. iOS - 社会化分享-微信分享,朋友圈分享

    我仅仅做了文字和图片分享功能 1. TARGETS - Info - URL Types identifier -> weixin URL Schemes ->  应用id 2.在AppD ...

  4. 在做微信分享到朋友圈时,手机扫码报config:invalid signature,分享后后正常的问题,是url问题

    是按照以下步骤检查的 除了ACCESS_TOKEN没有缓存其他都可以 如果是invalid signature签名错误.建议按如下顺序检查: 1.确认签名算法正确,可用 http://mp.weixi ...

  5. UC浏览器 分享到朋友圈和微信好友 分类: JavaScript 2015-04-28 14:45 615人阅读 评论(1) 收藏

    用手机UC浏览器访问新浪微博,会注意到有这样的两个分享按钮: 在手机端浏览器里,点击分享按钮,就可以启动微信客户端并分享到微信.研究了下其源代码,存在这样的一个js:http://mjs.sinaim ...

  6. 微信自定义分享到朋友圈API

    <script src="http://s0.qhimg.com/!249ce048/WeixinApi.js" type="text/javascript&quo ...

  7. UC浏览器 分享到朋友圈和微信好友

    用手机UC浏览器访问新浪微博,会注意到有这样的两个分享按钮: 在手机端浏览器里,点击分享按钮,就可以启动微信客户端并分享到微信.研究了下其源代码,存在这样的一个js:http://mjs.sinaim ...

  8. Swift - 发送消息(文本,图片,文件等)给微信好友或分享到朋友圈

    通过调用微信提供的API接口,我们可以很方便的在应用中发送消息给微信好友,或者分享到朋友圈.在微信开发平台(https://open.weixin.qq.com)里,提供了详细的说明文档和样例.但由于 ...

  9. 微信小程序分享到朋友圈方法与技巧

    小程序提供onShareAppMessage 函数,此函数只支持分享给我微信朋友.小程序如何分享到朋友圈呢? 我提供的方法是,使用canvas绘制一张图片,并用wx.previewImage预览图片, ...

随机推荐

  1. hihocoder 1330 - 数组重排 - [hiho一下167周][最小公倍数]

    题目链接:https://hihocoder.com/problemset/problem/1330 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi想知道,如果他 ...

  2. SPOJ IM - Intergalactic Map - [拆点最大流]

    题目链接:http://www.spoj.com/problems/IM/en/ Time limit:491 ms Memory limit:1572864 kB Code length Limit ...

  3. 教程 | 如何使用纯NumPy代码从头实现简单的卷积神经网络

    Building Convolutional Neural Network using NumPy from Scratch https://www.linkedin.com/pulse/buildi ...

  4. 【技术分享】Java 序列化与反序列化安全分析

    唯品会安全应急响应中心 https://mp.weixin.qq.com/s?src=11&timestamp=1546915765&ver=1317&signature=mW ...

  5. Why is long2ip conversion important?

    Frequently Asked Questions about Convert long to IP address https://long2ip.com/faq/ What is long2ip ...

  6. Alpine Linux

    Alpine Linux Docker镜像基于Alpine Linux操作系统,后者是一个面向安全的轻型Linux发行版.不同于通常Linux发行版,Alpine Linux采用了musl libc和 ...

  7. Cow Contest---poj3660

    题目链接:http://poj.org/problem?id=3660 题意:有n头牛,m个关系,a b意思是a能打败b:求能确定排名的有几个: 如果一头牛被x头牛打败,并且可以打败y头牛,如果x+y ...

  8. 虫师的性能测试思想html网页学习

    http://www.cnblogs.com/fnng/category/387349.html

  9. mysql 用户与权限

    1.用户 1)创建用户   "create user '用户'@'host' identified by '密码';" 在5.7以后的版本中要求密码包含至少一个大写字母,一个小写字 ...

  10. 创建list方法总结

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/sheismylife/article/details/28878593 构建一个list 注意要标记 ...