根据需求 - 选择自己生成短域名还是利用第三方api获得
自己生成短链接
注意:中心思想"域名转发"
既然是域名转发,所以我们需要两个域名
域名一:项目域名「www.a1.com」
域名二:中间域名「www.a2.com」
www.a1.com代码块「mvc框架,根据自己的框架调整代码」
class Api extends Base
{
/**
* 需要生成短连接的方法
* @return string
*/
public function indexAction()
{
$code = $_GET['psid'];
$url = 'http://www.a1.com/api/index?psid=' . base64_encode($code); //有需要加密的参数,加密一下
$shorturl = $this->urlShort($url);
echo $shorturl;exit;
}
/**
* 生成短链接方法
* @return string
*/
private function urlShort($url)
{
// 以下代码利用php函数生成短连接
$do_url = crc32($url);
$result = sprintf("%u", $do_url);
$sUrl = '';
while ($result > 0) {
$s = $result % 62;
if ($s > 35) {
$s = chr($s + 61);
} elseif ($s > 9 && $s <= 35) {
$s = chr($s + 55);
}
$sUrl .= $s;
$result = floor($result / 62);
}
// 把生成的短链接存储到redis里面「建议设置存储时间」
self::$redis->set($sUrl, $url);
// 设置短域名为:http://yoururl.com/「自己购买的域名」
$data = 'http://www.a2.com/' . $sUrl;
return $data;
}
/**
* 返回短网址数据 暂不存库
* @return string
*/
public function geturlAction()
{
$dos = $_POST['dos'];
die(self::$redis->get($dos));
}
}
www.a2.com代码块「未使用框架,根据自己的框架调整代码」
<?php
// 获取redis存储的域名
if($_SERVER['REQUEST_URI']){
// 正则去掉微信在链接后面加了参数
$str = preg_replace('/\?.*/', '', $_SERVER['REQUEST_URI']);
$path=explode("/",$str);
if(isset($path[1]) && $path[1]){
$res = getShareSums($path[1]);
if($res){
$url=$res;
}
}
}
// 跳回长链接
header("Location: ".$url);
exit;
// 调用www.a1.com里面geturl接口获取到长链接
function getShareSums($dos){
$datastr = "dos={$dos}";
$url = "www.a1.com/api/geturl";
$ch = curl_init();
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_POST,TRUE);
curl_setopt($ch,CURLOPT_POSTFIELDS,$datastr);
curl_setopt($ch,CURLOPT_HEADER,0);
curl_setopt($ch,CURLOPT_RETURNTRANSFER, 1);
$new_url = curl_exec($ch);
curl_close($ch);
return $new_url;
}
?>
利用第三方接口生成短链接
1.百度生成短链接接口
https://dwz.cn/console/apidoc
网友评论