74 lines
1.7 KiB
Plaintext
74 lines
1.7 KiB
Plaintext
|
|
package shortUrlMgr
|
||
|
|
|
||
|
|
import (
|
||
|
|
"encoding/json"
|
||
|
|
"fmt"
|
||
|
|
"time"
|
||
|
|
|
||
|
|
"goutil/securityUtil"
|
||
|
|
"goutil/stringUtil"
|
||
|
|
"goutil/webUtil"
|
||
|
|
)
|
||
|
|
|
||
|
|
var (
|
||
|
|
ShortUrl_SERVICE_URL = "http://a.app366.com/get"
|
||
|
|
)
|
||
|
|
|
||
|
|
// 服务器的响应对象
|
||
|
|
type QueryResponse struct {
|
||
|
|
// 响应结果的状态值
|
||
|
|
ResultStatus string
|
||
|
|
|
||
|
|
// 响应结果的数据
|
||
|
|
Data string
|
||
|
|
}
|
||
|
|
|
||
|
|
// 获取短链
|
||
|
|
// appId: 为应用分配的唯一标识
|
||
|
|
// appSecret: 为应用分配的密钥
|
||
|
|
// fullUrl: 完整的Url
|
||
|
|
// timeout:超时时间(单位:秒)
|
||
|
|
// 返回值:
|
||
|
|
// ipInfoObj: IP地址信息对象
|
||
|
|
// err: 错误对象
|
||
|
|
func GetShortUrl(appId, appSecret, fullUrl string, timeout int) (shortUrl string, err error) {
|
||
|
|
timeStamp := fmt.Sprintf("%d", time.Now().Unix())
|
||
|
|
fullUrl = stringUtil.Base64Encode(fullUrl)
|
||
|
|
rawString := fmt.Sprintf("AppId=%s&FullUrl=%s&Timestamp=%s&AppSecret=%s", appId, fullUrl, timeStamp, appSecret)
|
||
|
|
sign := securityUtil.Md5String(rawString, true)
|
||
|
|
|
||
|
|
postData := make(map[string]string, 5)
|
||
|
|
postData["AppId"] = appId
|
||
|
|
postData["FullUrl"] = fullUrl
|
||
|
|
postData["Timestamp"] = timeStamp
|
||
|
|
postData["Sign"] = sign
|
||
|
|
|
||
|
|
header := webUtil.GetFormHeader()
|
||
|
|
transport := webUtil.NewTransport()
|
||
|
|
transport.DisableKeepAlives = true
|
||
|
|
transport = webUtil.GetTimeoutTransport(transport, timeout)
|
||
|
|
statusCode, result, err := webUtil.PostMapData(ShortUrl_SERVICE_URL, postData, header, transport)
|
||
|
|
if err != nil {
|
||
|
|
return
|
||
|
|
}
|
||
|
|
if statusCode != 200 {
|
||
|
|
err = fmt.Errorf("StatusCode:%d is wrong.", statusCode)
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
var queryResponseObj *QueryResponse
|
||
|
|
err = json.Unmarshal(result, &queryResponseObj)
|
||
|
|
if err != nil {
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
if queryResponseObj.ResultStatus != "" {
|
||
|
|
err = fmt.Errorf("Query result:%s", queryResponseObj.ResultStatus)
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
shortUrl = queryResponseObj.Data
|
||
|
|
|
||
|
|
return
|
||
|
|
}
|