

# Conexión a PayPal
<a name="connecting-to-data-paypal"></a>

PayPal es un sistema de pagos que facilita las transferencias de dinero en línea entre partes, por ejemplo, transferencias entre clientes y proveedores en línea. Si es usuario de PayPal, la cuenta contiene datos sobre las transacciones, como los pagadores, las fechas y los estados. Puede utilizar AWS Glue para transferir datos de PayPal a determinados servicios de AWS u otras aplicaciones compatibles.

**Topics**
+ [Compatibilidad de AWS Glue con PayPal](paypal-support.md)
+ [Políticas que contienen las operaciones de la API para crear y usar conexiones](paypal-configuring-iam-permissions.md)
+ [Configuración de PayPal](paypal-configuring.md)
+ [Configuración de conexiones a PayPal](paypal-configuring-connections.md)
+ [Cómo leer datos de entidades de PayPal](paypal-reading-from-entities.md)
+ [Opciones de conexión a PayPal](paypal-connection-options.md)
+ [Limitaciones y notas del conector de PayPal](paypal-connector-limitations.md)

# Compatibilidad de AWS Glue con PayPal
<a name="paypal-support"></a>

AWS Glue admite PayPal de la siguiente manera:

**¿Es compatible como origen?**  
Sí. Puede usar los trabajos de ETL de AWS Glue para consultar datos de PayPal.

**¿Es compatible como destino?**  
No.

**Versión de API de PayPal compatibles**  
Las siguientes versiones de la API de PayPal son compatibles:
+ v1

# Políticas que contienen las operaciones de la API para crear y usar conexiones
<a name="paypal-configuring-iam-permissions"></a>

En el siguiente ejemplo de política se describen los permisos de AWS IAM necesarios para crear y utilizar conexiones. Si va a crear un nuevo rol, cree una política que contenga lo siguiente:

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "glue:ListConnectionTypes",
        "glue:DescribeConnectionType",
        "glue:RefreshOAuth2Tokens",
        "glue:ListEntities",
        "glue:DescribeEntity"
      ],
      "Resource": "*"
    }
  ]
}
```

------

Si no desea utilizar el método anterior, puede utilizar las siguientes políticas de IAM administradas:
+ [AWSGlueServiceRole](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/service-role/AWSGlueServiceRole): da acceso a recursos que precisan diversos procesos de AWS Glue para ejecutarse en su nombre. Entre estos recursos se incluyen AWS Glue, Amazon S3, IAM, CloudWatch Logs y Amazon EC2. Si aplica la convención de nomenclatura en los recursos especificados en esta política, los procesos de AWS Glue tienen los permisos necesarios. Normalmente, esta política se asocia a los roles que se especifican a la hora de definir rastreadores, trabajos y puntos de conexión de desarrollo.
+ [AWSGlueConsoleFullAccess](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AWSGlueConsoleFullAccess): otorga acceso total a los recursos de AWS Glue cuando una identidad a la que está asociada la política utiliza la Consola de administración de AWS. Si sigue la convención de nomenclatura para los recursos especificados en esta política, los usuarios dispondrán de todas las funciones de la consola. Esta política se suele adjuntar a los usuarios de la consola AWS Glue.

# Configuración de PayPal
<a name="paypal-configuring"></a>

Antes de poder utilizar AWS Glue para transferir datos desde PayPal, deberá cumplir estos requisitos:

## Requisitos mínimos
<a name="paypal-configuring-min-requirements"></a>

Los requisitos mínimos son los siguientes:
+ Tiene una cuenta PayPal con credenciales de cliente.
+ La cuenta de PayPal tiene acceso de API con una licencia válida.

Si cumple estos requisitos, estará listo para conectar AWS Glue a la cuenta de PayPal. Para conexiones típicas, no necesita hacer nada más en PayPal.

# Configuración de conexiones a PayPal
<a name="paypal-configuring-connections"></a>

PayPal admite el tipo de concesión CLIENT CREDENTIALS para OAuth2.
+ Este tipo de concesión se considera OAuth 2.0 de doble vía, ya que lo utilizan los clientes para obtener un código de acceso fuera del contexto de un usuario. AWS Glue puede utilizar el ID de cliente y el secreto de cliente para autenticar las API de PayPal que proporcionan los servicios personalizados que se definan.
+ Cada servicio personalizado pertenece a un usuario exclusivo de la API con un conjunto de roles y permisos que autorizan al servicio a realizar acciones específicas. Un token de acceso está asociado a un único servicio personalizado.
+ Este tipo de concesión da lugar a un token de acceso de corta duración, y se puede renovar mediante una nueva llamada al punto de conexión `/v2/oauth2/token`.
+ Para consultar la documentación pública de PayPal para OAuth 2.0 con credenciales de cliente, consulte [Autenticación](https://developer.paypal.com/api/rest/authentication/).

Para configurar una conexión a PayPal:

1. En AWS Secrets Manager, cree un secreto con los siguientes detalles:

   1. En el caso de las aplicaciones conectadas administradas por el cliente, el secreto debe contener el secreto del consumidor de la aplicación conectada con `USER_MANAGED_CLIENT_APPLICATION_CLIENT_SECRET` como clave.

   1. Nota: Debe crear un secreto para las conexiones en AWS Glue.

1. En AWS Glue Glue Studio, cree una conexión en **Conexiones de datos** según los pasos que se indican a continuación:

   1. Al seleccionar un **Tipo de conexión**, elija PayPal.

   1. Proporcione la `INSTANCE_URL` de la instancia de PayPal a la que se quiere conectar.

   1. Seleccione el rol de AWS IAM que AWS Glue pueda asumir y que tenga permisos para las siguientes acciones:

------
#### [ JSON ]

****  

      ```
      {
        "Version":"2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Action": [
              "secretsmanager:DescribeSecret",
              "secretsmanager:GetSecretValue",
              "secretsmanager:PutSecretValue",
              "ec2:CreateNetworkInterface",
              "ec2:DescribeNetworkInterfaces",
              "ec2:DeleteNetworkInterface"
            ],
            "Resource": "*"
          }
        ]
      }
      ```

------

   1. Seleccione el `secretName` que desee usar para esta conexión en AWS Glue para colocar los tokens.

   1. Seleccione las opciones de red si quiere usar su red.

1. Conceda el rol de IAM asociado a su permiso de trabajo de AWS Glue para leer `secretName`.

## Obtención de las credenciales de OAuth 2.0
<a name="paypal-getting-oauth-20-credentials"></a>

Para llamar a la API de Rest, tendrá que intercambiar el ID de cliente y el secreto de cliente por un token de acceso. Para obtener más información, consulte [Introducción a las API de REST de PayPal](https://developer.paypal.com/api/rest/).

# Cómo leer datos de entidades de PayPal
<a name="paypal-reading-from-entities"></a>

**Requisito previo**

Un objeto de PayPal desde el que desea leer. Necesitará el nombre del objeto, `transaction`.

**Entidades compatibles como origen:**


| Entidad | Se puede filtrar | Admite límite | Admite Ordenar por | Admite Seleccionar \$1 | Admite partición | 
| --- | --- | --- | --- | --- | --- | 
| transacción | Sí | Sí | No | Sí | Sí | 

**Ejemplo:**

```
paypal_read = glueContext.create_dynamic_frame.from_options(
    connection_type="paypal",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "transaction",
        "API_VERSION": "v1",
        "INSTANCE_URL": "https://api-m.paypal.com"
    }
```

**Detalles de entidades y campos de PayPal**:

Entidades con metadatos estáticos:

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/glue/latest/dg/paypal-reading-from-entities.html)

## Consultas de particionamiento
<a name="paypal-reading-partitioning-queries"></a>

Puede proporcionar las opciones adicionales de Spark `PARTITION_FIELD`, `LOWER_BOUND`, `UPPER_BOUND` y `NUM_PARTITIONS` si quiere utilizar la simultaneidad en Spark. Con estos parámetros, la consulta original se dividiría en un número `NUM_PARTITIONS` de subconsultas que las tareas de Spark pueden ejecutar simultáneamente.
+ `PARTITION_FIELD`: el nombre del campo que se utilizará para particionar la consulta.
+ `LOWER_BOUND`: un valor de límite inferior **inclusivo** del campo de partición elegido.

  En el campo Datetime, aceptamos el valor en formato ISO.

  Ejemplos de valor válido:

  ```
  "2024-07-01T00:00:00.000Z"
  ```
+ `UPPER_BOUND`: un valor límite superior **exclusivo** del campo de partición elegido.
+ `NUM_PARTITIONS`: el número de particiones.

Se admite el siguiente campo para la partición por entidades:


| Nombre de la entidad | Campos de partición | Tipo de datos: | 
| --- | --- | --- | 
| transacción | transaction\$1initiation\$1date | DateTime | 

Ejemplo:

```
paypal_read = glueContext.create_dynamic_frame.from_options(
    connection_type="paypal",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "transaction",
        "API_VERSION": "v1",
        "PARTITION_FIELD": "transaction_initiation_date"
        "LOWER_BOUND": "2024-07-01T00:00:00.000Z"
        "UPPER_BOUND": "2024-07-02T00:00:00.000Z"
        "NUM_PARTITIONS": "10"
    }
```

# Opciones de conexión a PayPal
<a name="paypal-connection-options"></a>

Las siguientes son opciones de conexión para PayPal:
+ `ENTITY_NAME`(cadena): (obligatorio) se usa para lectura. El nombre del objeto en PayPal.
+ `API_VERSION`(cadena): (obligatorio) se usa para lectura. Versión de la API de Rest de PayPal que desea usar.
+ `SELECTED_FIELDS`(lista<Cadena>): predeterminado: empty(SELECT \$1). Se usa para leer. Columnas que desee seleccionar para el objeto.
+ `FILTER_PREDICATE`(cadena): predeterminado: vacío. Se usa para leer. Debe estar en el formato de Spark SQL.
+ `QUERY`(cadena): predeterminado: vacío. Se usa para leer. Consulta completa de Spark SQL.
+ `PARTITION_FIELD`(cadena): se usa para leer. Campo que se utilizará para particionar la consulta.
+ `LOWER_BOUND`(cadena): se usa para leer. Un valor de límite inferior inclusivo del campo de partición elegido.
+ `UPPER_BOUND`(cadena): se usa para leer. Un valor límite superior exclusivo del campo de partición elegido.
+ `NUM_PARTITIONS`(entero): predeterminado: 1. Se usa para leer. Número de particiones para leer.

# Limitaciones y notas del conector de PayPal
<a name="paypal-connector-limitations"></a>

Las siguientes son limitaciones o notas para el conector de PayPal:
+ La [documentación sobre transacciones de PayPal](https://developer.paypal.com/docs/api/transaction-search/v1/#search_get) indica que las transacciones ejecutadas tardan un máximo de tres horas en reflejarse en la llamada a lista de transacciones. Sin embargo, se ha observado que lleva más tiempo que eso según la [https://developer.paypal.com/docs/api/transaction-search/v1/#search_get:~:text=last_refreshed_datetime](https://developer.paypal.com/docs/api/transaction-search/v1/#search_get:~:text=last_refreshed_datetime). En este caso, `last_refreshed_datetime` es la cantidad de tiempo durante el cual tiene disponibles los datos de las API.
+ Si la `last_refreshed_datetime` es anterior a la `end_date` solicitada, la `end_date` pasa a ser igual a la `last_refreshed_datetime`, ya que solo tenemos datos hasta ese momento.
+ El campo `transaction_initiation_date` es un filtro obligatorio que se debe proporcionar para la entidad `transaction` y el intervalo de fechas [máximo admitido](https://developer.paypal.com/docs/transaction-search/#:~:text=The%20maximum%20supported%20date%20range%20is%2031%20days.) para este campo es de 31 días.
+ Cuando llama a la solicitud de API de la entidad `transaction` con filtros (parámetros de consulta) distintos del campo `transaction_initiation_date`, se espera que el valor del campo [https://developer.paypal.com/docs/api/transaction-search/v1/#search_get:~:text=If%20you%20specify%20one%20or%20more%20optional%20query%20parameters%2C%20the%20ending_balance%20response%20field%20is%20empty.](https://developer.paypal.com/docs/api/transaction-search/v1/#search_get:~:text=If%20you%20specify%20one%20or%20more%20optional%20query%20parameters%2C%20the%20ending_balance%20response%20field%20is%20empty.) no aparezca en la respuesta.