Estoy usando la API de TD Ameritrade y estoy tratando de implementar un flujo de trabajo automatizado para el proceso de actualización del token de acceso. Elegí usar el paquete npm "titiritero" para iniciar sesión mediante programación en el sitio web para desarrolladores de TD Ameritrade y recuperar mi código (una cadena larga que debe decodificarse como URL necesaria para el proceso de actualización del token de acceso) desde un URI al que se redirige el bot después de iniciar sesión y aceptar los términos de más permisos para acceder a mi cuenta comercial.
Todo funcionó bien por mi parte, pero cuando implementé mi código en heroku, la redirección a la URI no ocurre y solo puedo obtener la URL del sitio en el que estaba antes de la redirección a la URI.
Aquí está mi código:
const getTdAmeritradeCode = async () => { const browser = await puppeteer.launch({ headless: true, args: ['--no-sandbox','--disable-setuid-sandbox'] }); const page = await browser.newPage(); await page.goto(process.env.REFRESH_TOKEN_REFRESH_LINK); await page.type("#username0", process.env.TD_AMERITRADE_USERNAME); await page.type("#password1", process.env.TD_AMERITRADE_PASSWORD); const [response0] = await Promise.all([ page.waitForNavigation(), page.click("#accept"), ]); const [response1] = await Promise.all([ page.waitForNavigation(), page.click("#accept"), ]); let tdAmeritradeCode = decode(await page.url().slice(50)); // 50 is the number of characters in the url before the code await browser.close(); return tdAmeritradeCode; } Ese es el método que he encontrado en la documentación del titiritero, pero parece que no funciona. Como dije antes, el código funciona según lo previsto en mi máquina, pero cuando se implementa en heroku, el código falla en la promesa de response1 1 y no se redirige a la URI.
El problema fue que mi aplicación TD Ameritrade fue redirigida a la URL de mi aplicación Heroku. Creo que se debe al hecho de que las aplicaciones de Heroku no están destinadas a realizar una solicitud GET a sí mismas. Terminé cambiando el URI de redireccionamiento en mis aplicaciones TD Ameritrade y Heroku y pude obtener el código sin problema.