Terminado

Plug-in para Wordpress que conecte Contact Form 7 con Sales Force a través de una Api personalizada para enviar contacto newsletter

Publicado el 05 Noviembre, 2019 en Programación y Tecnología

Sobre este proyecto

Abierto

Desarrollo de un plug-in para Wordpress que conecte un formulario realizado con contact form 7 con Sales Force a través de una rest api personalizada para el cliente con el objetivo de enviar los contactos recogidos en el formulario de suscripción al newsletter.

El plug-in debe funcionar en diferentes instalaciones de Wordpress.

Código del formulario del Newsletter en CF7:

<div class="two_columns_75_25">
<div class="column1">
<div class="column_inner">[email* your-email "Introduce tu correo electrónico"]</div>
<div style="display:none;">
[text language "es"]
</div>
</div>
<div class="column2">
<div class="column_inner">[submit "enviar"]</div>
</div>
</div>
<p>[acceptance terminos-condiciones] <span style="color: #ffffff;">acepto los <a href="/politica-de-privacidad/" target="_blank"> términos y condiciones</a></span></p>


queremos que añadiendo automáticamente reconozca en contact form 7 los siguientes campos y los envíe a sales force:

email: email                        
language: enviar el idioma
terminos-condiciones: cf7 devuelve "1", transformarlo en "true" para el campo “newsletter” en salesforce

los campos:
"emailvalidated" siempre se enviará "false"
"contactabletype": siempre se enviará "-1"




documentación rest api sales force

índice:

1. Introducción
1.1.  Salesforce rest api
1.2.



APIs REST personalizadas
2. Referencia
2.1. Estructuras de datos
2.1.1.



Status
2.2. Servicios Web
2.2.1. Suscripción a newsletter


1. Introducción
El presente documento trata la integración de una plataforma mediante Servicios Web REST con Salesforce.

La introducción expone los siguientes puntos:
•    Introducción a la api rest de salesforce y referencias a la documentación oficial.
•    Resumen de la api rest desarrollada para la sincronización con el cliente.


1.1.    Salesforce rest api

salesforce ofrece una api rest estándar para la integración con otros sistemas, ofreciendo una interfaz uniforme para la gestión crud del sistema; dicha api permite generar servicios web rest propios que pueden ser consumidos siguiendo el mismo proceso que los servicios rest estándar.

De forma previa a la llamada de un servicio web REST definido en Salesforce, es necesario contar con un token de sesión de válido de un usuario con licencia Salesforce que permita el uso de la api rest; este usuario es comúnmente denominado como usuario de integración, y es la licencia con la que se realizan las integraciones de salesforce con otros sistemas.

Para generar un token de sesión válido, para ello, es necesario seguir el flujo de autenticación OAuth2, donde la web pública de Lopesan se configura como una aplicación conectada a Salesforce, obteniendo su correspondiente Client Id y Client Secret.

En Salesforce, se encuentran definidos 3 flujos de autenticación disponibles, de los cuales se utilizará el flujo clásico de usuario-contraseña descrito en el siguiente enlace, donde el par usuario-clave será el usuario de integración con su respectiva contraseña, que será conocida por la plataforma partícipe en la integración.

Este token de sesión debe incluir en toda llamada a un servicio Web REST de Salesforce en la cabecera de la petición siguiendo el siguiente formato:

Authentication: Bearer auth_token

Si el token de sesión expirase, es necesario que la plataforma integrada, en este caso, la web en wordpress, gestione la realización de un nuevo login con el objetivo de obtener un nuevo token de sesión para el usuario de integración.

URL para obtener token: Método GET
https://login.salesforce.com/services/oauth2/token?grant_type=password &client_id=xxxxxxxxxx&client_secret=xxxxxxxxxx&username=xxxxxxx&password=xxxxxxxxx

Toda la documentación referente a la Salesforce rest api se encuentra disponible en la documentación oficial: https://developer.salesforce.com/docs/atlas.en-us.api_rest.meta/api_rest/intro_understanding_username_password_oauth_flow.htm


1.2.    APIs REST personalizadas

Los servicios REST personalizados en Salesforce son aquellos desarrollados a medida y que pueden ser invocados siguiendo un proceso análogo a los servicios estándar.
El endpoint de los servicios REST personalizados ser define según el siguiente formato:

https://instance.salesforce.com/services/apexrest/

donde instance es la url de la instancia de Salesforce correspondiente al cliente.

De forma análoga a un servicio estándar de Salesforce, las peticiones deberán incluir siempre el token de autorización obtenido en la cabecera de la petición mediante el formato siguiente:

Authentication: Bearer auth_token

El formato de intercambio de datos utilizado para toda petición a un servicio, así como la respuesta del mismo, se realizará bien mediante xml bien mediante json, ambos codificados en utf-8.

El formato por defecto es json; si se desea usar xml, toda petición debe incluir las cabeceras adicionales:

accept: application/xml
content-type: application/xml

toda petición deberá encapsular el mensaje entre las etiquetas <request></request>. A modo de ejemplo, una petición válida podría ser:

post /services/apexrest/web2account? http/1.1
Host: xxxxxx.my.salesforce.com
Content-Type: application/json
Authorization: Bearer
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxAccept: application/xml
Content-Type: application/xml
Cache-Control: no-cache
<request>
      <email>ejemplo@mail.com</email>
      <firstName>null</firstName>
      <lastName>null</lastName>
      <phone>null</phone>
      <newsletter>true</hotel>
      <discount>flase</comments>
      <country>null</country>
      <postalCode>null</postalCode>
      <language>ES</language>
      <emailValidated>false</emailValidated>
      <contactableType>-1</contactableType>
</request>


La estructura propuesta para las respuestas de los servicios es la siguiente:

•    Estado, divido a su vez en un código de respuesta numérico, identificando el error y un mensaje de depuración.


2.    Referencia

2.1. Estructuras de datos
Los siguientes son las definiciones de las estructuras de datos a intercambiar entre Salesforce y la web del cliente.

•    Status

2.1.1. Status
Estado de la llamada a un servicio Web; identifica posibles errores en la llamada.

Definición

Nombre    Tipo     Descripción     Obligatorio
code    Integer    Código númerico de respuesta 0 = Ok , 2 = error    Si
message    String      Mensaje de error. OK en caso contrario.    Si



Ejemplo

XML:
   
<Status>
<Status:code>0</Status:code> <Status:message>OK</Status:message>
</ Status>

json
{
“code”: 0,
“message” : ”ok” }

2.2.



Servicios Web

Los siguientes son los servicios definidos para la integración entre Salesforce y la web del cliente.

•    Suscripción a newsletter


2.2.1. Suscripción a newsletter

Creación de cliente potencial en Salesforce

URI: https://xxxxxx.my.salesforce.com/services/apexrest/web2account

Formatos aceptados: JSON

Método http: POST

Cabeceras de autenticación - Authorization: Bearer token POST

Petición

El cuerpo de la petición contiene los siguientes parámetros:

Parámetros


Nombre    Tipo     Descripción     Obligatorio
email     String     Email del cliente    Si
firstName    String     En este caso se envía: null    No
lastName    String     En este caso se envía: null    No
phone    String     En este caso se envía: null    No
newsletter    Boolean    Suscrito a newsletter    Si
discount     Boolean    Flase    Si
country     String     En este caso se envía: null    No
postalCode     String     En este caso se envía: null    No
language     String       Idioma (‘es’, ‘de’, ‘en’, ‘fr’)    si
emailvalidated    boolean    true = email validado, false = email no validado, se enviaría false    si
contactabletype    string       ‘-1’     si


respuesta

el cuerpo de la respuesta contendra los siguientes parámetros:

parámetros

nombre    tipo    descripción
status      status    estado de la petición.


2.2.2. Ejemplo body suscripción newsletter
       
{
"email": "ejemplo@mail.com",
"firstName": null,
"lastName": null,
"phone": null,
"newsletter": true,
"discount": false,
"country": null,
"postalCode": null,
"language": "ES",
"emailValidated": false,
"contactableType": "-1"
}

Categoría Programación y Tecnología
Subcategoría Programación Web
¿Cuál es el alcance del proyecto? Bug o cambio pequeño
¿Es un proyecto o una posición? Un proyecto
Actualmente tengo Tengo las especificaciones
Disponibilidad requerida Según se necesite
Integraciones de API Otros (Otras APIs)
Roles necesarios Programador, Otro
Otros roles necesarios Wordpress, Contact Form 7, SalesForce

Plazo de Entrega: 12 Noviembre, 2019

Habilidades necesarias