|
|
@@ -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
|
|
|
+}
|