79 lines
2.1 KiB
Go
79 lines
2.1 KiB
Go
package Scheme
|
|
|
|
import (
|
|
"encoding/json"
|
|
"errors"
|
|
"fmt"
|
|
"hospital-open-api/extend/weChat"
|
|
"strings"
|
|
)
|
|
|
|
// GetSchemeJumpWxaRequest 跳转到的目标小程序信息
|
|
type GetSchemeJumpWxaRequest struct {
|
|
Path string `json:"path"`
|
|
Query string `json:"query"`
|
|
// envVersion 要打开的小程序版本。正式版为 "release",体验版为 "trial",开发版为 "develop"
|
|
EnvVersion string `json:"env_version"`
|
|
}
|
|
|
|
// GetSchemeRequest 请求参数
|
|
// https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/url-scheme/urlscheme.generate.html#请求参数
|
|
type GetSchemeRequest struct {
|
|
JumpWxa *GetSchemeJumpWxaRequest `json:"jump_wxa"`
|
|
ExpireType int `json:"expire_type"`
|
|
ExpireTime int64 `json:"expire_time"`
|
|
ExpireInterval int `json:"expire_interval"`
|
|
}
|
|
|
|
// GetSchemeResponse 获取加密scheme码返回数据
|
|
type GetSchemeResponse struct {
|
|
OpenLink string `json:"openlink"`
|
|
|
|
weChat.CommonError
|
|
}
|
|
|
|
// GetScheme 获取加密scheme码
|
|
func (r *GetSchemeRequest) GetScheme(userType int) (string, error) {
|
|
// 初始化配置
|
|
weChatConfig := weChat.GetConfig(userType)
|
|
|
|
// 获取token
|
|
accessToken, err := weChatConfig.GetAccessToken()
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
|
|
url := fmt.Sprintf("%s?access_token=%s", "https://api.weixin.qq.com/wxa/generatescheme", accessToken)
|
|
|
|
// 将请求数据转换为 JSON
|
|
requestBody, err := json.Marshal(r)
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
|
|
// 去除json的转义
|
|
requestBody = []byte(strings.Replace(string(requestBody), "\\u0026", "&", -1))
|
|
|
|
body, err := weChat.PostRequest(url, requestBody)
|
|
if err != nil {
|
|
return "", errors.New(err.Error())
|
|
}
|
|
|
|
var GetSchemeResponse GetSchemeResponse
|
|
err = json.Unmarshal(body, &GetSchemeResponse)
|
|
if err != nil {
|
|
// json解析失败
|
|
return "", err
|
|
}
|
|
|
|
if GetSchemeResponse.ErrCode != 0 || GetSchemeResponse.ErrMsg != "ok" {
|
|
return "", errors.New(GetSchemeResponse.ErrMsg)
|
|
}
|
|
|
|
if GetSchemeResponse.OpenLink == "" {
|
|
return "", errors.New("失败")
|
|
}
|
|
|
|
return GetSchemeResponse.OpenLink, nil
|
|
}
|