优化小程序推荐码处理逻辑,支持通过扫码场景解析推荐码和初始章节ID。新增获取用户邀请码的功能以便于分享。更新分享配置,确保分享时自动带上推荐码。调整部分页面逻辑以提升用户体验。
This commit is contained in:
@@ -210,10 +210,23 @@ func GenerateMiniProgramCode(scene, page string, width int) ([]byte, error) {
|
||||
if page == "" {
|
||||
page = "pages/index/index"
|
||||
}
|
||||
// 微信建议 scene 仅含英文字母、数字;& 和 = 可能导致异常,将 & 转为 _ 再传给微信
|
||||
scene = strings.ReplaceAll(scene, "&", "_")
|
||||
if len(scene) > 32 {
|
||||
scene = scene[:32]
|
||||
}
|
||||
|
||||
envVersion := "release"
|
||||
if cfg != nil && cfg.WechatMiniProgramState != "" {
|
||||
switch cfg.WechatMiniProgramState {
|
||||
case "developer":
|
||||
envVersion = "develop"
|
||||
case "trial":
|
||||
envVersion = "trial"
|
||||
default:
|
||||
envVersion = "release"
|
||||
}
|
||||
}
|
||||
reqBody := map[string]interface{}{
|
||||
"scene": scene,
|
||||
"page": page,
|
||||
@@ -221,9 +234,8 @@ func GenerateMiniProgramCode(scene, page string, width int) ([]byte, error) {
|
||||
"auto_color": false,
|
||||
"line_color": map[string]int{"r": 0, "g": 206, "b": 209},
|
||||
"is_hyaline": false,
|
||||
"env_version": "trial", // 体验版,正式发布后改为 release
|
||||
"env_version": envVersion,
|
||||
}
|
||||
|
||||
jsonData, _ := json.Marshal(reqBody)
|
||||
resp, err := http.Post(url, "application/json", bytes.NewReader(jsonData))
|
||||
if err != nil {
|
||||
@@ -232,22 +244,17 @@ func GenerateMiniProgramCode(scene, page string, width int) ([]byte, error) {
|
||||
defer resp.Body.Close()
|
||||
|
||||
body, _ := io.ReadAll(resp.Body)
|
||||
|
||||
// 检查是否是 JSON 错误返回
|
||||
if resp.Header.Get("Content-Type") == "application/json" {
|
||||
var errResult struct {
|
||||
ErrCode int `json:"errcode"`
|
||||
ErrMsg string `json:"errmsg"`
|
||||
}
|
||||
if err := json.Unmarshal(body, &errResult); err == nil && errResult.ErrCode != 0 {
|
||||
return nil, fmt.Errorf("生成小程序码失败: %d - %s", errResult.ErrCode, errResult.ErrMsg)
|
||||
}
|
||||
// 无论 Content-Type,先尝试按 JSON 解析:微信错误时返回小体积 JSON,否则会误报「图片数据异常(太小)」
|
||||
var errResult struct {
|
||||
ErrCode int `json:"errcode"`
|
||||
ErrMsg string `json:"errmsg"`
|
||||
}
|
||||
if json.Unmarshal(body, &errResult) == nil && errResult.ErrCode != 0 {
|
||||
return nil, fmt.Errorf("生成小程序码失败: %d - %s", errResult.ErrCode, errResult.ErrMsg)
|
||||
}
|
||||
|
||||
if len(body) < 1000 {
|
||||
return nil, fmt.Errorf("返回的图片数据异常(太小)")
|
||||
return nil, fmt.Errorf("返回的图片数据异常(太小),可能未发布对应版本或参数错误")
|
||||
}
|
||||
|
||||
return body, nil
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user