谷歌支付服务端详细讲解(PHP)
前不久公司拓展海外市场,要接入google支付。刚开始一头雾水,相关的文档实在太少。而且很多东西都需要翻墙,不过好在摸索几天后,总算调试通了。
前提:翻墙
1、注册账号google账号
https://accounts.google.com/SignUp
2、注册googleplay开发者账号
https://play.google.com/apps/publish/signup/
这一步骤需要Google账号和带有Visa或Master等标志的银行卡或者信用卡,资费25美元
3、新建auth2.0应用
登陆 Google Developer Console,地址:https://code.google.com/apis/console/ 在APIs & auth 项中找到 Credentials,点击创建一个auth2.0 的web应用。其中callback的地址一定是可用域名 + /oauth2callback
创建完后,可以获得,client_id, client_secret, redirect_uri
4、get请求获取code
参数:
scope=https://www.googleapis.com/auth/androidpublisher
response_type=code access_type=offline redirect_uri=上一步获取的 client_id=上一步获取的
浏览器访问:https://accounts.google.com/o/oauth2/auth?scope=https://www.googleapis.com/auth/androidpublisher&response_type=code&access_type=offline&redirect_uri=https://test1fffff.firebaseapp.com/oauth2callback/oauth2callback&client_id=816630003638-5p27m684jfpfa6sh6l9chbpreq2hg9ov.apps.googleusercontent.com
获得:https://test1fffff.firebaseapp.com/oauth2callback/oauth2callback?code=4/CpVOd8CljO_gxTRE1M5jtwEFwf8gRD44vrmKNDi4GSS.kr-GHuseD-oZEnp6UADFXm0E0MD3FlAI
该步骤获得code=4/CpVOd8CljO_gxTRE1M5jtwEFwf8gRD44vrmKNDi4GSS.kr-GHuseD-oZEnp6UADFXm0E0MD3FlAI
5、利用code 获取refresh_token (post请求)
地址: $refresh_token_url="https://accounts.google.com/o/oauth2/token";
请求参数:
$data_tmp1 = array(
'grant_type'=>'authorization_code',
'code'=>'',//上一步获取的
'client_id'=>'',//第三步获取
'client_secret'=>'',//第三步获取
'redirect_uri'=>'',//第三步获取
);
$http = new http($refresh_token_url,'POST',5);
$http->setContent($data_tmp1);
$results = $http->exec();
echo $results;
会得到这样一个东西:
{
"access_token" : "",
"token_type" : "Bearer",
"expires_in" : 3600,
"refresh_token" : ""
}
注意:这个refresh_token只会返回一次,后面不会在有,一定要好好保存。
这一步也需要翻墙的,如果在linux上可直接用
curl -d "grant_type=authorization_code&code=4/AA96BteP0IlQj4DW48_2Uw8nVCyAWXswO1FvLftI09q1aomYPaxEo5urHY_Ij9VxKDoNh8rs6cIS8&client_id=5781114-v6f89h1jdlfnsou0ic53m5tie.apps.gooleusercontent.com&client_secret=wKsknqxSxwLPEBvirF&redirect_uri=https://test1fffff.firebaseapp.com" "https://accounts.google.com/o/oauth2/token"
6、最后就可以开始写验证脚本了
public function JpGooglePay(){
$google_public_key = "你的公钥(google后台在你的应用下获取)";
$inapp_purchase_data = $_REQUEST['signtureTemp'];
$inapp_data_signature = $_REQUEST['signtureDataTemp'];
$key = "-----BEGIN PUBLIC KEY-----\n".chunk_split($google_public_key, 64,"\n").'-----END PUBLIC KEY-----';
$key = openssl_pkey_get_public($key);
$signature = base64_decode($inapp_data_signature);
$ok = openssl_verify($inapp_purchase_data,$signature,$key,OPENSSL_ALGO_SHA1);
if (1 == $ok) {
// 支付验证成功!
//进行二次验证,订单查询 // 1.获取access_token(3600秒有效期)
$access_token_url = "https://accounts.google.com/o/oauth2/token";
$data_tmp2 = array(
'grant_type'=>'refresh_token',
'refresh_token'=>'',//长效token
'client_id'=>'', //客户端id
'client_secret'=>'',//客户端密钥
);
$http = new http($access_token_url,'POST',5);
$http->setContent($data_tmp2);
$result = $http->exec();
$result = json_decode($contents,true);
$access_token = $result['access_token'];
//2.通过获得access_token 就可以请求谷歌的API接口,获得订单状态
$packageName=""//包名
$productId="" //产品Id
$purchaseToken=""
$url = "https://www.googleapis.com/androidpublisher/v2/applications/{$packageName}/purchases/products/{$productId}/tokens/{$purchaseToken}?access_token={$access_token}";
$http = new http($url,'GET',5);
$http->setContent($data);
$contents = $http->exec();
$contents = json_decode($contents,true);
if($contents['consumptionState'] == 0 && $contents['purchaseState'] == 0){
//验证成功 购买成功并且没有消耗 google支付中客户端如果没有进行消耗是不能再次购买该商品
//处理游戏逻辑 发钻石,通知客户端进行消耗
}else{
//订单验证失败
}
}else{
//签名验证失败 }
}
谷歌支付服务端详细讲解(PHP)的更多相关文章
- 支付宝app支付服务端流程
支付宝APP支付服务端详解 前面接了微信支付,相比微信支付,支付宝APP支付提供了支付封装类,下面将实现支付宝APP支付.订单查询.支付结果异步通知.APP支付申请参数说明,以及服务端返回APP端发起 ...
- ORACLE服务端详细安装步骤(配图解)
ORACLE服务端的安装及配置 l 将下载的安装包解压缩,双击[setup.exe]文件,系统检查监听参数,耐心等待,完成后出现如下界面,电子邮件可不填,"我希望..."建议不勾选 ...
- 支付宝(移动支付)服务端java版
所需支付宝jar包: sdk2-2.0.jar(点击下载) 工具类目录结构: 点击下载 商户信息已经公钥私钥的配置(公钥私钥的生成与支付宝商户平台配置请看官方文档:https://doc.open ...
- TCP客户端 服务端详细代码
本文章转自http://www.myexception.cn/program/1912019.html TCP网络编程中connect().listen()和accept()三者之间的关系 基于 TC ...
- 微信APP支付服务端开发Java版(一)
一.准备工作 去微信开发者中心下载(扫码支付,里面的大部分代码是可以用的) https://pay.weixin.qq.com/wiki/doc/api/micropay.php?chapter=11 ...
- app集成微信支付服务端代码-php版本
1.微信支付分为两种,一种是微信公众品台的微信支付,另一种是微信开放平台的微信支付 2.上周做的是开放品台的微信支付,把遇到的问题总结一下 第一,下载官方提供的代码,解压后放到根目录下,然后认真读文档 ...
- Centos7 安装zabbix3.0 服务端 详细
参考: https://www.cnblogs.com/37yan/p/6879218.html http://blog.csdn.net/hao134838/article/details/5712 ...
- 支付宝H5、APP支付服务端的区别(php)
php支付宝H5和APP支付1.准备工作需要前往 蚂蚁金服开放平台申请https://openhome.alipay.com/developmentDocument.htm 2.大致流程1.用户添加商 ...
- java ali支付服务端对接
引入SDK: <!-- https://mvnrepository.com/artifact/com.aliyun/aliyun-java-sdk-core --><dependen ...
随机推荐
- Jenkins 更新最新版本
一般情况下,war的安装路径在/usr/share/jenkins目录下. 不过也有部分人不喜欢安装在这里,可以通过系统管理(System management)--> 系统信息(System ...
- linux常用的一些命令行操作(ubuntu)
软件安装 sudo apt-get install xxx 压缩和解压缩 1. *.tar 用 tar –xvf 解压 2. *.gz 用 gzip -d或者gunzip 解压 3. *.tar.gz ...
- Ubuntu16.0安装Eclipse Neon
eclipse在Ubuntu下安装先安装jdk,配置环境变量,之后下载eclipse安装包,解压,放置在目标目录,将jre链接到该目录或者将jdk下的jre目录复制到eclipse安装包目录下,双击文 ...
- [C++] right value reference
the advantage of right value reference: Memory Optimization save memory copy
- 新年奉献MVC+EF(CODEFIRST)+EASYUI医药MIS系统(转)
出处:http://www.cnblogs.com/chenlinzhi/p/4332628.html 本人闲来无事就把以前用Asp.net做过的一个医药管理信息系统用mvc,ef ,easyui重新 ...
- ubuntu 16.04安装ceph集群(双节点)
Ceph是一个分布式存储,可以提供对象存储.块存储和文件存储,其中对象存储和块存储可以很好地和各大云平台集成.一个Ceph集群中有Monitor节点.MDS节点(可选,用于文件存储).至少两个OSD守 ...
- OpenCV实现均值哈希
总共分三步:压缩,灰度化,均值化,求哈希值. 1.压缩 void secondMethod(char* filename, char* savename) { //const char* filena ...
- MyEclipse中安装反编译插件
如何查看MyEclipse中Spring等框架的源文件. 首先先下载一个插件:http://pan.baidu.com/share/link?shareid=644034672&uk=3508 ...
- 【微服务架构】SpringCloud之Eureka(服务注册和服务发现基础篇)(二)
上篇文章讲解了SpringCloud组件和概念介绍,接下来讲解一下SpringCloud组件相关组件使用.原理和每个组件的作用的,它主要提供的模块包括:服务发现(Eureka),断路器(Hystrix ...
- python 批量创建文件
# coding:utf8 import os path = "D:/Python_mkfile" os.chdir(path)#切换到该目录 ysyl = u"验收文件 ...