微信公衆號實現長連接轉短連接!w.url.cn短網址生成

微信公衆號開發者平臺提供短網址生成的API,最終生成的短網址是w.url.cn的,下面是詳細的代碼。php

官方文檔

https://developers.weixin.qq.com/doc/offiaccount/Account_Management/URL_Shortener.html

請求參數

access_token
action 此處填long2short,表明長連接轉短連接
long_url 須要轉換的原連接html

HTTP POST請求網址

https://api.weixin.qq.com/cgi-bin/shorturl?access_token=ACCESS_TOKEN

請求流程

一、獲取本地緩存的access_token,若是超過有效期,則從新獲取,若是還沒過時,直接使用緩存的access_token
二、構建請求參數,發起POST請求
三、得到短網址算法

代碼

appid和appsecret能夠申請一個微信公衆號測試帳號進行開發,申請地址:http://mp.weixin.qq.com/debug...json

<?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\/AF5p0UM"}

體驗

http://www.likeyunba.com/api/wurl/?long_url=長連接

Author:TANKING
Date:2020-09-18
Web:http://www.likeyun.cn
WeChat:face6009api

相關文章
相關標籤/搜索