调用百度AI,报错:{"error_code":6,"error_msg":"No permission to access data"}

1,021 阅读1分钟

在调用百度AI票据识别的“通用机打发票识别”时。

报错: 最后发现是,没有这个权限:

1.图片转base64的代码

//文件转成base64

func fileToBase64(path string) (string, error) {
	data, err := ioutil.ReadFile(path)
	if err != nil {
		log.Debug(err)
		return "", err
	}
	base64Str := base64.StdEncoding.EncodeToString(data)
	f, err := os.OpenFile("test.txt", os.O_RDWR|os.O_CREATE, os.ModePerm)
	if err != nil {
		log.Debug(err)
		return "", err
	}
	defer f.Close()
	f.Write([]byte(base64Str))
	return base64Str, nil
}

2.获取token的代码

func GetToken() (string, error) {
	token := getToken(1)
	if token != "" {
		return token, nil
	}
	url := fmt.Sprintf("%s/oauth/2.0/token?grant_type=client_credentials&client_id=%s&client_secret=%s",domain, APIKey, SecretKey)
	data, err := utils.HttpPost(url, nil)
	if err != nil {
		log.Errorf("[getUserInfo][HttpPost] %v", err)
		return "", fmt.Errorf("解析数据失败")
	}
	var ret *TokenResult
	err = json.Unmarshal(data, &ret)
	if err != nil {
		log.Errorf("[getUserInfo][Unmarshal] %v", err)
		log.Debugf("[getUserInfo] %s", string(data))
		return "", fmt.Errorf("解析数据失败")
	}
	if ret.Error == "" {
		if ret.ExpiresIn <= 0 {
			return "", fmt.Errorf("无数据")
		}
		saveToken(1,ret.AccessToken)
		return ret.AccessToken, nil
	}
	return "", fmt.Errorf(ret.ErrorDescription)
}

type TokenResult struct {
	AccessToken      string `json:"access_token"`
	ExpiresIn        int    `json:"expires_in"`
	Error            string `json:"error"`
	ErrorDescription string `json:"error_description"`
	Scope            string `json:"scope"`
	SessionKey       string `json:"session_key"`
	SessionSecret    string `json:"session_secret"`
}

func saveToken(id int64,token string)  {
	key := conf.GetOrcToken(id,"baidu")
	_ = cron.WriteStr(key,token,60 * 60 * 2 - 50)
}

func getToken(id int64) string {
	token,_ := cron.ReadStr(conf.GetOrcToken(id,"baidu"))
	return token
}