Tesla api
一、特斯拉應用申請
1.1 建立 Tesla 賬戶
如果您還沒有 Tesla 賬戶,請建立賬戶。驗證您的電子郵件並設定多重身份驗證。
正常建立使用者就好,然後需要開啟多重身份認證,這邊常用的是mircrosoft的Authenticator.
注意點:(1)不要用自己車輛的郵箱來註冊(2)有些郵箱不是特斯拉開發者的郵箱,可能用這些有些無法正常提交訪問請求。
1.2 提交訪問請求
點選下方的“提交請求”按鈕,請求應用程式訪問許可權。登入後,請提供您的合法企業詳細資訊、應用程式名稱及描述和使用目的。在您提交了詳細資訊之後,我們會稽核您的請求並透過電子郵件向您傳送狀態更新。
這一步很坑,多次嘗試之後都無果,原因也不知道是為啥,只能自己去看返回報文琢磨,太難受了,下面是自己踩的坑
(1)Invalid domain
無效的域名,這裡我用的域名是騰訊雲個人伺服器的域名,證書是騰訊雲免費一年的證書,印象中第一申請的時候還是能過的,第二次的時候就不行了,可能被識別到免費的ssl證書不符合規範,還是需要由合法機構的頒發證書才行。所以,為了金快速申請透過,先填個https://baidu.com吧。當然,後續需要徹底解決自己域名證書的問題,我改為使用阿里雲的ssl證書,3個月到期的那種。
(2)Unable to Onboard
應用無法上架,可能原因為郵箱不對,用了之前消費者賬號(即自己的車輛賬號),建議換別的郵箱試試。
(3) Rejected
這一步嘗試了很多次,具體原因為國內還無法正常使用tesla api,只能切換至美國伺服器申請下(截止2023-11-15),後續留意官網通知。
1.3 訪問應用程式憑據
一旦獲得批准,將為您的應用程式生成可在登入後訪問的客戶端 ID 和客戶端金鑰。使用這些憑據,透過 OAuth 2.0 身份驗證獲取使用者訪問令牌。訪問令牌可用於對提供私人使用者賬戶資訊或代表其他賬戶執行操作的請求進行身份驗證。
申請好就可以在自己的賬號下看到自己的應用了,
1.4 開始 API 整合
按照 API 文件和設定說明將您的應用程式與 Tesla 車隊 API 整合。您需要生成並註冊公鑰,請求使用者授權並按照規格要求撥打電話。完成後您將能夠與 API 進行互動,並開始圍繞 Tesla 裝置構建整合。
二、開發之前的準備
由於特斯拉剛推出,並且國內進展緩慢,很多都申請不下來,下面內容均以北美區域進行呼叫。
2.1 認識token
app與特斯拉互動的共有兩個令牌(token)方式,在呼叫api的時候,特別需要注意使用的是哪種token,下面是兩種token的說明:
(1)合作伙伴身份驗證令牌:這個就是你申請的app的令牌
(2)客戶生成第三方令牌:這個是消費者在你這個app下授權之後的令牌。
此外,還需要注意下,中國大陸地區對應的api地址是 https://fleet-api.prd.cn.vn.cloud.tesla.cn,不要調到別的地址去了。
2.2 獲取第三方應用token
這一步官網列的很詳細,就不在詳述了。
CLIENT_ID=<command to obtain a client_id>
CLIENT_SECRET=<secure command to obtain a client_secret>
AUDIENCE="https://fleet-api.prd.na.vn.cloud.tesla.com"
# Partner authentication token request
curl --request POST \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'grant_type=client_credentials' \
--data-urlencode "client_id=$CLIENT_ID" \
--data-urlencode "client_secret=$CLIENT_SECRET" \
--data-urlencode 'scope=openid vehicle_device_data vehicle_cmds vehicle_charging_cmds' \
--data-urlencode "audience=$AUDIENCE" \
'https://auth.tesla.com/oauth2/v3/token'
2.3 驗證域名歸屬
2.1.1 Register
完成註冊合作方賬號之後才可以訪問API. 每個developer.tesla.cn上的應用程式都必須完成此步驟。官網掛了一個github的程式碼,看了半天,以為要搞很多東西,實際上只需要幾步就可以了。
cd vehicle-command/cmd/tesla-keygen
go build .
./tesla-keygen -f -keyring-debug -key-file=private create > public_key.pem
這裡只是生成了公鑰,需要把公鑰掛載到域名之下,我們用的是nginx,所以只要指向pem檔案就可以了,注意下nginx是否可以訪問到改檔案,如果不行,把nginx的user改為root。
location ~ ^/.well-known {
default_type text/html;
alias /root/vehicle-command/cmd/tesla-keygen/public_key.pem;
}
隨後,便是向tesla註冊你的域名,域名必須和你申請的時候填的一樣。
curl --header 'Content-Type: application/json' \
--header "Authorization: Bearer $TESLA_API_TOKEN" \
--data '{"domain":"string"}' \
'https://fleet-api.prd.na.vn.cloud.tesla.com/api/1/partner_accounts'
2.1.2 public_key
最後,驗證一下是否真的註冊成功(GET /api/1/partner_accounts/public_key)
curl --header 'Content-Type: application/json' \
--header "Authorization: Bearer $TESLA_API_TOKEN" \
'https://fleet-api.prd.na.vn.cloud.tesla.com/api/1/partner_accounts/public_key'
得到下面內容就代表成功了
{"response":{"public_key":"xxxx"}}
至此,我們的開發準備就完成了,接下來就是正常的開發與使用者互動的api。