直接上代码:
1function googleVerify($sdata,$google_public_key) 2{ 3 $sdata = json_decode($sdata,true); 4 5 $in_app_purchase_data = isset($sdata['receipt'])?$sdata['receipt']:""; 6 $in_app_data_signature = isset($sdata['signature'])?$sdata['signature']:""; 7 8 $public_key = "-----BEGIN PUBLIC KEY-----" . PHP_EOL . 9 chunk_split($google_public_key, 64, PHP_EOL) . 10 "-----END PUBLIC KEY-----"; 11 12 $public_key_handle = openssl_pkey_get_public($public_key); 13 14 $result = openssl_verify($in_app_purchase_data, base64_decode($in_app_data_signature), $public_key_handle, OPENSSL_ALGO_SHA1); 15 16 $status = 0; 17 $purchaseTime = 0; 18 if($result == 1){ 19 $status = 1; 20 21 $in_app_purchase_data = json_decode($in_app_purchase_data, true); 22 23 $purchaseTime = isset($in_app_purchase_data['purchaseTime'])?intval($in_app_purchase_data['purchaseTime']):0; 24 } 25 26 return ['status'=>$status,'purcaseTime' => intval($purchaseTime)]; 27}
参数说明:
1$google_public_key:在google play console(https://play.google.com/apps/publish/)后台获取 : 开发工具》服务和API 中能看到的KEY.$sdata:格式如下: 2 3// 4 5//$sdata为字符串,非json对象//receipt,signature都是客户端购买后,google返回的数据 6 7$sdata='{ 8 "receipt": "{\"orderId\":\"GPA.3339-1d91-2716-249\",\"packageName\":\"con\",\"productId\":\"com.w.coin1\",\"purchaseTime\":1540265097944,\"purchaseState\":0,\"purchaseToken\":\"ogiafjoiY\"}", 9 "signature": "fFbfYTh2m/7nL9OZVTkw==" 10}';
返回数据:
$status:== 1,为真订单,0为假订单
$purcaseTime: 订单购买的时间戳。