无法使用Google API

时间:2017-02-10 19:37:58

标签: c# .net google-api oauth-2.0 google-tag-manager

使用"试试吧!" GTM API文档中的功能: https://developers.google.com/tag-manager/api/v1/reference/accounts/containers/variables/list?authuser=2 我可以从GTM获取包含变量的列表

然而,当我尝试更新变量(https://developers.google.com/tag-manager/api/v1/reference/accounts/containers/variables/update?authuser=2)时,再次使用"试一试!",我得到:

{
 "error": {
  "errors": [
   {
    "domain": "global",
    "reason": "invalidArgument",
    "message": "Bad Request"
   }
  ],
  "code": 400,
  "message": "Bad Request"
 }
}

我非常确定我正确插入了所有参数,经过一天的尝试后,我认为GTM的更新变量API存在问题。

有人可以确认更新GTM变量对他们有效吗?

此外,我尝试从后端执行此操作并弹出相同的响应。

这是我的代码:

   public void Authenticate()
{


    string serviceAccountEmail = "xxxxxxxxxxxx@local-proj.iam.gserviceaccount.com";

    string folder = System.Web.HttpContext.Current.Server.MapPath("/App_Data/MyGoogleStorage/key.p12");
    var certificate = new X509Certificate2(folder, "notasecret", X509KeyStorageFlags.Exportable);

    ServiceAccountCredential credential = new ServiceAccountCredential(
       new ServiceAccountCredential.Initializer(serviceAccountEmail)
       {
           Scopes = new[] { TagManagerService.Scope.TagmanagerEditContainers}
       }.FromCertificate(certificate));

    // Create the service.
    var service = new TagManagerService(new BaseClientService.Initializer()
    {
        HttpClientInitializer = credential,
        ApplicationName = "My Local Proj"
    });

此时服务已通过身份验证,因此我可以执行以下操作:

var myGTMVars = service.Accounts.Containers.Variables.List("AccountID", "ContainerID").Execute();

从后端获取GTM的所有变量。一切都按预期工作。

但是当我尝试更新一个时:

    Variable gTMVar = new Variable();
    gTMVar.Name = "IsAfterSignUpSuccess";
    gTMVar.Type = "c";
    var param = new Parameter()
    {
        Type = "template",
        Value = "true"
    };
    gTMVar.Parameter = new List<Parameter>();
    gTMVar.Parameter.Add(param);
    try
    {
        var newVar = service.Accounts.Containers.Variables.Update(body: gTMVar, accountId: "xxx", containerId: "xxx", variableId: "x").Execute();
    }
    catch (Exception ex)
    {

    }

每次给我BadRequest它都失败了。我尝试了不同的参数,不同类型的变量,没有任何帮助。还尝试了不同的范围来启动服务 - 没有任何帮助。

关于这个主题的信息很少,尤其是c#。

我在这里发布了我的代码 - 希望能节省一些人的日子,因为在没有用户交互的情况下从后端验证服务并不简单。 (最后结果很简单)

1 个答案:

答案 0 :(得分:0)

如果您要更新值,请求中的参数必须包含3个属性:
类型:您正在编辑的类型,
关键:价值,
价值:你的价值

网址:https://www.googleapis.com/tagmanager/v1/accounts/accountId/containers/containerId/variables/variableId
参数:

{
  "name":"YOUR_VARIABLE_NAME",
  "type":"YOUR_VARIABLE_TYPE", 
  "parameter":[{
      "type":"YOUR_TYPE",
      "key":"value",
      "value":"YOUR_VALUE"
   }]
}

Tag Manager API的文档有遗漏,并且提供的帮助非常少。 大多数指南都集中在GUI上,而Simo Ahava在他的例子中大多使用Python。

最佳, 磁卡