diff --git a/backend/mci-channel-wechat-personal/pom.xml b/backend/mci-channel-wechat-personal/pom.xml
new file mode 100644
index 0000000..ecce9b7
--- /dev/null
+++ b/backend/mci-channel-wechat-personal/pom.xml
@@ -0,0 +1,49 @@
+
+
+ 4.0.0
+
+
+ com.sino
+ sino-mci-parent
+ 0.0.1-SNAPSHOT
+
+
+ mci-channel-wechat-personal
+ mci-channel-wechat-personal
+ Personal WeChat channel adapter
+
+
+
+ com.sino
+ mci-channel-common
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+ com.fasterxml.jackson.core
+ jackson-databind
+
+
+ org.projectlombok
+ lombok
+ true
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
+ com.squareup.okhttp3
+ mockwebserver
+ 4.12.0
+ test
+
+
+
diff --git a/backend/mci-channel-wechat-personal/src/main/java/com/sino/mci/channel/wechat/personal/WechatPersonalAutoConfiguration.java b/backend/mci-channel-wechat-personal/src/main/java/com/sino/mci/channel/wechat/personal/WechatPersonalAutoConfiguration.java
new file mode 100644
index 0000000..f7cc90a
--- /dev/null
+++ b/backend/mci-channel-wechat-personal/src/main/java/com/sino/mci/channel/wechat/personal/WechatPersonalAutoConfiguration.java
@@ -0,0 +1,17 @@
+package com.sino.mci.channel.wechat.personal;
+
+import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
+import org.springframework.boot.context.properties.EnableConfigurationProperties;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+@Configuration
+@EnableConfigurationProperties(WechatPersonalProperties.class)
+public class WechatPersonalAutoConfiguration {
+
+ @Bean
+ @ConditionalOnMissingBean
+ public WechatPersonalChannelAdapter wechatPersonalChannelAdapter(WechatPersonalProperties properties) {
+ return new WechatPersonalChannelAdapter(properties);
+ }
+}
diff --git a/backend/mci-channel-wechat-personal/src/main/java/com/sino/mci/channel/wechat/personal/WechatPersonalChannelAdapter.java b/backend/mci-channel-wechat-personal/src/main/java/com/sino/mci/channel/wechat/personal/WechatPersonalChannelAdapter.java
new file mode 100644
index 0000000..166d1c0
--- /dev/null
+++ b/backend/mci-channel-wechat-personal/src/main/java/com/sino/mci/channel/wechat/personal/WechatPersonalChannelAdapter.java
@@ -0,0 +1,234 @@
+package com.sino.mci.channel.wechat.personal;
+
+import com.sino.mci.channel.common.dto.CallbackPayload;
+import com.sino.mci.channel.common.dto.ChannelInitRequest;
+import com.sino.mci.channel.common.dto.ChannelInitResult;
+import com.sino.mci.channel.common.dto.SendMessageRequest;
+import com.sino.mci.channel.common.dto.SendMessageResult;
+import com.sino.mci.channel.common.model.ChannelType;
+import com.sino.mci.channel.common.spi.ChannelAdapter;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.core.ParameterizedTypeReference;
+import org.springframework.http.MediaType;
+import org.springframework.web.client.RestClient;
+import org.springframework.web.client.RestClientException;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Objects;
+
+@Slf4j
+public class WechatPersonalChannelAdapter implements ChannelAdapter {
+
+ private static final ParameterizedTypeReference