微信公众号实现长链接转短链接!w.url.cn短网址生成

7,226次阅读
没有评论

共计 2417 个字符,预计需要花费 7 分钟才能阅读完成。

微信公众号开发者平台提供短网址生成的 API,最终生成的短网址是 w.url.cn 的,下面是详细的代码。

官方文档
https://developers.weixin.qq.com/doc/offiaccount/Account_Management/URL_Shortener.html

请求参数
access_token
action 此处填 long2short,代表长链接转短链接
long_url 需要转换的原链接

HTTP POST 请求网址
https://api.weixin.qq.com/cgi-bin/shorturl?access_token=ACCESS_TOKEN

请求流程
1、获取本地缓存的 access_token,如果超过有效期,则重新获取,如果还没过期,直接使用缓存的 access_token
2、构建请求参数,发起 POST 请求
3、获得短网址

代码
appid 和 appsecret 可以申请一个微信公众号测试账号进行开发
申请地址:http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login

 

<?php
header("Content-type:application/json");
 
// 声明 APPID、APPSECRET
$appid = "xxx";
$appsecret = "xxx";
 
// 获取 access_token 和 jsapi_ticket
function getToken(){$file = file_get_contents("access_token.json",true);// 读取 access_token.json 里面的数据
    $result = json_decode($file,true);
 
// 判断 access_token 是否在有效期内,如果在有效期则获取缓存的 access_token
// 如果过期了则请求接口生成新的 access_token 并且缓存 access_token.json
if (time() > $result['expires']){$data = array();
        $data['access_token'] = getNewToken();
        $data['expires'] = time()+7000;
        $jsonStr =  json_encode($data);
        $fp = fopen("access_token.json", "w");
        fwrite($fp, $jsonStr);
        fclose($fp);
        return $data['access_token'];
    }else{return $result['access_token'];
    }
}
  
// 获取新的 access_token
function getNewToken($appid,$appsecret){
    global $appid;
    global $appsecret;
    $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$appid."&secret=".$appsecret."";
    $access_token_Arr =  file_get_contents($url);
    $token_jsonarr = json_decode($access_token_Arr, true);
    return $token_jsonarr["access_token"];
}
 
// 获得长链接
$long_url = trim($_GET["long_url"]);
 
// 过滤
if (empty($long_url)) {
    $result = array(
        "result" => "101",
        "msg" => "请传入长链接"
    );
} else if (strpos($long_url,'http') !== false){
    // 初始化 CURL
    $ch = curl_init();
    // 请求地址 
    curl_setopt($ch, CURLOPT_URL, 'https://api.weixin.qq.com/cgi-bin/shorturl?access_token='.getToken());
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
    $postdata =  '{"action":"long2short","long_url":"'.$long_url.'"}'; 
    curl_setopt($ch, CURLOPT_POSTFIELDS, $postdata);
    // 对认证证书来源的检查
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
    // 从证书中检查 SSL 加密算法是否存在
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
    // 获取的信息以文件流的形式返回,而不是直接输出
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    // 发起请求
    $dwzStr = curl_exec($ch);
    // 解析数据
    $arr_dwzStr = json_decode($dwzStr, true);
    $dwz = $arr_dwzStr["short_url"];
    // 关闭请求
    curl_close($ch);
 
    // 返回结果
    $result = array(
        "result" => "100",
        "msg" => "解析成功",
        "dwz" => $dwz
    );
}else{
    $result = array(
        "result" => "102",
        "msg" => "长链接不合法"
    );
}
 
// 返回 JSON
echo json_encode($result,JSON_UNESCAPED_UNICODE);
?>

生成示例
{“result”:”100″,”msg”:”生成成功”,”dwz”:”https://w.url.cn/s/AVuvUup”}

正文完
 0
评论(没有评论)