README.md

# PlugWechat

很不幸,微信公众号的消息体是 [text/xml](https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140453) 格式,PhoenixFramework [默认并不解析 xml](https://hexdocs.pm/plug/Plug.Parsers.html#module-built-in-parsers),也因此我们需要引入一个 xml 解析器。

另外,我们还需要验证消息[来自于微信](https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421135319)。

这两件事,都可以借助 Plug 完成,这便是 `PlugWechat` 的作用。

## 安装

在 `mix.exs` 文件中添加 `plug_wechat` 依赖:

```elixir
def deps do
  [
    {:plug_wechat, "~> 0.1.0"}
  ]
end
```

在控制器文件中调用 `PlugWechat.Ensure` 确保消息来源:

```elixir
plug PlugWechat.Ensure, [token: "wechat token here"] when action in [:setup]
def setup(_, ) do
end
```

此外,还需要在 `endpoint.ex` 文件中增加解析器如下:

```elixir
plug Plug.Parsers,
    parsers: [:urlencoded, :multipart, :json, PlugWechat.Parsers.WECHAT],
```

这样,微信的 xml 消息体就会被解析为 map。

## 文档

[https://hexdocs.pm/plug_wechat](https://hexdocs.pm/plug_wechat)。