He estado abordando un proyecto similar a este recientemente, así que reflexionaré un poco sobre mi experiencia. Todo se reduce a lo que quieres hacer exactamente. Como ya mencionó Geoffrey Keating, hay una integración que se inicia desde la administración de Intercom que extraerá datos de Stripe. En nuestro caso (Keen IO – Analytics for Developers), lo que necesitábamos no se podía lograr usando esa integración, por un par de razones. La primera es que la integración preempaquetada coloca los datos de Stripe en los objetos de usuario, donde realmente queríamos enriquecer los objetos de “empresa” de Intercom. El segundo es cómo la integración resuelve los usuarios de Intercom y Stripe. Stripe asigna automáticamente a cada cliente una identificación generada que tiene el prefijo de tipo “cus_” (algo así como “cus_foo123”), que no se puede anular. Tenemos nuestros propios identificadores de organización, por lo que los almacenamos como una clave externa en el campo “Descripción” de Stripes. Lo mejor que puedo decir es que la integración existente utiliza el campo “correo electrónico” en cada objeto para hacer la correspondencia. Esto era menos que ideal para nosotros, porque una sola dirección de correo electrónico puede tener acceso a varias organizaciones, por lo que necesitábamos una forma de recuperar un cliente Stripe a través de nuestra clave externa.
Evaluamos algunas herramientas / métodos para lograr esto, a saber, tray.io, Zapier y scripts desarrollados internamente personalizados. Si su caso de uso es bastante simple, es posible que pueda salirse con la suya usando Zapier, pero descubrí que Tray es significativamente más personalizable. Sin embargo, en última instancia, cualquiera de estas herramientas estará a merced de las limitaciones de las API que están conectando. En este caso, la API Stripe no ofrece ninguna forma de recuperar a un cliente por otra cosa que no sea una identificación, y lo mismo para el recurso de las empresas de Intercom. Entonces, al final, fui personalizado, escrito en una combinación de Python y JavaScript. FWIW, esto probablemente aún se puede lograr con tray.io, pero las ineficiencias API subyacentes fueron el factor decisivo. Si tengo proyectos futuros para pegar API’s juntos, definitivamente intentaré tray.io primero.
Una forma en la que encontré la limitación de Stripe fue iniciar una llamada a la API de búsqueda de Stripe usando la clave externa que almacenamos como “company_id” de Intercom, y solo actuamos si obtenemos un único resultado de búsqueda. Aquí hay un fragmento de Python no muy listo para producción:
- ¿Cómo evaluamos la calidad de un diseño de software?
- Noté que muchos ingenieros de software prefieren programar en Linux, pero acceden de forma remota a través de una computadora portátil OS X. ¿Volvemos a la configuración de terminales / mainframes?
- ¿Cómo se pueden reducir los costos de desarrollo de software mediante el uso de comentarios?
- ¿Cuáles son algunos lenguajes / métodos y herramientas de programación modernos utilizados por las nuevas empresas de Internet de hoy?
- ¿Hay buenos libros para preguntas sobre entrevistas de diseño de software y arquitectura?
desde intercom.client import Client
importar httplib
importar json
banda de importación
stripe.api_key = YOUR_STRIPE_SECRET
all_charges = stripe.Charge.list ()
intercom = Client (personal_access_token = ‘YOUR_INTERCOM_TOKEN’)
hdrs = {“Autorización”: “Portador” + stripe_api_key, “Aceptar”: “application / x-www-form-urlencoded”}
para la empresa en intercom.companies.all ():
url = “/ v1 / search? query =” + company.company_id + “& prefix = false”
conn = httplib.HTTPSConnection (“api.stripe.com”)
conn.request (“GET”, url, encabezados = hdrs)
resp = conn.getresponse ()
resp_string = resp.read (). decode (‘utf-8’)
json_obj = json.loads (resp_string)
if json_obj [‘count’] == 1:
stripe_cus_id = json_obj [‘datos’] [0] [‘id’]
más:
#bad state: se encontró un número incorrecto de resultados de búsqueda
# aquí es donde se hace la lógica para enriquecer el objeto de la compañía, buscando all_charges para stripe_cus_id
Notarás que esto se repite en todas las empresas de intercomunicación. Con suerte, esto solo es necesario una vez, y en el futuro podríamos iniciar en un webhook de Intercom cuando aparezca una nueva conversación para mantener todo actualizado. Vale la pena señalar que cualquier implementación aquí debe ejecutarse en otro lugar que no sea el cliente del usuario, ya que se basa en una llamada API de búsqueda bastante costosa (en cuanto al tiempo), no desea retrasar la carga de la página del usuario para eso.
Además, todavía no hay forma de evitar recuperar todos sus cargos de Stripe y buscarlos / clasificarlos usted mismo. Esa es otra limitación de su API, por lo que no importa la herramienta o el método que use, solo tendrá que construir en torno a ella.
Espero que ayude. Al final, creé una solución diferente más personalizada para nuestras necesidades, sin embargo, como mencioné, pasé unos días construyendo esto recientemente, así que espero que sea útil para otra persona. Esta ya es una respuesta bastante larga, pero si tiene alguna pregunta sobre lo que terminé construyendo, me encantaría conversar al respecto.