en el código de ejemplo de paypal que puedes descargar de su documentación oficial podrás ver que se utiliza el objeto window para construir la instancia de paypal.Buttons() globalmente así: window.paypal.Buttons(...).
Lo anterior no lo veo en tu código y es necesario para mantener el contexto de ejecución de Buttons dado que al terminar el usuario de hacer su flujo de aprobación el flujo retorna a buscar la función onApprove() donde haces la captura de la orden, con lo que la transacción queda finalizada o le das manejo a los errores.
Ahora, no sé qué es todo lo que tienes dentro de onApprove, pero ahí debería estar el llamado a la ruta /api/orders/${data.orderID}/capture.
Saludos y suerte con tu implementación.