創建OAuth 2.0
1.創建api項目這個和登錄用的項目不是同一個
2.開啟Google Play Android Developer API
3.設置oauth同意屏幕(就是拉起開發者授權賬號登錄時的登錄頁面)
4.創建web應用的oauth客戶端ID
5.google play開發者后台,API權限菜單中關聯剛剛創建的項目,一個google play賬號只需要也只能關聯一個api項目就行了,這個項目可以查詢關聯賬號中的所有應用的訂單
6.拉起授權頁面,使用google開發者賬號給項目授權,得到code
7.通過code,拿到refreshToken,這個token只有第一次才會返回需要永久儲存(這個refreshtoken很重要,需要保存下來),如果弄丟,只有重新創建一個oauth客戶端ID,然后重復步驟6,7,拿到新的refreshtoken
8.刷新refreshToken, 得到accessToken,通過accesstoken就可以去查詢訂單狀態了,這里的accessToken一般只有5分鍾左右,5分鍾后需要重新用refreshToken換取新的accessToken
下面咋們上操作截圖
setp1
創建api項目google api console
setp2
開啟Google Play Android Developer API
搜索“Google Play Android Developer API”
setp3
開啟同意屏幕
這里填上必填項就行了,這個授權同意屏幕,請求code時拉起來給咋們開發人員開的,填啥都無所謂
setp4
創建oauth2客戶端id
創建頁面和創建成功后的修改頁面可以獲取到clientId和clientSecret
到這里api項目就已經創建好了
setp5
google play后台關聯api項目
獲取code
地址: https://accounts.google.com/o/oauth2/auth?scope=https://www.googleapis.com/auth/androidpublisher&response_type=code&access_type=offline&redirect_uri={填寫的重定向地址}&client_id={創建的clientId}
將上面的{XX}替換成創建api項目時填寫的重定向地址,和clientId,然后將連接放到瀏覽器中打開,就會吊起授權界面,使用你的開發者賬號授權登錄
請求方式:瀏覽器中打開

獲得code
返回頁面的地址:
這里可以看到,重定向地址上有兩個參數code和scope,我們只需要code就行了,這里的code是urlencode后的,使用時需要decode
使用code換取refreshToken
地址: https://accounts.google.com/o/oauth2/token
請求方式:post
參數:grant_type=authorization_code
code=獲取到的code(需要看看code中是否有%號,如果有需要urldecode)
client_id=創建api項目是的clientId(客戶端ID)
client_secret=創建api項目時的clientSecret(客戶端密鑰)
redirect_uri=創建api項目時的重定向地址

使用refreshToken獲取accessToken
地址: https://accounts.google.com/o/oauth2/token
請求方式:post
參數:grant_type=refresh_token
refresh_token=剛剛獲取到的refreshToken
client_id=創建api項目是的clientId(客戶端ID)
client_secret=創建api項目時的clientSecret(客戶端密鑰)

查詢訂單狀態
https://androidpublisher.googleapis.com/androidpublisher/v3/applications/{packageName}/purchases/products/{productId}/tokens/{token}?access_token={access_token}
packageName:app包名,必須是創建登錄api項目時,創建android客戶端Id使用包名
productId:對應購買商品的商品ID
token:購買成功后Purchase對象的getPurchaseToken()
access_token:上面咋們獲取到的accessToken
請求方式:get
返回值:

到這里整個支付驗證流程就已經走完了,這里總結哈筆者這次試用過程中走過的一些坑:
- google應用必須要在封閉測試狀態下,並審核通過的應用才能支付,文檔說的是內部測試就可以了,筆者每次都弄到封閉測試狀態下才可以支付。
- 在firebase中創建了項目,會自動同步到google api后台,不用再去單獨創建登錄使用的項目
- 登錄使用的api項目和查詢支付使用的api項目是兩個不同的項目相互不干擾,查詢支付的api項目一個google play賬號對應一個項目,這個google play賬號中所有的應用,都可以通過這個查詢支付的api項目去查詢
- 獲取code授權api項目時,要使用google play后台的開發者賬號授權
- 獲取code授權api項目時,如果出現redirect_uri_mismatch錯誤,則返回Google Cloud Platform中的API和服務,進入OAuth consert screen,把發布狀態改成生產中

關於RefreshToken過期問題
- api項目-同意屏幕,發布狀態為測試(有效期7天)
- RefreshToken 6個月都未使用,這個要維護accessToken的有效性,應該可以不必考慮
- 授權賬號改密碼了(筆者未測試,修改開發者賬號密碼是否會導致過期)
- 授權超過50個刷新令牌,最先的刷新令牌就會失效(這里50個應該夠用了,除了測試時,可能會授權多個)
- 取消了授權
- 屬於具有有效會話控制策略的 Google Cloud Platform 組織