热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

PHP谷歌支付[APP]

获取GOOGLE永久token第一步:获取codepublicfunctiongoogleToken(){if(Input::has('code')&&($co




获取GOOGLE永久token


第一步:获取code


public function googleToken()
{

if (Input::has('code') && ($code = Input::get('code', 'str', ''))) {
var_dump($_REQUEST);
die;
} else {
$this->redirect("https://accounts.google.com/o/oauth2/auth?scope=https://www.googleapis.com/auth/androidpublisher&response_type=code&access_type=offline&redirect_uri=您的域名接口/googleToken&client_id=". Config::get('google.clientid'));
}
}

第二步:获取永久token[字段名:refresh_token]

请求地址: https://accounts.google.com/o/oauth2/token
请求方式:POST
在这里插入图片描述
结果:


{
"access_token": "ya29.a0ARrdaM_KAdN0Eojm8LMIr2WyVEorQv3iOdHbgtSqPhEFN8m9JiEcuwf4UFIKKAKtT-ocRsY8Q9uGBe8t2G6ys9zt0x9KchV2VFmOY_zxJQ6g7xhhh3alBoZvW-JYV3acI6T_O5Xd-JZXWmk2xMocj1jXxymU",
"expires_in": 3599,
"refresh_token": "1//0Y_mLA", //這個參數只會返回一次,記得存起來,GOOGLE後臺可以設置有效期的
"scope": "https://www.googleapis.com/auth/androidpublisher",
"token_type": "Bearer"
}

PHP APP谷歌支付回调


/**
* 驗證google內購訂單
*
* @param $parsedJson 來自客戶端,一個訂單數據的JSON字符串
* @return array
*/
public function google()
{
$post = $_REQUEST;
$parsedJson = $post['data'];
if(empty($parsedJson)) $this->outPutJson(500,'數據域空');
$parsedJson = json_decode($parsedJson, true);
if(empty($parsedJson)) $this->outPutJson(500,'數據域空');
$transactiOnId= $parsedJson['orderId'];
$oid = $parsedJson['obfuscatedAccountId'];
if(empty($transactionId)) $this->outPutJson(500,'google訂單號空');
if(empty($oid)) $this->outPutJson(500,'訂單號空');
if (!empty($transactionId)) {
Order::I()->updateTransId($oid, $transactionId);
}

$pid = $parsedJson['productId'];
$orderToken = $parsedJson['purchaseToken'];
$packageName = $parsedJson['packageName'];
$accessToken = $this->getAccessToken();
if ($accessToken) {
$url = 'https://www.googleapis.com/androidpublisher/v3/applications/'.$packageName.'/purchases/products/'.$pid.'/tokens/'.$orderToken.'?access_token='.$accessToken;
$result = Http::get($url);
$cOntents= json_decode($result,true);
if (!empty($contents)) {
if (isset($contents['error'])) {
$this->outPutJson(500,'請求的身份驗證憑據無效');
}

if($contents['consumptionState'] === 0 && $contents['purchaseState'] === 0){
//驗證成功 購買成功並且沒有消耗 google支付中客戶端如果沒有進行消耗是不能再次購買該商品
$res = Order::I()->finishPayIos($oid,$transactionId);
if($res === true){
$this->outPutJson(200,'正式購買成功');
}else {
$this->outPutJson(500,$res);
}
}else{
//訂單驗證失敗
$this->outPutJson(500,'訂單狀態有誤');
}
}

} else {
$this->outPutJson(500,'TOKEN丟失');
}
}
/**
* google token
*
* @return array
*/
private function getAccessToken()
{

$cacheKey = "google.kanshu.access_token";

$accessToken = DI::Cache()->get($cacheKey);
if ($accessToken) {
return $accessToken;
}

$url = 'https://accounts.google.com/o/oauth2/token';
$data['refresh_token'] = Config::get('google.refresh_token');
$data['client_id'] = Config::get('google.clientid');
$data['client_secret'] = Config::get('google.key');
$data['grant_type'] = 'refresh_token';
$respOnse= Http::post($url,$data);
$result = json_decode($response, true);
if ($result) {
if (isset($result['access_token'])) {
DI::Cache()->set($cacheKey, $result['access_token'], $result['expires_in']);
return $result['access_token'];
} else {
return false;
}
} else {
return false;
}
}


推荐阅读
  • 本文介绍了如何使用JSONObiect和Gson相关方法实现json数据与kotlin对象的相互转换。首先解释了JSON的概念和数据格式,然后详细介绍了相关API,包括JSONObject和Gson的使用方法。接着讲解了如何将json格式的字符串转换为kotlin对象或List,以及如何将kotlin对象转换为json字符串。最后提到了使用Map封装json对象的特殊情况。文章还对JSON和XML进行了比较,指出了JSON的优势和缺点。 ... [详细]
  • Android实战——jsoup实现网络爬虫,糗事百科项目的起步
    本文介绍了Android实战中使用jsoup实现网络爬虫的方法,以糗事百科项目为例。对于初学者来说,数据源的缺乏是做项目的最大烦恼之一。本文讲述了如何使用网络爬虫获取数据,并以糗事百科作为练手项目。同时,提到了使用jsoup需要结合前端基础知识,以及如果学过JS的话可以更轻松地使用该框架。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • Google Play推出全新的应用内评价API,帮助开发者获取更多优质用户反馈。用户每天在Google Play上发表数百万条评论,这有助于开发者了解用户喜好和改进需求。开发者可以选择在适当的时间请求用户撰写评论,以获得全面而有用的反馈。全新应用内评价功能让用户无需返回应用详情页面即可发表评论,提升用户体验。 ... [详细]
  • 不同优化算法的比较分析及实验验证
    本文介绍了神经网络优化中常用的优化方法,包括学习率调整和梯度估计修正,并通过实验验证了不同优化算法的效果。实验结果表明,Adam算法在综合考虑学习率调整和梯度估计修正方面表现较好。该研究对于优化神经网络的训练过程具有指导意义。 ... [详细]
  • 【shell】网络处理:判断IP是否在网段、两个ip是否同网段、IP地址范围、网段包含关系
    本文介绍了使用shell脚本判断IP是否在同一网段、判断IP地址是否在某个范围内、计算IP地址范围、判断网段之间的包含关系的方法和原理。通过对IP和掩码进行与计算,可以判断两个IP是否在同一网段。同时,还提供了一段用于验证IP地址的正则表达式和判断特殊IP地址的方法。 ... [详细]
  • Python15行代码实现免费发送手机短信,推送消息「建议收藏」
    Python15行代码实现免费发 ... [详细]
  • 工作经验谈之-让百度地图API调用数据库内容 及详解
    这段时间,所在项目中要用到的一个模块,就是让数据库中的内容在百度地图上展现出来,如经纬度。主要实现以下几点功能:1.读取数据库中的经纬度值在百度上标注出来。2.点击标注弹出对应信息。3 ... [详细]
  • AstridDAO 专访:波卡稳定币黑马 BAI
    加入Pol ... [详细]
  • Thisworkcameoutofthediscussioninhttps://github.com/typesafehub/config/issues/272 ... [详细]
  • adfs是什么_培训与开发的概念
    adfs是什么_培训与开发的概念(如您转载本文,必须标明本文作者及出处。如有任何疑问请与我联系me@nap7.com)ADFS相关开发技术的中文资料相对匮乏,之前在弄这个东西的时候 ... [详细]
  • 我正在尝试将Firebase添加到涉及添加以下内容的现有应用程序中:classpath'com.googl ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • Imtryingtofigureoutawaytogeneratetorrentfilesfromabucket,usingtheAWSSDKforGo.我正 ... [详细]
  • 本文介绍了H5游戏性能优化和调试技巧,包括从问题表象出发进行优化、排除外部问题导致的卡顿、帧率设定、减少drawcall的方法、UI优化和图集渲染等八个理念。对于游戏程序员来说,解决游戏性能问题是一个关键的任务,本文提供了一些有用的参考价值。摘要长度为183字。 ... [详细]
author-avatar
莫嬷嬷
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有