lib/wechat/requester/work.ex

defmodule WeChat.Requester.Work do
  @moduledoc """
  默认的请求客户端(企业微信)

  ```
  use Tesla
  adapter: Finch
  BaseUrl: "https://qyapi.weixin.qq.com"
  ```
  """
  use Tesla, only: [:get, :post]

  if Mix.env() == :test do
    adapter Tesla.Mock
  else
    adapter Tesla.Adapter.Finch, name: WeChat.Finch, pool_timeout: 5_000, receive_timeout: 5_000
    plug Tesla.Middleware.BaseUrl, "https://qyapi.weixin.qq.com"
  end

  plug Tesla.Middleware.Retry,
    delay: 500,
    max_retries: 3,
    max_delay: 2_000,
    should_retry: fn
      {:ok, %{status: status}} when status in [400, 500] -> true
      {:ok, _} -> false
      {:error, _} -> true
    end

  plug Tesla.Middleware.JSON, decode_content_types: ["text/plain"]
  plug Tesla.Middleware.Logger
end