Bagaimana untuk menyediakan klien golang untuk API Kalendar Google menggunakan akaun perkhidmatan? Ini adalah masalah biasa yang dihadapi oleh ramai pembangun apabila menggunakan API Kalendar Google. Dalam artikel ini, editor PHP Banana akan memperkenalkan anda secara terperinci cara menggunakan akaun perkhidmatan untuk mengkonfigurasi klien golang supaya anda boleh berinteraksi dengan API Kalendar Google dengan lancar. Sama ada anda seorang pemula atau pembangun yang berpengalaman, artikel ini akan memberikan anda panduan yang jelas untuk membantu anda memulakan proses dengan cepat. Mari kita meneroka bersama-sama!
Saya telah melihat banyak dokumentasi tentang klien google api untuk pengguna, tetapi sangat sedikit tentang menggunakan akaun perkhidmatan. Ini tidak mewakili pengguna, saya hanya mahu klien menggunakan api kalendar dengan id klien dan rahsia klien, yang akan diberikan kepada saya melalui pembolehubah persekitaran (saya tidak mahu bermula dari fail).
Ini yang saya ada setakat ini:
package main import ( "context" clientcredentials "golang.org/x/oauth2/clientcredentials" google "golang.org/x/oauth2/google" calendar "google.golang.org/api/calendar/v3" apioption "google.golang.org/api/option" ) func main() { config := &clientcredentials.config{ clientid: "<my_id>", clientsecret: "-----begin private key-----\n...", tokenurl: google.endpoint.tokenurl, } ctx := context.background() client := config.client(ctx) service, _ := calendar.newservice(ctx, apioption.withhttpclient(client)) calendarlist, err := service.calendarlist.list().do() }
Tetapi saya mendapat ralat berikut:
Get "https://www.googleapis.com/calendar/v3/users/me/calendarList?alt=json&prettyPrint=false": oauth2: cannot fetch token: 400 Bad Request Response: { "error": "unsupported_grant_type", "error_description": "Invalid grant_type: client_credentials" }
Sebarang bantuan di sini amat dihargai! Saya baru mengenali golang, oauth2 dan google api :)
Jawapan @tanaike membawa saya ke landasan yang betul. Inilah yang akhirnya saya gunakan:
package main import ( "context" "encoding/json" "fmt" googleoauth "golang.org/x/oauth2/google" calendar "google.golang.org/api/calendar/v3" apioption "google.golang.org/api/option" ) var service *calendar.service // note that some of the fields are optional: type googleauthconfig struct { type string `json:"type"` projectid string `json:"project_id,omitempty"` clientemail string `json:"client_email"` clientid string `json:"client_id,omitempty"` clientsecret string `json:"private_key"` clientsecretid string `json:"private_key_id,omitempty"` authurl string `json:"auth_uri,omitempty"` tokenurl string `json:"token_uri,omitempty"` authprovidercerturl string `json:"auth_provider_x509_cert_url,omitempty"` clientcerturl string `json:"client_x509_cert_url,omitempty"` } func main() { authconfig := googleauthconfig{ type: "service_account", clientemail: "<a href="https://www.php.cn/link/89fee0513b6668e555959f5dc23238e9" class="__cf_email__" data-cfemail="82e3e1e1edf7ecf6b3b0b1c2f2f0ede8e7e1f6afb6b7b4acebe3eface5f1e7f0f4ebe1e7e3e1e1edf7ecf6ace1edef">[email protected]</a>", clientid: "1234", clientsecret: "-----begin private key-----\n...\n-----end private key-----\n", authurl: googleoauth.endpoint.authurl, tokenurl: googleoauth.endpoint.tokenurl, } authconfigjson, err := json.marshal(authconfig) ctx := context.background() service, err = calendar.newservice(ctx, apioption.withcredentialsjson([]byte(authconfigjson))) }
Perhatikan bahawa saya tidak perlu mengkonfigurasi perwakilan seluruh domain atau menyamar sebagai pengguna selepas menambahkan akaun perkhidmatan pada kalendar, ia berfungsi dengan baik.
Selepas menambah e-mel akaun pada kalendar, akaun perkhidmatan masih perlu menerima jemputan kalendar. Ini boleh dilakukan dengan:
entry := calendar.CalendarListEntry{Id: calendarID} service.CalendarList.Insert(&entry).Do()
Atas ialah kandungan terperinci Bagaimana untuk menyediakan klien golang untuk API Kalendar Google menggunakan akaun perkhidmatan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!