#ifndef SERVICELOGIC_INL #define SERVICELOGIC_INL #include "BoostLog.h" #include "ServiceLogic.h" #include "WeChatContext/WeChatContext.h" #include #include #include #include #include #include #include namespace ServiceLogic { template static void onWechat(SharedStatePtr state, const StringRequest &request, Send &&send) { using namespace boost::beast; boost::urls::url url(request.target()); auto context = Amass::Singleton::instance(); http::response response; if (request.count("Content-Type") > 0 && request.at("Content-Type") == "text/xml") { response.body() = context->reply(request.body()); } else { auto query = url.params(); if (auto iterator = query.find("echostr"); iterator != query.end()) { response.body() = (*iterator)->value; } } boost::beast::error_code ec; response.set(http::field::server, BOOST_BEAST_VERSION_STRING); response.set(http::field::content_type, "text/xml;charset=UTF-8"); response.keep_alive(request.keep_alive()); response.prepare_payload(); return send(std::move(response)); } } // namespace ServiceLogic #endif // SERVICELOGIC_INL