PHP调用百度短网址API接口

       近日在帮客户实现一个在微信平台商品推广时,总是被腾讯管理员封掉域名,换了域名也是不行,所以决定做快站,第二天也被封了,我勒个去!忘记说了,客户推广的是淘宝商品居多,也难怪了。所以现在想办法实现推广的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"

调用成功

你可能感兴趣的:(PHP)