文档章节

google支付接口被刷以及解决方案 google支付查单

李星
 李星
发布于 2015/04/10 19:09
字数 1353
阅读 10906
收藏 11

google支付接口被刷以及解决方案

google支付回调验证

Google支付问题

         20150218,挂机的日本服务器出现google支付被刷单现象,虽然目前进行的修补,但是这个问题并没有完全从根源上解决。并且公司以前的GooglePlay支付也有不完善的地方,在SDK端给支付回调发送支付信息后,支付回调程序没有调用Google API进行订单验证。因此Google支付流程需要进行完善。

 

Google支付解决方案

         上面的支付问题,Google有自己的解决方案,就是根据订单号去向Google API发送验证申请,Google API会返回订单相关信息。可以根据这个信息和SDK返回的信息进行对比验证。

         对于申请Google账号之类的流程,相信运营已经很清楚了,但是使用Google API还需要使用Google Developer Console创建Web Application账户,而后获取到client_idclient_secretrefresh_token。具体流程见下面:

 

1.       登陆 Google Developer Console ,地址:https://code.google.com/apis/console/

2.       APIs & auth 项中找到 Credentials ,点击创建一个auth2.0 web 应用


其中4的地址一定是 可用域名 + /oauth2callback

创建完后,可以获得,client_id, client_secret, redirect_url

3.       获取Authorization code

google中心在登陆状态,打开新页面输入如下地址:

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

将蓝色部分根据相应的值进行替换;

这时会提示你是否要授权,点击授权,url地址栏会自动跳转,之后会获得code例如:https://www.example.com/oauth2callback?code=4/CpVOd8CljO_gxTRE1M5jtwEFwf8gRD44vrmKNDi4GSS.kr-GHuseD-oZEnp6UADFXm0E0MD3FlAI

 

4.       利用code获取refresh_token 这里需要post请求

请求地址:https://accounts.google.com/o/oauth2/token

请求参数:code, client_id, client_secret, redirect_uri, grant_type

其中 grant_type 值为 authorization_code

第一次发起请求得到的JSON字符串如下所示,以后再请求将不再出现refresh_token(长令牌,一般不会失效),需要保存好refresh_token,可以存放到配置文件(或者写到数据库),以备后用

expires_in是指access_token的时效,为3600

{

    "access_token": "ya29.3gC2jw5vm77YPkylq0H5sPJeJJDHX93Kq8qZHRJaMlknwJ85595eMogL300XKDOEI7zIsdeFEPY6zg",

    "token_type": "Bearer",

    "expires_in": 3600,

    "refresh_token": "1/FbQD448CdDPfDEDpCy4gj_m3WDr_M0U5WupquXL_o"

}

 

在获取到client_idclient_secretrefresh_token后,我们的支付回调程序就可以使用订单号去请求Google Api进行验证。

 

Google支付回调验证流程

         通过上一步获取到client_idclient_secretrefresh_token之后,支付回调程序就可以调用google api进行支付验证。具体流程如下:

1.       获取access_token

请求地址:https://accounts.google.com/o/oauth2/token
请求方式:post
请求参数:client_id, client_secret, refresh_toke, grant_type
grant_type 值固定为 refresh_token
返回:json

 

Using the refresh token

Each access token is only valid for a short time. Once the current access token expires, the server will need to use the refresh token to get a new one. To do this, send a POST request to https://accounts.google.com/o/oauth2/token with the following fields set:

grant_type=refresh_token
client_id=<the client ID token created in the APIs Console>
client_secret=<the client secret corresponding to the client ID>
refresh_token=<the refresh token from the previous step>

A successful response will contain another access token:

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

The refresh token thus allows a web server continual access to the API without requiring an active login to a Google account.


2.       通过获得access_token 就可以请求谷歌的 API 接口,获得订单状态

在这里我所需要获取的是我在应用内给GooglePlay支付的购买信息,此类信息包含以下几个属性:(可参考Google Play Developer API下的Purchases.products

        A ProductPurchase resource indicates the status of a user's inapp product purchase.

请求接口:https://www.googleapis.com/androidpublisher/v2/applications/packageName/purchases/products/productId/tokens/purchaseToken?access_token=access_token




packageName
The package name of the application the inapp product was sold in (for example, 'com.some.thing').

productId

           

The inapp product SKU (for example, 'com.some.thing.inapp1').

purchaseToken
The token provided to the user's device when the inapp product was purchased. 就是订单中purchaseToken










返回数据

{
  "kind": "androidpublisher#productPurchase",
  "purchaseTimeMillis": long,
  "purchaseState": integer,
  "consumptionState": integer,
  "developerPayload": string
}


consumptionState integer The consumption state of the inapp product. Possible values are:
  1.   0:Yet to be consumed
  2.   1:Consumed

developerPayload string A developer-specified string that contains supplemental information about an order.
kind string This kind represents an inappPurchase object in the androidpublisher service.
purchaseState integer The purchase state of the order. Possible values are:
  1.   0:Purchased
  2.   1:Cancelled 我们就是依靠这个判断购买信息

purchaseTimeMillis long The time the product was purchased, in milliseconds since the epoch (Jan 1, 1970).


 

 

到此支付验证完成!

 

参考文档:

http://blog.csdn.net/hjun01/article/details/42032841

 http://www.vimer.cn/2014/04/google%E6%94%AF%E4%BB%98%E6%8E%A5%E5%8F%A3%E8%A2%AB%E5%88%B7%E4%BB%A5%E5%8F%8A%E8%A7%A3%E5%86%B3%E6%96%B9%E6%A1%88.html

 

调用接口遇到的几个问题:

 


1. Access Not Configured.

{

 "error": {

  "errors": [

   {

    "domain": "usageLimits",

    "reason": "accessNotConfigured",

    "message": "Access Not Configured. The API(Google Play Android Developer API)is not enabled for you project.Please use Google Developers Console to update your configuration."

   }

  ],

  "code": 403,

  "message": "Access Not Configured. The API(Google Play Android Developer API)is not enabled for you project.Please use Google Developers Console to update your configuration."

 }

}


在这个页面: https://console.developers.google.com  

Google Developer Console

1.  "Google Developer Console" > "APIs & Auth" subcategory "APIs" > (api list) "Google Play Android Developer API". Set "STATUS" to "ON".

2.  "APIs & auth" subcategory "Credentials" > "Create new Client ID". Choose "Service account" and create the id.

3.  You should get a P12 key from the browser.

 

 

 

 

 

问题2: projectNotLinked

{
    "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."
    }
}

 


在这个页设置关联:https://play.google.com/apps/publish/

Google Play Developer Console

1.  "Google Play Developer Console" > "Settings" > subcategory "API access".

2.  Make a link to your "Linked Project".

3.  "Service Account" place maybe already showing ur "Service account" CLIENT ID which made "google developer console".

 

 





© 著作权归作者所有

李星

李星

粉丝 15
博文 20
码字总数 9685
作品 0
长宁
程序员
私信 提问
加载中

评论(1)

夏曦煜
夏曦煜
你好,现在我的项目也在头疼这个问题,想服务器直接通过google api去验证账单,但是发起oauth第一步开始,就会跳出网页要点击确定,这一步在服务器上不好做,非要人为去点一下,请问这一步能不能让服务器自己去实现,望交流,感谢!QQ148423658
Google 发布移动支付服务 绑定诸多信用卡

谷歌正式发布移动支付服务Google Wallet 现场图 新浪科技讯 北京时间9月20日凌晨消息,据美国科技博客TechCrunch报道,谷歌今天正式推出了移动支付服务谷歌钱包(Google Wallet),用户可通过N...

小编辑
2011/09/20
984
4
分布式事务数据库发展及特点

分布式数据库发展背景 “双十一”指数型的成交总额发展曲线,让世界看到了中国电商业务的火箭式发展势头。 而同时,对于背后的业务支撑系统来说,他们同样经历了火箭式的系统压力增长。 “双...

外陈内罗
2017/12/18
0
0
我看今日中国互联网世界

大家说的最多的三家互联网就数阿里巴巴、百度、腾讯。我们就来先说说。最近阿里巴巴在美国上市,市值飙升到二千多亿美元。但是我认为阿里和美国的互联网巨头比还是差距很远。与google对比goo...

lesou
2014/09/23
662
7
最强后门刷榜病毒,“隐流者”家族盯上90%的国内应用市场

  近期,依托腾讯安全大数据,腾讯安全反诈骗实验室自研的TRP-AI反病毒智能引擎捕获到某色情病毒家族存在流量异常行为,腾讯安全研究人员研究发现,该色情病毒家族集成了一个名为 “隐流者”...

FreeBuf
2018/05/21
0
0
OGEngine举办手游开发、发行交流会议

由OGEngine举办的第二次手游开发者交流会议以圆桌会议方式在深圳高新园举行。会议不仅吸引了手游开发者,也有海外支付商,国内外的手游发行商参加。 会议环绕三大主题展开讨论和交流。主题分...

橙游OrangeGame
2014/11/03
2
0

没有更多内容

加载失败,请刷新页面

加载更多

日期时间命令date

命令date 用途:打印或设置系统日期和时间 语法:date [选项]... [+格式] 选项: -s, --set=STRING 根据 STRING 设置时间 -u, --utc, --universal 显示或设置全球时...

迷失De挣扎
36分钟前
0
0
小白讲网络安全系列

注入攻击防护 XSS注入 SQL注入 命令注入 文件上传 文件解压缩 CSRF防护 对称加密 非对称加密 数字证书 数字签名 完整性校验 消息验证码 单向散列Hash函数 口令单向加密算法 审计日志 认证鉴权...

一刀
今天
2
0
MYSQL 嵌套事务(SAVEPOINT) 与Spring 事务传播

摘要 savepoint 关键字可以实现嵌套事务。结合savepoint关键字,更方便理解spring的事务传播。 事务嵌套 初始化表脚本 drop table t;create table t(a int, primary key(a)); 开启事务 my...

liangxiao
今天
3
0
Chrome OS 更新新版本可让Linux访问USB连接的Android设备

谷歌再次为Chrome OS带来了重大版本更新,使版本号达到了75。本次更新的一大亮点就是允许在Chrome OS上运行的Linux能够识别通过USB方式连接的Android设备,能够让用户使用Linux进行调试等等。...

linuxCool
昨天
15
0
聊聊feign的HystrixInvocationHandler

序 本文主要研究一下feign的HystrixInvocationHandler HystrixInvocationHandler feign-hystrix-10.2.3-sources.jar!/feign/hystrix/HystrixInvocationHandler.java final class HystrixInvo......

go4it
昨天
17
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部