package wechat import ( "bytes" "encoding/base64" "errors" "fmt" "log" "git.tetele.net/tgo/helper" ) // 获取小程序码 func GetMiniappQrcode(access_token string, qrcodeParamsMap map[string]interface{}) (string, error) { getCodeUrl := fmt.Sprintf(GET_MINIAPP_QRCODE, access_token) checkPath := true envVersion := "release" width := 430 autoColor := false isHyaline := false if _, exist := qrcodeParamsMap["check_path"]; exist { checkPath = qrcodeParamsMap["check_path"].(bool) } if _, exist := qrcodeParamsMap["env_version"]; exist { envVersion = helper.ToStr(qrcodeParamsMap["env_version"]) } if _, exist := qrcodeParamsMap["width"]; exist { width = helper.ToInt(qrcodeParamsMap["width"]) } if _, exist := qrcodeParamsMap["auto_color"]; exist { autoColor = qrcodeParamsMap["auto_color"].(bool) } if _, exist := qrcodeParamsMap["is_hyaline"]; exist { isHyaline = qrcodeParamsMap["is_hyaline"].(bool) } requestData := map[string]interface{}{ "scene": qrcodeParamsMap["scene"], "page": qrcodeParamsMap["page"], "check_path": checkPath, "env_version": envVersion, "width": width, "auto_color": autoColor, "is_hyaline": isHyaline, } // json.marshal 会转义&字符 /*requestDataJson, err := json.Marshal(requestData) if err != nil { return "", err }*/ bf := bytes.NewBuffer([]byte{}) jsonEncoder := json.NewEncoder(bf) jsonEncoder.SetEscapeHTML(false) jsonEncoder.Encode(requestData) response, err := PostJson(getCodeUrl, bf.Bytes()) log.Println("get mp qrcode response:", string(response), err) if err != nil { return "", err } responseData := map[string]interface{}{} err = json.Unmarshal(response, &responseData) if err != nil { // 有错,但能解析 log.Println(err) } if _, exist := responseData["errcode"]; exist && helper.ToInt(responseData["errcode"]) != 0 { return "", errors.New(helper.ToStr(responseData["errmsg"]) + ",errcode:" + helper.ToStr(responseData["errcode"])) } return "data:image/png;base64," + base64.StdEncoding.EncodeToString(response), nil }