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"
}
Plazo de Entrega: 12 Noviembre, 2019