php微信分享demo


PHP微信分享demo

//定义JSSDK类

<?PHP

class JSSDK

{

private $appId;

private $appSecret;

private $redis;

public function __construct($appId,$appSecret) {

$this->appId = $appId;

$this->appSecret = $appSecret;

$this->redis = new Redis();

}

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 = 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() {

$data = $this->redis->get("wx_jsapi_ticket");

if ($data) {

$ticket = $data->jsapi_ticket;

} else {

$accessToken = $this->getAccessToken();

$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) {

$this->redis->setEx("wx_jsapi_ticket",7000,$ticket);

}

}

return $ticket;

}

private function getAccessToken() {

$data = $this->redis->get("wx_access_token");

if ($data) {

$access_token = $data->access_token;

} else {

$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) {

$this->redis->setEx("wx_access_token",$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_URL,$url);

$res = curl_exec($curl);

curl_close($curl);

return $res;

}

}

?>


js调用

//调用

<?PHP

require("jssdk.PHP");

$jssdk = new JSSDK($appid,$appSecret);

//返回签名基本信息

$signPackage = $jssdk->getSignPackage();

?>

//页面接受PHP传过来的签名参数 $signPackage

<script src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script>

<script>

// 注意:所有的JS接口只能在公众号绑定的域名下调用,公众号开发者需要先登录微信公众平台进入“公众号设置”的“功能设置”里填写“JS接口安全域名”。

// 如果发现在 Android 不能分享自定义内容,请到官网下载最新的包覆盖安装,Android 自定义分享接口需升级至 6.0.2.58 版本及以上。

// 完整 JS-SDK 文档地址:http://mp.weixin.qq.com/wiki/7/aaa137b55fb2e0456bf8dd9148dd613f.html

wx.config({

appId: '<?PHP echo $signPackage["appId"];?>',

timestamp: <?PHP echo $signPackage["timestamp"];?>,

nonceStr: '<?PHP echo $signPackage["nonceStr"];?>',

signature: '<?PHP echo $signPackage["signature"];?>',

jsApiList: [

"onMenuShareTimeline",

"onMenuShareAppMessage",

"onMenuShareQQ",

"onMenuShareWeibo",

"onMenuShareQZone",

]

});

wx.ready(function () {

// 在这里调用 API

wx.checkJsApi({

jsApiList: ["onMenuShareTimeline",],// 需要检测的JS接口列表,所有JS接口列表见附录2,

success: function(res) {

alert(JSON.stringify(res));

if(res.errMsg !='checkJsApi:ok'){

alert('请升级您的微信版本');

return;

}

}

});

//分享Demo

//获取分享到朋友圈”按钮点击状态及自定义分享内容接口

wx.onMenuShareTimeline({

title: '',// 分享标题

link: '',// 分享链接

imgUrl: '',// 分享图标

success: function () {

// 用户确认分享后执行的回调函数

},

cancel: function () {

// 用户取消分享后执行的回调函数

}

});

//获取分享给朋友”按钮点击状态及自定义分享内容接口

wx.onMenuShareAppMessage({

title: '',// 分享标题

desc: '',// 分享描述

link: '',// 分享图标

type: '',// 分享类型,music、video或link,不填默认为link

dataUrl: '',// 如果type是music或video,则要提供数据链接,默认为空

success: function () {

// 用户确认分享后执行的回调函数

},

cancel: function () {

// 用户取消分享后执行的回调函数

}

});

//获取分享到QQ”按钮点击状态及自定义分享内容接口

wx.onMenuShareQQ({

title: '',

cancel: function () {

// 用户取消分享后执行的回调函数

}

});

//获取分享到腾讯微博”按钮点击状态及自定义分享内容接口

wx.onMenuShareWeibo({

title: '',

cancel: function () {

// 用户取消分享后执行的回调函数

}

});

//获取分享到QQ空间”按钮点击状态及自定义分享内容接口

wx.onMenuShareQZone({

title: '',

cancel: function () {

// 用户取消分享后执行的回调函数

}

});

});

相关文章

Hessian开源的远程通讯,采用二进制 RPC的协议,基于 HTTP 传输。可以实现PHP调用Java,Python,C#等多语...
初识Mongodb的一些总结,在Mac Os X下真实搭建mongodb环境,以及分享个Mongodb管理工具,学习期间一些总结...
边看边操作,这样才能记得牢,实践是检验真理的唯一标准.光看不练假把式,光练不看傻把式,边看边练真把式....
在php中,结果输出一共有两种方式:echo和print,下面将对两种方式做一个比较。 echo与print的区别: (...
在安装好wampServer后,一直没有使用phpMyAdmin,今天用了一下,phpMyAdmin显示错误:The mbstring exte...
变量是用于存储数据的容器,与代数相似,可以给变量赋予某个确定的值(例如:$x=3)或者是赋予其它的变...