谷歌支付

谷歌支付驗證

后端對谷歌支付進行驗證的時候遇到些問題润樱,為了方便以后查閱袋马,記錄整個過程

1 說明

  • 本文講述后端使用谷歌api驗證支付的過程
  • 流程: 前端支付完畢之后會獲取token痊土,將token發(fā)送至后端,后端將此token發(fā)向google進行查詢,如果是正常有效的token已球,谷歌會返回對應訂單的詳細信息,驗證通過后再通知前端進行消費(也可以前端先消費再通知后端驗證發(fā)貨)

2 前期準備

2-1 創(chuàng)建 api 項目

  • 填寫項目名稱后,項目就創(chuàng)建完成了

  • 創(chuàng)建完成之后智亮,需要啟用所需要的api服務忆某,點擊啟用API和服務

  • 搜索Google Play Android Developer API,我們將使用這個 API 服務來查詢訂單阔蛉,點擊啟用它

  • 點擊創(chuàng)建憑據

  • 實際上是跳轉到test-api這個項目的憑據創(chuàng)建了弃舒,點擊信息中心,可以看到API列表中出現(xiàn)了Google Play Android Developer API状原,還有請求次數聋呢,錯誤,錯誤率等信息

2-2 創(chuàng)建 OAuth 客戶端 ID

  • 接下來準備創(chuàng)建OAuth客戶端ID颠区,點擊憑據

  • 先填寫OAuth同意屏幕削锰,應用名稱那一行可以隨便填寫,反正是給自己看的毕莱,填完應用名稱之后器贩,還需要填已授權的網域,然后點擊最下方的保存按鈕

  • 已授權的網域最好填寫要發(fā)起請求的后臺所用的域名朋截,假設我的后臺為sdk.keylala.cn磨澡,則此處填寫keylala.cn

  • 準備創(chuàng)建OAuth客戶端ID

  • 填寫的內容 _ 應用類型選擇: 網頁應用 _ 名稱:隨意填寫了 _ 已獲授權的 JavaScript 來源: https://keylala.cn _ 已獲授權的重定向 URI: https://keylala.cn,這個隨便质和,比如寫成https://keylala.cn/callback稳摄,不一定需要這個接口真實存在的,但一定要記著這個URI饲宿,后文中我們稱之為redirectURI

  • 點擊創(chuàng)建按鈕厦酬,獲得客戶端 ID 和客戶端密鑰,下文中分別稱為clientIdclientSecret

2-3 獲取 code

  • 請將下方url中的redirect_uriclient_id填寫上2-2中獲取的參數

https://accounts.google.com/o/oauth2/auth?scope=https://www.googleapis.com/auth/androidpublisher&response_type=code&access_type=offline&redirect_uri=...&client_id=...

  • 放到瀏覽器上(此時不要關閉之前的頁面, 此瀏覽器需要登錄谷歌開發(fā)者賬號瘫想,且不能點退出)仗阅,另起一個頁面標簽,復制上去国夜,點擊允許
  • 這時候會跳轉到redirect_uri開頭的地址减噪,如果redirect_uri是胡亂填的,這里會出現(xiàn)一個404頁面或者無法訪問的提示车吹,不過沒關系筹裕,請將地址欄中的地址復制下來,把code=4/xxxxx的值取出來窄驹,這里就獲得了code的值朝卒。
  • code的值類似這樣的一長串: 4/eWdxD7b-YSQ5CNNb-c2iI83KQx19.wp6198ti5Zc7dJ3UXOl0T3aRLxQmbwI

2-4 獲取 refresh_token

  • 發(fā)送POST請求到https://accounts.google.com/o/oauth2/token

  • 參數:

    • grant_type=authorization_code
    • code={2-3 獲得的 code 值}
    • client_id={2-2 獲得的 clientId}
    • client_secret={2-2 獲得的 clientSecret}
    • redirect_uri={2-2 填寫的 redirectURI}
  • 這里使用Postman工具發(fā)送請求

  • 這樣就獲取了refresh_token,下文中稱refreshToken乐埠,這個token是一個長久有效的token抗斤,可以保存起來

3 項目關聯(lián)

  • 2中我們創(chuàng)建了一個API服務囚企,名為: test-api,以及獲取了這個api的一系列參數

  • 我們可以創(chuàng)建很多個 api瑞眼,給不同 api 啟用不同的谷歌 api

  • 這里我們要將我們的游戲應用與我們所需要的API服務關聯(lián)起來

  • 登錄Google Play Console, 鏈接: https://play.google.com/apps/publish龙宏,登錄之后點擊設置按鈕

  • 點擊API權限之后,能在右側發(fā)現(xiàn)我們前面創(chuàng)建的test-api這個項目伤疙,點擊關聯(lián)烦衣,這樣我們就可以用test-api中谷歌提供的接口Google Play Android Developer API來查詢這個賬號下所有應用的訂單信息了

4 參數保存

  • 要驗證訂單我們需要以下參數,這些參數可以保存在后臺中
    • clientId: OAuth 客戶端 ID
    • clientSecret: OAuth 客戶端密鑰
    • redirectURI: 自己填寫的重定向地址
    • code
    • refreshToken

5 驗證

5-1 獲取 access_token

  • 通過前面獲取的refreshToken來獲得access_token

  • 代碼中使用POST方式調用https://accounts.google.com/o/oauth2/token

  • 參數:

    • grant_type : refresh_token
    • client_id
    • client_secret
    • refresh_token
  • 返回值:

    {
        "access_token" : "ya29.AHES3ZQ_MbZCwac9TBWIbjW5ixxxxxxxxx2",
        "token_type" : "Bearer",
        "expires_in" : 3600,
    }
    
    

5-2 查詢訂單信息

  • 使用GET方法調用以下接口: https://www.googleapis.com/androidpublisher/v3/applications/packageName/purchases/products/productId/tokens/token?access_token=access_token

  • packageName: 該應用的包名, 比如com.test.xxx

  • productId: 商品 ID厨姚,即內購 ID

  • token: 充值的時候衅澈,前端獲取的token

  • access_token: 在5-1中獲取的

  • 如果訂單是有效的,會返回如下內容:

    {
        "kind": "androidpublisher#productPurchase",
        "purchaseTimeMillis": "1539054135375",  // 支付時間, 毫秒
        "purchaseState": 0, // 是否付費: 0 已支付, 1 取消
        "consumptionState": 0, // 是否被消費: 0 未消費, 1 已消費
        "developerPayload": "xxxxx", // 開發(fā)者透傳參數
        "orderId": "GPA.3337-xxxx-xxxx-xxxx", // 谷歌訂單號
        "purchaseType": 0 // 支付類型:  0 測試, 1 真實
    }
    
    
  • 如果訂單是無效的谬墙,會返回以下內容:

    {
        "error": {
         "errors": [
          {
           "domain": "global",
           "reason": "invalid",
           "message": "Invalid Value"
          }
         ],
         "code": 400,
         "message": "Invalid Value"
        }
    }
    
    

5-3 403 錯誤

  • 在測試過程中今布,遇到了403錯誤,報錯如下

    {
        "error": {
            "errors": [{
                "domain": "androidpublisher",
                "reason": "projectNotLinked",
                "message": "The project id used to call the Google Play Developer API has not been linked in the Google Play Developer Console."
            }],
            "code": 403,
            "message": "The project id used to call the Google Play Developer API has not been linked in the Google Play Developer Console."
        }
    }
    
    
  • 產生的原因 1:項目沒有關聯(lián)拭抬,或者關聯(lián)到錯誤的API項目上了部默,請看3 項目關聯(lián)

  • 產生的原因 2:谷歌服務的 BUG,這時候只要在該應用的商店內造虎,隨意增加一個內購或者訂閱傅蹂,再看看是不是這個問題就消失了。新增的內購或者訂閱可以刪除的算凿。

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末份蝴,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子氓轰,更是在濱河造成了極大的恐慌婚夫,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,548評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件署鸡,死亡現(xiàn)場離奇詭異案糙,居然都是意外死亡,警方通過查閱死者的電腦和手機靴庆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,497評論 3 399
  • 文/潘曉璐 我一進店門时捌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人撒穷,你說我怎么就攤上這事匣椰●晌酰” “怎么了端礼?”我有些...
    開封第一講書人閱讀 167,990評論 0 360
  • 文/不壞的土叔 我叫張陵禽笑,是天一觀的道長。 經常有香客問我蛤奥,道長佳镜,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,618評論 1 296
  • 正文 為了忘掉前任凡桥,我火速辦了婚禮蟀伸,結果婚禮上,老公的妹妹穿的比我還像新娘缅刽。我一直安慰自己啊掏,他們只是感情好,可當我...
    茶點故事閱讀 68,618評論 6 397
  • 文/花漫 我一把揭開白布衰猛。 她就那樣靜靜地躺著迟蜜,像睡著了一般。 火紅的嫁衣襯著肌膚如雪啡省。 梳的紋絲不亂的頭發(fā)上娜睛,一...
    開封第一講書人閱讀 52,246評論 1 308
  • 那天,我揣著相機與錄音卦睹,去河邊找鬼畦戒。 笑死,一個胖子當著我的面吹牛结序,可吹牛的內容都是我干的障斋。 我是一名探鬼主播,決...
    沈念sama閱讀 40,819評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼徐鹤,長吁一口氣:“原來是場噩夢啊……” “哼配喳!你這毒婦竟也來了?” 一聲冷哼從身側響起凳干,我...
    開封第一講書人閱讀 39,725評論 0 276
  • 序言:老撾萬榮一對情侶失蹤晴裹,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后救赐,有當地人在樹林里發(fā)現(xiàn)了一具尸體涧团,經...
    沈念sama閱讀 46,268評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,356評論 3 340
  • 正文 我和宋清朗相戀三年经磅,在試婚紗的時候發(fā)現(xiàn)自己被綠了泌绣。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,488評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡预厌,死狀恐怖阿迈,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情轧叽,我是刑警寧澤苗沧,帶...
    沈念sama閱讀 36,181評論 5 350
  • 正文 年R本政府宣布刊棕,位于F島的核電站,受9級特大地震影響待逞,放射性物質發(fā)生泄漏甥角。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,862評論 3 333
  • 文/蒙蒙 一识樱、第九天 我趴在偏房一處隱蔽的房頂上張望嗤无。 院中可真熱鬧,春花似錦怜庸、人聲如沸当犯。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,331評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽灶壶。三九已至,卻和暖如春杈曲,著一層夾襖步出監(jiān)牢的瞬間驰凛,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,445評論 1 272
  • 我被黑心中介騙來泰國打工担扑, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留恰响,地道東北人。 一個月前我還...
    沈念sama閱讀 48,897評論 3 376
  • 正文 我出身青樓涌献,卻偏偏與公主長得像胚宦,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子燕垃,可洞房花燭夜當晚...
    茶點故事閱讀 45,500評論 2 359

推薦閱讀更多精彩內容