Seguir

Subida de feed por FTP

En este documento se explican los pasos necesarios para poder subir de manera programática un fichero a nuestros sistemas para su posterior uso como feed de items/productos.

1. Pedir endpoint de subida y firma necesaria

Se realizará una petición GET al endpoint https://cloud.brainsins.com/operations/uploadfeed con los parámetros siguientes (todos dados por el equipo de Soporte de BrainSINS):

  • token [String]: identificador del cliente
  • password [String]: clave asociada al ID de cliente para autorizar la petición

La respuesta contendrá un JSON que contiene:

  • url [String]: Endpoint al que habrá que realizar la llamada POST a posteriori
  • fields [JSON]: dentro de fields se encuentran todos los campos que deberán reenviarse en la llamada POST a posteriori

Ejemplo de petición

https://cloud.brainsins.com/operations/uploadfeed?token=BS-0123456789-1&password=abcdefg

 

Ejemplo de respuesta

{
    "url": "https://brainsinsclients.s3.amazonaws.com/",
    "fields": {
        "key": "BS-0123456789-1/clientuploads/upload.xml",
        "AWSAccessKeyId": "ASIATOPOE4TCLXZ6NIPN",
        "x-amz-security-token": "FQoGZXIvYXdzEKL//////////wEaDABk3TwX265ep5vlVCLpATvNvQGd1MsRehRZblNo2PimbLwlA84rmgxzzlxc5dB92YxAmSAler/Lx/QHIIfkQCBW3yyPjBvvCs85jadD8d53raHwCY3GxbiMS0Dhrua375ZWOHcfiYNK01poEVfKn4CR6aa1KB1cDg09drLH4QB+AalKlmMlZ2fz+SiGut1HlJDgJkSN/7jcJoMp6N5/F7yzv5F54A3UbQK67xgFdZzliTDXZWTR3QFs6ZGJjo2h1jKJjfNVy3voXJbP2f8If/7uag5029CtzZuzoos/BgPZSAoOZVGX0NoKA1iSiFlMUqhT0n8IyvFmKPvO5d4F",
        "policy": "eyJleHBpcmF0aW9uIjogIjIwMTgtMTAtMzFUMDk6NDQ6NDRaIiwgImNvbmRpdGlvbnMiOiBbeyJidWNrZXQiOiAiYnJhaW5zaW5zY2xpZW50cyJ9LCB7ImtleSI6ICJCUy05MDgyNzEyMjE5LTEvY2xpZW50dXBsb2Fkcy91cGxvYWQueG1sIn0sIHsieC1hbXotc2VjdXJpdHktdG9rZW4iOiAiRlFvR1pYSXZZWGR6RUtMLy8vLy8vLy8vL3dFYURBQmszVHdYMjY1ZXA1dmxWQ0xwQVR2TnZRR2QxTXNSZWhSWmJsTm8yUGltYkx3bEE4NHJtZ3h6emx4YzVkQjkyWXhBbVNBbGVyL0x4L1FISUlma1FDQlczeXlQakJ2dkNzODVqYWREOGQ1M3JhSHdDWTNHeGJpTVMwRGhydWEzNzVaV09IY2ZpWU5LMDFwb0VWZktuNENSNmFhMUtCMWNEZzA5ZHJMSDRRQitBYWxLbG1NbFoyZnorU2lHdXQxSGxKRGdKa1NOLzdqY0pvTXA2TjUvRjd5enY1RjU0QTNVYlFLNjd4Z0ZkWnpsaVREWFpXVFIzUUZzNlpHSmpvMmgxaktKamZOVnkzdm9YSmJQMmY4SWYvN3VhZzUwMjlDdHpadXpvb3MvQmdQWlNBb09aVkdYME5vS0ExaVNpRmxNVXFoVDBuOEl5dkZtS1B2TzVkNEYifV19",
        "signature": "JMaL9FOc6Dhs2uozlX2csHrfHUU="
    }
}

 

Ejemplo de código PHP:

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => "https://cloud.brainsins.com/operations/uploadfeed?token=BS-0123456789-1&password=abcdefg",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 30,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => array(
    "cache-control: no-cache"
  ),
));

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
  echo "cURL Error #:" . $err;
} else {
  echo $response;
}

 

Ejemplo de código Java:

OkHttpClient client = new OkHttpClient();

Request request = new Request.Builder()
  .url("https://cloud.brainsins.com/operations/uploadfeed?token=BS-0123456789-1&password=abcdefg")
  .get()
  .addHeader("cache-control", "no-cache")
  .build();

Response response = client.newCall(request).execute();

 

Ejemplo en unix CURL de la petición:

curl -X GET \
  'https://cloud.brainsins.com/operations/uploadfeed?token=BS-0123456789-1&password=Oj7v6r4hXZ' \
  -H 'cache-control: no-cache'

 

2. Subir fichero usando la respuesta de la petición anterior

A raíz de la respuesta de la petición anterior, debemos realizar una petición POST al endpoint indicado en el atributo url de la respuesta JSON anterior. Los atributos y valores dentro de fields deben ir como campos de la petición POST, añadiéndole el campo file, el cual será el fichero a subir. Resumiendo los campos que deben ir en la llamada:

  • key
  • AWSAccessKeyId
  • x-amz-security-token
  • policy
  • signature
  • file

La respuesta en caso de subida satisfactoria es un 204, respuesta vacía.

Especial atención al path del fichero a subir.

Ejemplo de código PHP:

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => "https://brainsinsclients.s3.amazonaws.com",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 30,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POSTFIELDS => array(
    "key"=>"BS-0123456789-1/clientuploads/upload.xml",
    "AWSAccessKeyId"=>"ASIATOPOE4TCLXZ6NIPN",
    "x-amz-security-token"=>"FQoGZXIvYXdzEKL//////////wEaDABk3TwX265ep5vlVCLpATvNvQGd1MsRehRZblNo2PimbLwlA84rmgxzzlxc5dB92YxAmSAler/Lx/QHIIfkQCBW3yyPjBvvCs85jadD8d53raHwCY3GxbiMS0Dhrua375ZWOHcfiYNK01poEVfKn4CR6aa1KB1cDg09drLH4QB+AalKlmMlZ2fz+SiGut1HlJDgJkSN/7jcJoMp6N5/F7yzv5F54A3UbQK67xgFdZzliTDXZWTR3QFs6ZGJjo2h1jKJjfNVy3voXJbP2f8If/7uag5029CtzZuzoos/BgPZSAoOZVGX0NoKA1iSiFlMUqhT0n8IyvFmKPvO5d4F",
    "policy"=>"eyJleHBpcmF0aW9uIjogIjIwMTgtMTAtMzFUMTA6MTI6NDBaIiwgImNvbmRpdGlvbnMiOiBbeyJidWNrZXQiOiAiYnJhaW5zaW5zY2xpZW50cyJ9LCB7ImtleSI6ICJCUy05MDgyNzEyMjE5LTEvY2xpZW50dXBsb2Fkcy91cGxvYWQueG1sIn0sIHsieC1hbXotc2VjdXJpdHktdG9rZW4iOiAiRlFvR1pYSXZZWGR6RUtMLy8vLy8vLy8vL3dFYURBQmszVHdYMjY1ZXA1dmxWQ0xwQVR2TnZRR2QxTXNSZWhSWmJsTm8yUGltYkx3bEE4NHJtZ3h6emx4YzVkQjkyWXhBbVNBbGVyL0x4L1FISUlma1FDQlczeXlQakJ2dkNzODVqYWREOGQ1M3JhSHdDWTNHeGJpTVMwRGhydWEzNzVaV09IY2ZpWU5LMDFwb0VWZktuNENSNmFhMUtCMWNEZzA5ZHJMSDRRQitBYWxLbG1NbFoyZnorU2lHdXQxSGxKRGdKa1NOLzdqY0pvTXA2TjUvRjd5enY1RjU0QTNVYlFLNjd4Z0ZkWnpsaVREWFpXVFIzUUZzNlpHSmpvMmgxaktKamZOVnkzdm9YSmJQMmY4SWYvN3VhZzUwMjlDdHpadXpvb3MvQmdQWlNBb09aVkdYME5vS0ExaVNpRmxNVXFoVDBuOEl5dkZtS1B2TzVkNEYifV19",
    "signature"=>"AIp6gb271FtiEW6icLHfZHYqTAs=",
    "file"=>file_get_contents("/path/to/file.txt")
  ),
  CURLOPT_HTTPHEADER => array(
    "Postman-Token: d4b5d893-3249-46dc-a074-cd791aa9515e",
    "cache-control: no-cache",
    "content-type: multipart/form-data;"
  ),
));

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
  echo "cURL Error #:" . $err;
} else {
  echo $response;
}

 

Ejemplo de código Java:

OkHttpClient client = new OkHttpClient();

MediaType mediaType = MediaType.parse("multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW");
RequestBody body = RequestBody.create(mediaType, "------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"key\"\r\n\r\nBS-0123456789-1/clientuploads/upload.xml\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"AWSAccessKeyId\"\r\n\r\nASIATOPOE4TCLXZ6NIPN\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"x-amz-security-token\"\r\n\r\nFQoGZXIvYXdzEKL//////////wEaDABk3TwX265ep5vlVCLpATvNvQGd1MsRehRZblNo2PimbLwlA84rmgxzzlxc5dB92YxAmSAler/Lx/QHIIfkQCBW3yyPjBvvCs85jadD8d53raHwCY3GxbiMS0Dhrua375ZWOHcfiYNK01poEVfKn4CR6aa1KB1cDg09drLH4QB+AalKlmMlZ2fz+SiGut1HlJDgJkSN/7jcJoMp6N5/F7yzv5F54A3UbQK67xgFdZzliTDXZWTR3QFs6ZGJjo2h1jKJjfNVy3voXJbP2f8If/7uag5029CtzZuzoos/BgPZSAoOZVGX0NoKA1iSiFlMUqhT0n8IyvFmKPvO5d4F\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"policy\"\r\n\r\neyJleHBpcmF0aW9uIjogIjIwMTgtMTAtMzFUMDk6NDQ6NDRaIiwgImNvbmRpdGlvbnMiOiBbeyJidWNrZXQiOiAiYnJhaW5zaW5zY2xpZW50cyJ9LCB7ImtleSI6ICJCUy05MDgyNzEyMjE5LTEvY2xpZW50dXBsb2Fkcy91cGxvYWQueG1sIn0sIHsieC1hbXotc2VjdXJpdHktdG9rZW4iOiAiRlFvR1pYSXZZWGR6RUtMLy8vLy8vLy8vL3dFYURBQmszVHdYMjY1ZXA1dmxWQ0xwQVR2TnZRR2QxTXNSZWhSWmJsTm8yUGltYkx3bEE4NHJtZ3h6emx4YzVkQjkyWXhBbVNBbGVyL0x4L1FISUlma1FDQlczeXlQakJ2dkNzODVqYWREOGQ1M3JhSHdDWTNHeGJpTVMwRGhydWEzNzVaV09IY2ZpWU5LMDFwb0VWZktuNENSNmFhMUtCMWNEZzA5ZHJMSDRRQitBYWxLbG1NbFoyZnorU2lHdXQxSGxKRGdKa1NOLzdqY0pvTXA2TjUvRjd5enY1RjU0QTNVYlFLNjd4Z0ZkWnpsaVREWFpXVFIzUUZzNlpHSmpvMmgxaktKamZOVnkzdm9YSmJQMmY4SWYvN3VhZzUwMjlDdHpadXpvb3MvQmdQWlNBb09aVkdYME5vS0ExaVNpRmxNVXFoVDBuOEl5dkZtS1B2TzVkNEYifV19\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"signature\"\r\n\r\nJMaL9FOc6Dhs2uozlX2csHrfHUU=\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"file\"; filename=\"/path/to/file.txt\"\r\nContent-Type: text/plain\r\n\r\n\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW--");
Request request = new Request.Builder()
  .url("https://brainsinsclients.s3.amazonaws.com")
  .post(body)
  .addHeader("content-type", "multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW")
  .addHeader("Content-Type", "application/x-www-form-urlencoded")
  .addHeader("cache-control", "no-cache")
  .addHeader("Postman-Token", "cc5753bb-d3af-4a9a-b925-f47a2b646b64")
  .build();

Response response = client.newCall(request).execute();


Ejemplo en unix CURL de la petición:

curl -X POST \
  https://brainsinsclients.s3.amazonaws.com \
  -H 'content-type: multipart/form-data;' \
  -H 'cache-control: no-cache' \
  -F key=BS-0123456789-1/clientuploads/upload.xml \
  -F AWSAccessKeyId=ASIATOPOE4TCLXZ6NIPN \
  -F 'x-amz-security-token=FQoGZXIvYXdzEKL//////////wEaDABk3TwX265ep5vlVCLpATvNvQGd1MsRehRZblNo2PimbLwlA84rmgxzzlxc5dB92YxAmSAler/Lx/QHIIfkQCBW3yyPjBvvCs85jadD8d53raHwCY3GxbiMS0Dhrua375ZWOHcfiYNK01poEVfKn4CR6aa1KB1cDg09drLH4QB+AalKlmMlZ2fz+SiGut1HlJDgJkSN/7jcJoMp6N5/F7yzv5F54A3UbQK67xgFdZzliTDXZWTR3QFs6ZGJjo2h1jKJjfNVy3voXJbP2f8If/7uag5029CtzZuzoos/BgPZSAoOZVGX0NoKA1iSiFlMUqhT0n8IyvFmKPvO5d4F' \
  -F policy=eyJleHBpcmF0aW9uIjogIjIwMTgtMTAtMzFUMTA6MTI6NDBaIiwgImNvbmRpdGlvbnMiOiBbeyJidWNrZXQiOiAiYnJhaW5zaW5zY2xpZW50cyJ9LCB7ImtleSI6ICJCUy05MDgyNzEyMjE5LTEvY2xpZW50dXBsb2Fkcy91cGxvYWQueG1sIn0sIHsieC1hbXotc2VjdXJpdHktdG9rZW4iOiAiRlFvR1pYSXZZWGR6RUtMLy8vLy8vLy8vL3dFYURBQmszVHdYMjY1ZXA1dmxWQ0xwQVR2TnZRR2QxTXNSZWhSWmJsTm8yUGltYkx3bEE4NHJtZ3h6emx4YzVkQjkyWXhBbVNBbGVyL0x4L1FISUlma1FDQlczeXlQakJ2dkNzODVqYWREOGQ1M3JhSHdDWTNHeGJpTVMwRGhydWEzNzVaV09IY2ZpWU5LMDFwb0VWZktuNENSNmFhMUtCMWNEZzA5ZHJMSDRRQitBYWxLbG1NbFoyZnorU2lHdXQxSGxKRGdKa1NOLzdqY0pvTXA2TjUvRjd5enY1RjU0QTNVYlFLNjd4Z0ZkWnpsaVREWFpXVFIzUUZzNlpHSmpvMmgxaktKamZOVnkzdm9YSmJQMmY4SWYvN3VhZzUwMjlDdHpadXpvb3MvQmdQWlNBb09aVkdYME5vS0ExaVNpRmxNVXFoVDBuOEl5dkZtS1B2TzVkNEYifV19 \
  -F signature=AIp6gb271FtiEW6icLHfZHYqTAs= \
  -F file=@/path/to/file.txt

 

 

¿Fue útil este artículo?
Usuarios a los que les pareció útil: 0 de 0
¿Tiene más preguntas? Enviar una solicitud

Comentarios

Tecnología de Zendesk