在调用百度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
}