<?php
/**
* Description of WxShare
*微信分享
* @author xinjun
*/
namespace Controller\Wx;
use Controller\Home\HomeBase;
use Model\Wx\UserModel;
use Model\Wx\TokenModel;
use Framework\Net\Request;
class WxShare extends HomeBase
{
public function __construct()
{
parent::__construct();
}
/**
* 分享配置信息
* @return type
*/
public function getConfig()
{
$url = $_POST['url'];
$conf = array();
$conf['debug'] = true;
$conf['appId'] = $this->getAppid();
$conf['timestamp'] = time();
$conf['nonceStr'] = "Wm3WZYTPz0wzccnW";
$conf['signature'] = $this->getSignature($conf['nonceStr'],$conf['timestamp'],$url);
$conf['jsApiList'] = ['onMenuShareTimeline','onMenuShareAppMessage'];
// print_r($conf);exit;
return $this->getData($conf);//json_encode($conf,JSON_UNESCAPED_SLASHES) ;
}
/**
* 获取appid
* @return type
*/
public function getAppid()
{
$tokenModel = new TokenModel();
$appidData = $tokenModel->getAccessToken(array('nf_type'=>1));
return $appidData['nf_appid'];
}
/**
* 获取签名signature
* @param type $UNSTR
* @param type $TIMESTAMP
* @return type
*/
public function getSignature($UNSTR,$TIMESTAMP,$url)
{
// 获取 jsapi_ticket 值
$jsapi_ticket = $this->getTicket();
$signature = 'jsapi_ticket=' . $jsapi_ticket . '&noncestr=' . $UNSTR . '×tamp=' . $TIMESTAMP . '&url=' . $url;
return sha1($signature);
}
/**
* 获取 ticket
* @return boolean
*/
public function getTicket()
{
// 判断数据库jsapi_ticket更新时间
// 超过 1000 秒则重新获取 并更新数据库 ( 每日调用次数为 100万次 2016年12月15日 )
//取基础access_token
$tokenModel = new TokenModel();
$tokenData = $tokenModel->getAccessToken(array('id' => 2));
$accesstokenData = $tokenModel->getAccessToken(array('id' => 1));
if (($tokenData['nf_val'] != '')&& (($tokenData['nf_time'] + 6000) > time())) {
return $tokenData['nf_val'];
} else {
// 更新 jsapi_ticket
$url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=".$accesstokenData['nf_val']."&type=jsapi";
$https = true;
$method = 'get';
$data = null;
$jsonJsapi_ticket = $this->request($url, $https, $method, $data);
$jsapi_ticket = json_decode($jsonJsapi_ticket, true);
if (!isset($jsapi_ticket['ticket'])) {
return false;
}
$upTicket = $tokenModel->edit(array('nf_val'=>$jsapi_ticket['ticket'],'nf_time'=>time()), array('id'=>2));
if ($upTicket) {
$data = $tokenModel->getAccessToken(array('id' => 2));
if(!empty($data)){
$jsapi_ticket['ticket'] = $data['nf_val'];
return $jsapi_ticket['ticket'];
}else{
return false;
}
} else {
return false;
}
}
}
}