???? 整個開發(fā)背景是前端在調(diào)用完google play支付流程后官套,需要后臺驗證支付結(jié)果以及在自己的服務(wù)生成訂單相關(guān)信息。由此著手對google后臺驗證的調(diào)研惋嚎,首先官方流程:
https://developers.google.com/android-publisher/authorization
下面我將已網(wǎng)上原有貼復(fù)制+自己手動截圖的形式詳細(xì)描述下整個操作流程:
實現(xiàn)步驟
1.管理者用項目最高權(quán)限的GP賬號登錄站刑,訪問https://accounts.google.com/o/oauth2/auth?scope=https://www.googleapis.com/auth/androidpublisher&response_type=code&access_type=offline&redirect_uri=https://www.example.com/oauth2callback&client_id=123456789? 獲得code绞旅,保存此code(4/SIIu58MuX3Ixuea-FJPo3rgg3x5LIDyadb8MzztPV7c#)
2.迅速訪問,請注意是在步驟1后迅速訪問堕汞。POST請求晃琳,https://accounts.google.com/o/oauth2/token?grant_type=authorization_code&code=4/SIIu58MuX3Ixuea-FJPo3rgg3x5LIDyadb8MzztPV7c#&client_id=123456789&client_secret=123456789&redirect_uri=https://www.example.com/oauth2callback。獲得返回的refresh_token人灼,妥善保存此token。以后的請求中都不會再出現(xiàn)奈泪,對于當(dāng)前創(chuàng)建的賬號的唯一且永久有效的
3.攜帶refresh_token可獲取access_token跪呈,POST請求訪問https://accounts.google.com/o/oauth2/token,參數(shù)grant_type=refresh_token為固定值苹支,client_id误阻,client_secret,refresh_token
PS:值得注意的是寻定,2與3的POST請求在摸索初期我都用postman去模擬狼速,參數(shù)不是一個JSON,是已表單的形式傳參的向胡,這點在后續(xù)也會截圖表述惊完。
4.驗證:Get請求小槐,請求接口:https://www.googleapis.com/androidpublisher/v2/applications/packageName/purchases/products/productId/tokens/purchaseToken?access_token=access_token
操作截圖
在Google APIs選擇Credentials,Create New Project件豌,點擊創(chuàng)建一個auth2.0的web應(yīng)用
https://console.developers.google.com/apis/dashboard
我用的是Java后臺的http驗證茧彤,創(chuàng)建了Web application躬审,紅框處完全可以填示例的url承边,至少單在驗證支付狀態(tài)的需求里這個redirect_uri是沒有用到的
Anyway,請求需要的clien_id client_secret,redirect_uri都已經(jīng)創(chuàng)建好了。操作步驟1险污,得到下圖富岳,保存code
同時窖式,此時要開啟一個google應(yīng)用,才能在后臺執(zhí)行查詢的api淮逻。
拿到code后爬早,執(zhí)行步驟2启妹,我用的是Postman筛严。Post請求,請求頭Content-Type =?application/x-www-form-urlencoded
拿到refresh_token后饶米,就可以執(zhí)行步驟3桨啃,請求獲得access_token,步驟3.4很流暢 不截圖了咙崎。
以上是整個請求流程的Postman訪問优幸。
正常情況下,按此流程操作請求到步驟4后褪猛,并不能得到想要的結(jié)果网杆。會報一系列的錯誤code,下面來講述這些錯誤的解決伊滋。
先推一個鏈接碳却,尾部有兩個錯誤的解決http://blog.csdn.net/lemonzone2010/article/details/44983659。創(chuàng)建Link的截圖因為我沒有主權(quán)限賬號笑旺,所以沒有截圖昼浦。
這里寫一下自己遇到的401code 筒主,報錯message如下:
????? The current user has insufficient permissions to perform the requested operation
困惑我的是整個google console 配置的是全局的Link? 使兔。在測試的客戶端項目跑通整個流程后虐沥,新建的正式項目用同樣的代碼去測試就報了沒有權(quán)限的code镐依。反復(fù)查詢無果槐壳,包裹google上搜索的設(shè)置一個XXXemail等等的操作都無濟(jì)于事宏粤,萬念俱灰之際绍哎,重新創(chuàng)建一個Web application,Link配置后海诲。401code沒了
{
? ? "kind": "androidpublisher#productPurchase",
? ? "purchaseTimeMillis": "1516155154486",
? ? "purchaseState": 0,
? ? "consumptionState": 1,
? ? "developerPayload": "",
? ? "orderId": "GPA.3322-0256-8697-13965",
?? "purchaseType": 0
}
成功。