Tag: 谷歌播放

Google OAuth 2.0服务器到服务器,无法获取令牌

我想从Google Play服务器获取订阅者信息,但我甚至无法通过令牌响应阶段。 我检查了相关的答案,alignment可能的谷歌服务器时间,但我找不到解决scheme。 我还附加了服务器端的javascript下面总是变成响应string; “上传成功!服务器响应: {“error”:“invalid_grant”,“error_description”:“Bad Request”}“ 提前致谢。 function myFunction() { var googleRequest = require('request'); var googleUrl = "https://www.googleapis.com/oauth2/v3/token"; var private_key = "xxx";//intentionally xxx'ed for security and clarity var s1 = JSON.stringify({"alg":"RS256","typ":"JWT"}); var now = new Date().getTime(); var s2 = JSON.stringify({ "iss":"xxx@developer.gserviceaccount.com", "scope":"https://www.googleapis.com/auth/prediction", "aud":"https://www.googleapis.com/oauth2/v3/token", "exp":now + 3600, "iat":now }); function base64(input) { return new Buffer(input, […]

Google Play应用内结算购买签名的服务器端validation失败

目前,我正在将Google Play应用内结算与我的androidgame项目相集成,我已经设置了一个Node.js服务器,并计划将Google Play购买响应的“originalJson”和“signature”值发送给服务器端validation。 然后我在我的Node.js服务器上进行了一些testing,首先这里是我购买的一个(从客户端获取)的“originalJson”和“签名”值: originalJson:{"orderId":"GPA.1312-8694-0319-25069","packageName":"com.shihu.sm.testin","productId":"com.shihu.sm.testin.diamond","purchaseTime":1452598011176,"purchaseState":0,"developerPayload":"{\"iabProductId\":\"com.shihu.sm.testin.diamond\",\"gOrderId\":\"2cb77de1a2a94db18b6df84f8037ea5b\",\"serverId\":\"6\",\"productId\":\"202\"}","purchaseToken":"bjoncdcebeclpklebmadidgb.AO-J1OyEbKLL0rhWQAc1hjdWyJPXHkAoHZTfZasqUuFWKWyAlnj-opiDLYILNRpnWgcblO8vV37fWf0kpeNMRZcgRT-fRxAO4P8VQPmU-TJakB-sCiRx8sUxL4nxnUBMnZdFWdpaIZDW5tP3Ck4aO57n1o66PwnjZw"} signature:JdfwMxprv7iMbI5YnVIWXLEAqiDhAQQva2IdfxtmhqBvLNU4Msi8sj31mnrVJfShxNmQI3zhlNUrCCaXdraFM0/y8O4PoZWYr+PFjCmlMovhG+ldeImEu7x52GLoQ7DsO8Yh4aLYmxemezFc1RjcSpq+l6Zzu9T6j3fHjLfQ060SEFapZITI/poxlFyvJX3bHhF9wGP54tL6pGjB/7fBEqTM1zHXUYeZyz+4akqV8oODlIWwMKhvN5tX/Zra9kh9hm0bnJT/1YWso3tLlT/WTK9nsP1l/lTnEXvgzq9QVSGbT/cpD7KSbR5N4i/NmPYAlCOvesW9OlRD05L8yytpBw== 然后我写了下面的代码用“RSA-SHA1”algorithm和“base64”签名编码进行validation: var crypto = require('crypto'); console.log('start verification'); var public_key = "—–BEGIN PUBLIC KEY—–" + "\r\n" + "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAg+VmzvTvb856ur/J+PWC" + "\r\n" + "gFRhLYV/chAuWzUuqlIh5gnYz1RFOYymCWAKP3wguol8YSe/72zEqAvPutBU2XVj" + "\r\n" + "zx3sHT+GUInbKjgZHzxw0viPh//OfaooEvEFMz9C6J8ABwpGNQUpACmyw12ZKshP" + "\r\n" + "HCJ6PZV+nsWry6PEZgnYCF7w5SDP4GY2tr3Q5D0iQwoALA40KYQfsKZ6pI5L8bDT" + "\r\n" + "2MLTFoemg/npeARy9HYkbonPatBhWjp2flzBRcyQx7DyQ7csLvPl5AGHRT4h5RBq" + "\r\n" + "RlLj+DBgNDAdwvHGyfhbTz7fPsT6xn7qifxAN+2gQsemSVmhi15zECF/k5MtTiOF" + "\r\n" + "owIDAQAB" + "\r\n" + "—–END PUBLIC KEY—–"; verifier= crypto.createVerify("RSA-SHA1"); […]