You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
information-system/dingdingcallback/api/Auth.php

108 lines
3.1 KiB
PHP

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<?php
require_once(__DIR__ . "/ISVService.php");
require_once(__DIR__ . "/../util/Cache.php");
require_once(__DIR__ . "/../util/Log.php");
require_once(__DIR__ . "/ISVClass.php");
class Auth
{
/**
* 缓存jsTicket。jsTicket有效期为两小时需要在失效前请求新的jsTicket注意以下代码没有在失效前刷新缓存的jsTicket
*/
public static function getTicket($corpId,$accessToken)
{
$jsticket = Cache::getJsTicket('js_ticket_'.$corpId);
if (!$jsticket)
{
$response = Http::get('/get_jsapi_ticket', array('type' => 'jsapi', 'access_token' => $accessToken));
self::check($response);
$jsticket = $response->ticket;
Cache::setJsTicket('js_ticket_'.$corpId,$jsticket);
}
return $jsticket;
}
function curPageURL()
{
$pageURL = 'http';
if (array_key_exists('HTTPS',$_SERVER)&&$_SERVER["HTTPS"] == "on")
{
$pageURL .= "s";
}
$pageURL .= "://";
if ($_SERVER["SERVER_PORT"] != "80")
{
$pageURL .= $_SERVER["SERVER_NAME"] . ":" . $_SERVER["SERVER_PORT"] . $_SERVER["REQUEST_URI"];
}
else
{
$pageURL .= $_SERVER["SERVER_NAME"] . $_SERVER["REQUEST_URI"];
}
return $pageURL;
}
public static function isvConfig($corpId)
{
$corpInfo = ISVClass::getCorpInfo($corpId);
$corpId = $corpInfo['corp_id'];
$agentId = ISVService::getCurAgentId($corpId,APPID);
$nonceStr = 'abcdefg';
$timeStamp = time();
$url = self::curPageURL();
$ticket = self::getTicket($corpId,$corpInfo['corpAccessToken']);
$signature = self::sign($ticket, $nonceStr, $timeStamp, $url);
$arr = array();
$arr['ticket'] = $ticket;
$arr['nonceStr'] = $nonceStr;
$arr['timeStamp'] = $timeStamp;
$arr['url'] = $url;
$arr['signature'] = $signature;
$config = array(
'url' => $url,
'nonceStr' => $nonceStr,
'agentId' => $agentId,
'timeStamp' => $timeStamp,
'corpId' => $corpId,
'suite_key' => SUITE_KEY,
'signature' => $signature);
return json_encode($config, JSON_UNESCAPED_SLASHES);
}
public static function sign($ticket, $nonceStr, $timeStamp, $url)
{
$plain = 'jsapi_ticket=' . $ticket .
'&noncestr=' . $nonceStr .
'&timestamp=' . $timeStamp .
'&url=' . $url;
return sha1($plain);
}
/**
* @param $accessToken
* @param $code
* @return 个人授权信息
*/
public static function getPerson($accessToken, $code)
{
$response = Http::get("/user/get_private_info",
array("access_token" => $accessToken, "tmp_auth_code" => $code));
return json_encode($response);
}
static function check($res)
{
if ($res->errcode != 0)
{
Log::e("FAIL: " . json_encode($res));
exit("Failed: " . json_encode($res));
}
}
}