我正在尝试向用户发放 Google 电子钱包通行证。我相信我对此代码的身份验证部分有疑问。
在执行请求的最后一行,我不断收到此错误:
Google.Apis.Requests.RequestError
header must be set [400]
Errors [
Message[header must be set] Location[ - ] Reason[invalidResource] Domain[walletobjects]
]
// Create the Google Wallet API service
var credential = GoogleCredential.FromFile(@"E:\\myCreds.json")
.CreateScoped(new List<string>
{
WalletobjectsService.ScopeConstants.WalletObjectIssuer
}).UnderlyingCredential;
// Create the Google Wallet API service
var service = new WalletobjectsService(new Google.Apis.Services.BaseClientService.Initializer
{
HttpClientInitializer = credential
});
// Create a new Generic pass object
var genericObject = new GenericObject
{
Id = $"{_issuerId}.{Guid.NewGuid()}",
ClassId = _passClass,
State = "ACTIVE",
HeroImage = new Image
{
SourceUri = new ImageUri
{
Uri = String.IsNullOrEmpty(request.ImageUrl) ? "https://storage.googleapis.com/wallet-lab-tools-codelab-artifacts-public/google-io-hero-demo-only.png" : request.ImageUrl
}
},
CardTitle = new LocalizedString
{
DefaultValue = new TranslatedString
{
Language = "en-US",
Value = request.Title
}
},
Barcode = new Barcode
{
Type = "CODE_39",
Value = request.BarcodeValue
}
};
// Insert the pass object
var genericObjectResponse = service.Genericobject.Insert(genericObject).Execute();
嗯,这很愚蠢。我一开始并没有意识到这一点,但实际上在发布的对象中有一个 header 属性,它想要定义它并接受 localizedString。似乎与标题相似,所以我只是将其设置为标题中的内容,然后就可以了。
现在我有另一个问题!返回有效通证及其 ID 后,我可以生成钱包通证网址以添加到钱包:https://pay.google.com/gp/v/save/
但是,此页面仅显示“出现问题。请重试。”
我能找到的最接近的是,在演示模式下进行测试的电子邮件帐户需要添加为支付和钱包帐户的管理员用户和/或钱包 api 下的测试用户。我已将其添加到两者中,但没有运气。