问题描述
我正在尝试使用 facebook Marketing API。
问题是我不知道如何执行请求
import (
"context"
"fmt"
"log"
"net/http"
"os"
fb "github.com/huandu/facebook"
"github.com/joho/godotenv"
"golang.org/x/oauth2"
)
func main() {
http.HandleFunc("/",func(w http.ResponseWriter,r *http.Request) {
w.WriteHeader(200)
_,_ = fmt.Fprintf(w,"Hello,World!")
})
http.HandleFunc("/use-fb",FBConnect)
port := os.Getenv("PORT")
if port == "" {
port = "8080"
log.Printf("Defaulting to port %s",port)
}
log.Println("Listening on port %s",port)
log.Printf("Open http://localhost:%s in the browser",port)
}
还有我的 Facebook Connect 功能,
func godotEnvVariable(key string) string {
// load .env file
err := godotenv.Load(".env")
if err != nil {
log.Fatalf("Error loading .env file")
}
return os.Getenv(key)
}
func FBConnect(w http.ResponseWriter,r *http.Request) {
var (
ClientID = godotEnvVariable("FB_APP_ID")
ClientSecret = godotEnvVariable("FB_KEY_SECRET")
tokenApp = godotEnvVariable("FB_USER_TOKEN")
//tokenUser = os.Getenv("Fb_user_app")
)
fbConfig := &oauth2.Config{
ClientID: godotEnvVariable("FB_APP_ID"),// change this to yours
ClientSecret: godotEnvVariable("FB_KEY_SECRET"),RedirectURL: "http://localhost:8080/use-fb",// change this to your webserver adddress
Scopes: []string{"email"},Endpoint: oauth2.Endpoint{
AuthURL: "https://www.facebook.com/dialog/oauth",TokenURL: "https://graph.facebook.com/oauth/access_token",},}
url := fbConfig.AuthCodeURL("")
fmt.Println("Config",url)
var globalApp = fb.New(ClientID,ClientSecret)
globalApp.EnableAppsecretProof = true
session := globalApp.Session(tokenApp)
err = session.Validate()
fmt.Println(session.Get("/me",nil))
}
我不知道如何使用营销 API,因为我们在 Go 中只有 Facebook Graph API SDK,但没有 Facebook Marketing API SDK。
解决方法
你调用 use Marketing Api with huandu package 但你需要在 session.go 中更改 getURL 函数
// facebook versioning.
if session.Version == "" {
if Version != "" {
buf.WriteString(Version)
buf.WriteRune('/')
}
} else {
buf.WriteString(session.Version)
buf.WriteRune('/')
}
由
buf.WriteString("v9.0")
buf.WriteRune('/')
或者如果facebook更改版本
buf.WriteString("vx.x")
buf.WriteRune('/')
或者当你调用你的api时你写
session.Get("/v9.0/me",nil)