Wechat API wrapper in Elixir.
Warning: The project is under active development, don't use in production env.
def deps do
[{:wechat, "~> 0.3.0"}]
end
-
Add config in
config.exs
config :wechat, appid: "wechat app id", secret: "wechat app secret", token: "wechat token", encoding_aes_key: "32bits key" # 只有"兼容模式"和"安全模式"才需要配置这个值
-
access_token
iex> Wechat.access_token "Bgw6_cMvFrE3hY3J8U6oglhvlzHhMpAQma0Wjam4XsLx8F6XP4pfZzsezBdpfth2BNAdUK6wA23S7D3fSePt7meG9a1gf9LhEmXjxGelnTjJLaIQMYumrCHE_9gcFVXaHIHcAGACDC"
-
user
iex> Wechat.User.get %{count: 4, data: %{openid: ["oi00OuFrmNEC-QMa0Kikycq6A7ys", "oi00OuKAhA8bm5okpaIDs7WmUZr4", "oi00OuOdjK0TicVUmovudbSP5Zq4", "oi00OuBgG2mko_pOukCy00EYCwo4"]}, next_openid: "oi00OuBgG2mko_pOukCy00EYCwo4", total: 4} iex> Wechat.User.info("oi00OuKAhA8bm5okpaIDs7WmUZr4") %{city: "宝山", country: "中国", groupid: 0, headimgurl: "http://wx.qlogo.cn/mmopen/7raJSSs9gLVJibia6sAXRvr8jajXfQFWiagrLwrRIZjMHCEXOxYf6nflxcpl4WkT7gz8Sa4tO32avnI0dlNLn24yA/0", language: "zh_CN", nickname: "小爆炸的爸爸", openid: "oi00OuKAhA8bm5okpaIDs7WmUZr4", province: "上海", remark: "", sex: 1, subscribe: 1, subscribe_time: 1449812483, tagid_list: [], unionid: "o2oUsuOUzgNL-JSLtIp8b3FzkI-M"}
-
media
iex> file = Wechat.Media.download("GuSq91L0FXQFOIFtKwX2i5UPXH9QKnnu63_z4JHZwIw3TMIn1C-xm8hX3nPWCA") iex> File.write!('/tmp/file', file)
-
router.ex
defmodule MyApp.Router do pipeline :api do plug :accepts, ["json"] end scope "/wechat", MyApp do pipe_through :api # validate wechat server config get "/", WechatController, :index # receive wechat push message post "/", WechatController, :create end end
-
wechat_controller.ex
defmodule MyApp.WechatController do use MyApp.Web, :controller plug Wechat.Plugs.RequestValidator plug Wechat.Plugs.MessageParser when action in [:create] def index(conn, %{"echostr" => echostr}) do text conn, echostr end def create(conn, _params) do msg = conn.body_params reply = build_text_reply(msg, msg.content) render conn, "text.xml", reply: reply end defp build_text_reply(%{"ToUserName" => to, "FromUserName" => from}, content) do %{from: to, to: from, content: content} end end
-
text.xml.eex
<xml> <MsgType><![CDATA[text]]></MsgType> <Content><![CDATA[<%= @reply.content %>]]></Content> <ToUserName><![CDATA[<%= @reply.to %>]]></ToUserName> <FromUserName><![CDATA[<%= @reply.from %>]]></FromUserName> <CreateTime><%= DateTime.to_unix(DateTime.utc_now) %></CreateTime> </xml>