近日在帮客户实现一个在微信平台商品推广时,总是被腾讯管理员封掉域名,换了域名也是不行,所以决定做快站,第二天也被封了,我勒个去!忘记说了,客户推广的是淘宝商品居多,也难怪了。所以现在想办法实现推广的url链接转成短链,长链接随机转化为短链,每次都不一样,隐蔽域名。
百度、网易、新浪都有短网址api接口,这里使用的百度的短链接生成接口。好处是,短网址生成服务以及API调用是免费的并且不限制次数,短网址的接口采用token鉴权机制很好申请,而且是长期有效,等等吧。
接口文档:https://dwz.cn/console/apidoc
/**
* @author: vfhky 20130304 20:10
* @description: PHP调用百度短网址API接口
*/
$host = 'https://dwz.cn';
$path = '/admin/v2/create';
$url = $host . $path;
$method = 'POST';
$content_type = 'application/json';
// 设置Token
$token = '你的Token';
// 设置待注册长网址
$bodys = array('url'=>'https://www.baidu.com');
// 配置headers
$headers = array('Content-Type:'.$content_type, 'Token:'.$token);
// 创建连接
$curl = curl_init($url);
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, $method);
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
curl_setopt($curl, CURLOPT_FAILONERROR, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($bodys));
// 发送请求
$response = curl_exec($curl);
//var_dump(curl_error($curl));exit;
curl_close($curl);
$item_url1 = json_decode($response,true);
$item_url = $item_url1['ShortUrl'];
// 读取响应
var_dump($item_url);
封装个方法吧,好调用。封装一个静态方法的时候,想到用的是yii框架,也安装了\GuzzleHttp\Client()扩展了。
如果有用到扩展的话,在composer.json中加上
"guzzlehttp/guzzle": "~6.0"
然后在控制栏,执行composer update
/**
* 百度短连接
* Class ShortUrl
* @package common\components\baidu
*/
class ShortUrl extends BaseObject
{
const API_CREATE_SHORT_URL = 'https://dwz.cn/admin/v2/create';
/**
* 长连接转短连接
* @param $longUrl
* @return string
* @throws \GuzzleHttp\Exception\GuzzleException
* @throws \InvalidArgumentException
*/
public static function create($longUrl)
{
// 百度生成的token
$token = '你的百度token';
$client = new \GuzzleHttp\Client();
//初始化客户端
$response = $client->request('POST',self::API_CREATE_SHORT_URL, [
'headers' => [
// 接口类型
'Content-Type' => 'application/json',
'Token' => $token,
],
'json' => [
// post查询字符串参数组
'url' => $longUrl,
],
]);
//获取响应体,对象
$response = $response->getBody();
// 获取的返回结果,转化为数组
$response = Json::decode($response->getContents(),true);
if($response['Code'] != 0){
// 异常抛出
throw new Exception('百度短网址生成接口错误码:' . $response['Code']);
}
// 判断生成的短链接是否合法
if(Utils::checkUrl($response['ShortUrl'])){
$response = $response['ShortUrl'];
} else {
throw new Exception('生成的短链不合法!');
}
return $response;
}
}
对于封装好的这个方法,在调用的时候,调用ShortUrl::create('http://www.baidu.com');
生成如下:
string(23) "https://dwz.cn/3h0urwCg"
调用成功