2017-09-13 16:20:56
<?php
class JSSDKAction extends Action {
public function _initialize(){
define('APP_ID','xxxxxxxxxxxxxxxx');
define('APP_SEC','xxxxxxxxxxxxxxxxxxxxxxxx');
}
public function deal(){
if(!empty($_POST['curl'])){
$url = $_POST['curl'];
$wx_token = $this->getAccessToken(APP_ID,APP_SEC); //获取ac_token (生存时间7200 , 获取后需设置缓存)
$ticket = $this->getTicket($wx_token); // 使用token 获取JsApiTicket(调用微信临时票据;生存时间7200 , 获取后需设置缓存)
$signPackage = $this->getSignPackage($url, $ticket['ticket'], APP_ID);//获取JSSDK签名信息 ,通过config接口注入权限验证配置
echo json_encode($signPackage);
}
}
/**
* 获取微信基础AccessToken
* @param type $getNewToken 是否强制刷新
* @return type
*/
public function getAccessToken($appid,$appsecret) {
$key = 'AccessToken_' . $appid . '_' . $appsecret;
$wx_token = '';
$accessToken = $this->getWxAccessToken( $appid, $appsecret);
$wx_token = $accessToken['access_token'];
return $wx_token;
}
/**
* 获取基础AccessToken
* @param type $appid
* @param type $appSecret
* @param type $type
* @return type
*/
public function getWxAccessToken($appid, $appSecret, $type = 'client_credential') {
$url = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=' . $type . '&appid=' . $appid . '&secret=' . $appSecret;
$data = $this->http($url,null ,'GET');
$json = json_decode($data, true);
return $json;
}
/**
* 获取调用微信临时票据
* @param type $access_token 全局唯一票据
* @param type $type
* @return type
*/
public function getTicket($access_token, $type = 'jsapi') {
$url = 'https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=' . $access_token . '&type=' . $type;
$result = $this->http($url);
$json = json_decode($result, true);
return $json;
}
/**
* 获取JSSDK签名信息
* @param type $url
* @param type $ticket
* @return type
*/
public function getSignPackage($url, $ticket ,$appId) {
$timestamp = time();
$nonceStr = $this->getNonceStr();
// 这里参数的顺序要按照 key 值 ASCII 码升序排序
$string = "jsapi_ticket=$ticket&noncestr=$nonceStr×tamp=$timestamp&url=$url";
$signature = sha1($string);
$signPackage = array(
'appId' => $appId,
'nonceStr' => $nonceStr,
'timestamp' => $timestamp,
'url' => $url,
'signature' => $signature,
);
return $signPackage;
}
public function getNonceStr($length = 16) {
$chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
$str = '';
for ($i = 0; $i < $length; $i++) {
$str .= substr($chars, mt_rand(0, strlen($chars) - 1), 1);
}
return $str;
}
public function http($url, $param = null, $method = 'POST') {
try {
$opts = array(
CURLOPT_TIMEOUT => 30,
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_SSL_VERIFYHOST => false,
);
/* 根据请求类型设置特定参数 */
$opts[CURLOPT_URL] = $url;
if (strtoupper($method) == 'POST' && !is_null($param)) {
$opts[CURLOPT_POST] = 1;
$opts[CURLOPT_POSTFIELDS] = $param;
if (is_string($param)) { //发送JSON数据
$opts[CURLOPT_HTTPHEADER] = array(
'Content-Type: application/json; charset=utf-8',
'Content-Length: ' . strlen($param),
);
}
}
/* 初始化并执行curl请求 */
$ch = curl_init();
curl_setopt_array($ch, $opts);
$data = curl_exec($ch);
$error = curl_error($ch);
curl_close($ch);
if ($error) {//发生错误
//throw new \Exception('请求发生错误:' . $error);
$data = array('errcode' => -1, 'errmsg' => $error);
}
} catch (\Exception $ex) {
$data = array('errcode' => -1, 'errmsg' => $ex->getMessage());
}
return $data;
}
}
前台
var curl = location.href;
$.post("{:U('JSSDK/deal')}",{"curl":curl},function(data){
var info = eval("("+data+")");
wx.config({
debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
appId: info.appId, // 必填,公众号的唯一标识
timestamp: info.timestamp, // 必填,生成签名的时间戳
nonceStr: info.nonceStr, // 必填,生成签名的随机串
signature: info.signature,// 必填,签名,见附录1
jsApiList: ['onMenuShareTimeline'] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2
});
wx.ready(function(){
wx.onMenuShareTimeline({
title: '明日学院发现作品', // 分享标题
link: curl, // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
imgUrl: '{:UPLOAD_SERVER}{$info.cover}', // 分享图标
success: function () {
// 用户确认分享后执行的回调函数
},
cancel: function () {
// 用户取消分享后执行的回调函数
}
});
});
});
更多精彩内容:各种AI课程、技能课程、黑科技软件、网站小程序源码、副业小项目、PPT模板等精品素材、电商课程、推广引流课程等,尽在 天边资源网 。