Skip to content

Commit

Permalink
增加 URLLink 和 ShortLink 相关功能
Browse files Browse the repository at this point in the history
  • Loading branch information
royalrick committed Aug 1, 2021
1 parent 2e2708b commit a2ba3e7
Show file tree
Hide file tree
Showing 5 changed files with 205 additions and 16 deletions.
82 changes: 78 additions & 4 deletions Readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,11 @@ go get -u github.com/medivhzhan/weapp/v3
- [get](#get)
- [getUnlimited](#getUnlimited)
- [URL-Scheme](#URL-Scheme)
- [generate](#generate)
- [GenerateURLScheme](#GenerateURLScheme)
- [URL-Link](#URL-Link)
- [GenerateURLLink](#GenerateURLLink)
- [ShortLink](#ShortLink)
- [GenerateShortLink](#GenerateShortLink)
- [内容安全](#内容安全)
- [imgSecCheck](#imgSecCheck)
- [mediaCheckAsync](#mediaCheckAsync)
Expand Down Expand Up @@ -1187,7 +1191,7 @@ content, err := ioutil.ReadAll(resp.Body)

## URL-Scheme

### generate
### GenerateURLScheme

[官方文档](https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/url-scheme.html)

Expand All @@ -1199,7 +1203,7 @@ import (
)


scheme := cli.URLScheme{
req := weapp.URLSchemeRequest{
SchemedInfo: &weapp.SchemedInfo{
Path: "mock/path",
Query: "",
Expand All @@ -1208,7 +1212,77 @@ scheme := cli.URLScheme{
ExpireTime: 1234567890,
}

resp, res, err := cli.GenerateURLSchema(&scheme)
resp, res, err := cli.GenerateURLScheme(&req)
if err != nil {
// 处理一般错误信息
return
}

if err := res.GetResponseError(); err !=nil {
// 处理微信返回错误信息
return
}

fmt.Printf("返回结果: %#v", res)

```

---

## URL-Link

### GenerateURLLink

[官方文档](https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/url-link/urllink.generate.html)

```go

import (
"ioutil"
"github.com/medivhzhan/weapp/v3"
)


req := weapp.URLLinkRequest{
// ...
}

resp, res, err := cli.GenerateURLLink(&req)
if err != nil {
// 处理一般错误信息
return
}

if err := res.GetResponseError(); err !=nil {
// 处理微信返回错误信息
return
}

fmt.Printf("返回结果: %#v", res)

```

---

## ShortLink

### GenerateShortLink

[官方文档](https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/short-link/shortlink.generate.html)

```go

import (
"ioutil"
"github.com/medivhzhan/weapp/v3"
)


req := weapp.ShortLinkRequest{
// ...
}

resp, res, err := cli.GenerateShortLink(&req)
if err != nil {
// 处理一般错误信息
return
Expand Down
6 changes: 0 additions & 6 deletions qr_code.go
Original file line number Diff line number Diff line change
Expand Up @@ -31,8 +31,6 @@ type QRCode struct {

// Get 获取小程序码
// 可接受path参数较长 生成个数受限 永久有效 适用于需要的码数量较少的业务场景
//
// token 微信access_token
func (cli *Client) GetQRCode(code *QRCode) (*http.Response, *CommonError, error) {
api := baseURL + apiGetQrCode

Expand Down Expand Up @@ -61,8 +59,6 @@ type UnlimitedQRCode struct {
// Get 获取小程序码
// 可接受页面参数较短 生成个数不受限 适用于需要的码数量极多的业务场景
// 根路径前不要填加'/' 不能携带参数(参数请放在scene字段里)
//
// token 微信access_token
func (cli *Client) GetUnlimitedQRCode(code *UnlimitedQRCode) (*http.Response, *CommonError, error) {
api := baseURL + apiGetUnlimitedQRCode

Expand All @@ -86,8 +82,6 @@ type QRCodeCreator struct {

// Create 获取小程序二维码,适用于需要的码数量较少的业务场景。通过该接口生成的小程序码,永久有效,有数量限制
// 通过该接口生成的小程序码,永久有效,有数量限制
//
// token 微信access_token
func (cli *Client) CreateQRCode(creator *QRCodeCreator) (*http.Response, *CommonError, error) {
api := baseURL + apiCreateQRCode

Expand Down
47 changes: 47 additions & 0 deletions short_link.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
package weapp

const (
apiShortLink = "/wxa/genwxashortlink"
)

type ShortLinkRequest struct {
// 必填 通过 Short Link 进入的小程序页面路径,必须是已经发布的小程序存在的页面,可携带 query,最大1024个字符
PageURL string `json:"page_url"`
// 必填 页面标题,不能包含违法信息,超过20字符会用... 截断代替
PageTitle string `json:"page_title"`
// 非必填 生成的 Short Link 类型,短期有效:false,永久有效:true
IsPermanent bool `json:"is_permanent"`
}

type ShortLinkResponse struct {
CommonError
// 生成的小程序 Short Link
Link string `json:"link"`
}

// 获取小程序 Short Link,适用于微信内拉起小程序的业务场景。目前只开放给电商类目(具体包含以下一级类目:电商平台、商家自营、跨境电商)。通过该接口,可以选择生成到期失效和永久有效的小程序短链
func (cli *Client) GenerateShortLink(link *ShortLinkRequest) (*ShortLinkResponse, error) {
api := baseURL + apiShortLink

token, err := cli.AccessToken()
if err != nil {
return nil, err
}

return cli.generateShortLink(api, token, link)
}

func (cli *Client) generateShortLink(api, token string, link *ShortLinkRequest) (*ShortLinkResponse, error) {
uri, err := tokenAPI(api, token)
if err != nil {
return nil, err
}

res := new(ShortLinkResponse)
err = cli.request.Post(uri, link, res)
if err != nil {
return nil, err
}

return res, nil
}
76 changes: 76 additions & 0 deletions url_link.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
package weapp

const (
apiURLLink = "/wxa/generate_urllink"
)

// URLLink 有效期类型
type URLLinkExpireType = uint8

const (
URLLinkExpireTypeTime URLLinkExpireType = 0
URLLinkExpireTypeDate URLLinkExpireType = 1
)

type URLLinkRequest struct {
// 非必填 通过 URL Link 进入的小程序页面路径,必须是已经发布的小程序存在的页面,不可携带 query 。path 为空时会跳转小程序主页
Path string `json:"path"`
// 非必填 通过 URL Link 进入小程序时的query,最大1024个字符,只支持数字,大小写英文以及部分特殊字符:!#$&'()*+,/:;=?@-._~%
Query string `json:"query"`
// 非必填 生成的 URL Link 类型,到期失效:true,永久有效:false
IsExpired bool `json:"is_expire"`
// 非必填 小程序 URL Link 失效类型,失效时间:0,失效间隔天数:1
ExpireType URLLinkExpireType `json:"expire_type"`
// 非必填 到期失效的 URL Link 的失效时间,为 Unix 时间戳。生成的到期失效 URL Link 在该时间前有效。最长有效期为1年。expire_type 为 0 必填
ExpireTime int64 `json:"expire_time"`
// 非必填 到期失效的URL Link的失效间隔天数。生成的到期失效URL Link在该间隔时间到达前有效。最长间隔天数为365天。expire_type 为 1 必填
ExpireInterval int64 `json:"expire_interval"`
// 非必填 云开发静态网站自定义 H5 配置参数,可配置中转的云开发 H5 页面。不填默认用官方 H5 页面
CloudBase *URLLinkCloudBase `json:"cloud_base"`
}

type URLLinkCloudBase struct {
// 必填 云开发环境
Env string `json:"env"`
// 非必填 静态网站自定义域名,不填则使用默认域名
Domain string `json:"domain"`
// 非必填 云开发静态网站 H5 页面路径,不可携带 query
Path string `json:"path"`
// 非必填 云开发静态网站 H5 页面 query 参数,最大 1024 个字符,只支持数字,大小写英文以及部分特殊字符:!#$&'()*+,/:;=?@-._~%
Query string `json:"query"`
// 非必填 第三方批量代云开发时必填,表示创建该 env 的 appid (小程序/第三方平台)
ResourceAppid string `json:"resource_appid"`
}

type URLLinkResponse struct {
CommonError
// 生成的小程序 URL Link
URLLink string `json:"url_link"`
}

// 获取小程序 URL Link,适用于短信、邮件、网页、微信内等拉起小程序的业务场景。通过该接口,可以选择生成到期失效和永久有效的小程序链接,目前仅针对国内非个人主体的小程序开放
func (cli *Client) GenerateURLLink(link *URLLinkRequest) (*URLLinkResponse, error) {
api := baseURL + apiURLLink

token, err := cli.AccessToken()
if err != nil {
return nil, err
}

return cli.generateURLLink(api, token, link)
}

func (cli *Client) generateURLLink(api, token string, link *URLLinkRequest) (*URLLinkResponse, error) {
uri, err := tokenAPI(api, token)
if err != nil {
return nil, err
}

res := new(URLLinkResponse)
err = cli.request.Post(uri, link, res)
if err != nil {
return nil, err
}

return res, nil
}
10 changes: 4 additions & 6 deletions url_scheme.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ const (
apiURLScheme = "/wxa/generatescheme"
)

type URLScheme struct {
type URLSchemeRequest struct {
// 跳转到的目标小程序信息。
SchemedInfo *SchemedInfo `json:"jump_wxa,omitempty"`
// 成的scheme码类型,到期失效:true,永久有效:false。
Expand All @@ -27,20 +27,18 @@ type URLSchemeResponse struct {
}

// 获取小程序scheme码,适用于短信、邮件、外部网页等拉起小程序的业务场景。
//
// token 微信access_token
func (cli *Client) GenerateURLSchema(scheme *URLScheme) (*URLSchemeResponse, error) {
func (cli *Client) GenerateURLScheme(scheme *URLSchemeRequest) (*URLSchemeResponse, error) {
api := baseURL + apiURLScheme

token, err := cli.AccessToken()
if err != nil {
return nil, err
}

return cli.generateURLSchema(api, token, scheme)
return cli.generateURLScheme(api, token, scheme)
}

func (cli *Client) generateURLSchema(api, token string, scheme *URLScheme) (*URLSchemeResponse, error) {
func (cli *Client) generateURLScheme(api, token string, scheme *URLSchemeRequest) (*URLSchemeResponse, error) {
uri, err := tokenAPI(api, token)
if err != nil {
return nil, err
Expand Down

0 comments on commit a2ba3e7

Please sign in to comment.