Procházet zdrojové kódy

long url to short url (#367)

* long url to short url

* Decode by util.DecodeWithError
kaiiak před 5 roky
rodič
revize
398f2ec6ae
1 změnil soubory, kde provedl 52 přidání a 0 odebrání
  1. 52 0
      officialaccount/basic/short_url.go

+ 52 - 0
officialaccount/basic/short_url.go

@@ -0,0 +1,52 @@
+package basic
+
+import (
+	"fmt"
+
+	"github.com/silenceper/wechat/v2/util"
+)
+
+const (
+	// 将一条长链接转成短链接
+	// https://developers.weixin.qq.com/doc/offiaccount/Account_Management/URL_Shortener.html
+	long2shortURL    = "https://api.weixin.qq.com/cgi-bin/shorturl?access_token=%s"
+	long2shortAction = "long2short"
+)
+
+type (
+	reqLong2ShortURL struct {
+		Action  string `json:"action"`
+		LongURL string `json:"long_url"`
+	}
+	resplong2ShortURL struct {
+		ShortURL string `json:"short_url"`
+		util.CommonError
+	}
+)
+
+// Long2ShortURL 将一条长链接转成短链接
+func (basic *Basic) Long2ShortURL(longURL string) (shortURL string, err error) {
+	var (
+		req = &reqLong2ShortURL{
+			Action:  long2shortAction,
+			LongURL: longURL,
+		}
+		resp          = new(resplong2ShortURL)
+		ac, uri       string
+		responseBytes []byte
+	)
+	ac, err = basic.GetAccessToken()
+	if err != nil {
+		return
+	}
+	uri = fmt.Sprintf(long2shortURL, ac)
+	responseBytes, err = util.PostJSON(uri, req)
+	if err != nil {
+		return
+	}
+	if err = util.DecodeWithError(responseBytes, resp, long2shortAction); err != nil {
+		return
+	}
+	shortURL = resp.ShortURL
+	return
+}