标签:google APP 谷歌 token outPutJson result PHP 500 parsedJson
获取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;
}
}
标签:google,APP,谷歌,token,outPutJson,result,PHP,500,parsedJson 来源: https://blog.csdn.net/weixin_41023117/article/details/120131975
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。