google支付后台验证操作流程

     整个开发背景是前端在调用完google play支付流程后,需要后台验证支付结果以及在自己的服务生成订单相关信息。由此着手对google后台验证的调研,首先官方流程:

https://developers.google.com/android-publisher/authorization

下面我将已网上原有贴复制+自己手动截图的形式详细描述下整个操作流程:

实现步骤

1.管理者用项目最高权限的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。以后的请求中都不会再出现,对于当前创建的账号的唯一且永久有效的

3.携带refresh_token可获取access_token,POST请求访问https://accounts.google.com/o/oauth2/token,参数grant_type=refresh_token为固定值,client_id,client_secret,refresh_token

PS:值得注意的是,2与3的POST请求在摸索初期我都用postman去模拟,参数不是一个JSON,是已表单的形式传参的,这点在后续也会截图表述。

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,点击创建一个auth2.0的web应用

https://console.developers.google.com/apis/dashboard

我用的是Java后台的http验证,创建了Web application,红框处完全可以填示例的url,至少单在验证支付状态的需求里这个redirect_uri是没有用到的


Anyway,请求需要的clien_id client_secret,redirect_uri都已经创建好了。操作步骤1,得到下图,保存code


同时,此时要开启一个google应用,才能在后台执行查询的api。



拿到code后,执行步骤2,我用的是Postman。Post请求,请求头Content-Type = application/x-www-form-urlencoded


第一次请求会获得refresh_token,妥善保存

拿到refresh_token后,就可以执行步骤3,请求获得access_token,步骤3.4很流畅 不截图了。

以上是整个请求流程的Postman访问。


正常情况下,按此流程操作请求到步骤4后,并不能得到想要的结果。会报一系列的错误code,下面来讲述这些错误的解决。

先推一个链接,尾部有两个错误的解决http://blog.csdn.net/lemonzone2010/article/details/44983659。创建Link的截图因为我没有主权限账号,所以没有截图。

这里写一下自己遇到的401code ,报错message如下:

      The current user has insufficient permissions to perform the requested operation

困惑我的是整个google console 配置的是全局的Link  。在测试的客户端项目跑通整个流程后,新建的正式项目用同样的代码去测试就报了没有权限的code。反复查询无果,包裹google上搜索的设置一个XXXemail等等的操作都无济于事,万念俱灰之际,重新创建一个Web application,Link配置后。401code没了

{

    "kind": "androidpublisher#productPurchase",

    "purchaseTimeMillis": "1516155154486",

    "purchaseState": 0,

    "consumptionState": 1,

    "developerPayload": "",

    "orderId": "GPA.3322-0256-8697-13965",

   "purchaseType": 0

}

成功。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • afinalAfinal是一个android的ioc,orm框架 https://github.com/yangf...
    passiontim阅读 15,647评论 2 45
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,288评论 19 139
  • 1. 引言 如果你开车去酒店赴宴,你经常会苦于找不到停车位而耽误很多时间。是否有好办法可以避免这个问题呢?有的,听...
    上山砍柴阅读 626评论 0 0
  • 不是雄鹰 但是我要高飞 即使跌跌撞撞 我也无惧凶险 我坚信 我的思想会在蔚蓝的天空中 自由翱翔 不是小草 但是我要...
    我心依然_580a阅读 453评论 44 28
  • 囚笼里的,锁不住 淡紫色的眼,肉红色的 舌 待你学会了握手和趴下 哗啦啦的喷泉声中,你就能 寻到你所渴望的水,鱼儿...
    一丘孤行阅读 171评论 0 0