如何使用Oauth2连接和使用facebook营销api

问题描述

我正在尝试使用 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)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...