【google play接入】支付服务端token获取

  • Post author:
  • Post category:其他


前提:

1.必须有那啥。

2.客户端必须在AndroidMainfest文件添加BILLING权限,格式如下:

<uses-permission android:name="com.android.vending.BILLING" />

流程:

1.在

https://console.cloud.google.com/home/dashboard

打开已有项目。

2.选择API和服务,点击 启用API和服务

3.搜索框输入Google Play Android Developer API    ,然后启用服务。

4.开启Auth同意同屏

4.创建web客户端凭据。

点击进去,就能看到客户端ID和客户端秘钥

5.到google play控制后台关联此项目(之前关联过的,可以跳过此步。)

至此基本设置流程已经走完,接下来就是获取code然后换取refresh code的流程。

6.获取code

在浏览器里输入如下url:

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}

大概是这个样子的:

https://accounts.google.com/o/oauth2/auth?scope=https://www.googleapis.com/auth/androidpublisher&response_type=code&access_type=offline&redirect_uri=https://developers.google.com&client_id=111223337-bbbbumlsimo.apps.googleusercontent.com

注意将参数client_id替换你自己的客户端ID.

跳转之后就按照提示选择你的登录邮箱登录,进入之后,url里就替换成了code和scope,大概这个样子的。

https://developers.google.com/?code=4%FSOFAGDB323_4324l_777777&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fandroidpublisher

我们要用的的是code参数,将此参数进行urldecode

7.换取refresh code

使用postman或者curl,或者你熟悉的http工具,创建http请求,postman的请求大致如下:

地址:

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项目时的重定向地址

至此就可以换取到refresh token 这个要自己保存起来,用来定时更新access_token.refresh token基本是不变的,除非你重新再走一遍上面的流程,刷新了refresh token。

如果此处返回

{
    "error": "invalid_grant",
    "error_description": "Bad Request"
}

应该是你上一步获取的code过期了,重新执行一下第6步,获取新的code替换下就好。

8.代码逻辑定时刷新acces token。

返回的access token有效期是1个小时,所以要定时刷新,请求刷新的逻辑大致是这个样子的:

地址:

https://accounts.google.com/o/oauth2/token


请求方式:post

参数:

grant_type=refresh_token

refresh_token=刚刚获取到的refreshToken

client_id=创建api项目是的clientId(客户端ID)

client_secret=创建api项目时的clientSecret(客户端密钥)

LUA代码:

local httpc = http.new()
local params = "grant_type=refresh_token&refresh_token="..refresh_token.."&client_id="..client_id.."&client_secret="..client_secret
local function req_token()
return httpc:request_uri("https://accounts.google.com/o/oauth2/token", {
            method = "POST",
            body = params,
            headers = {
              ["Content-Type"] = "application/x-www-form-urlencoded; charset=UTF-8",
            }
        })
    end
local ret, err = req_token()

-- refresh_token 上一步已获取保存的 refresh_token
-- client_id 同上一步使用的
-- client_secret OAuth凭据里的。



版权声明:本文为sirria1原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。