diff --git a/README.md b/README.md
index 08eeebabca7eb56fe1093d9fc530d7ce3fd546cd..4c24eca2210c64b5bf678dd3b5aa5b12ac886e63 100644
--- a/README.md
+++ b/README.md
@@ -10,6 +10,10 @@
 
 https://tm.recolic.net/
 
+## WARNING
+
+**Update At 2019-04-23: 自动签到API发生了修改,请务必更新你的脚本,否则你可能失去生命。**
+
 ## Hard PreRequirements
 
 Non-Windows OS. curl. bash. fish. awk. grep. One mp3 player available on command line.
diff --git a/impl/daemon-signin.fish b/impl/daemon-signin.fish
index ce1b7ef206afa27d1609a39799aa8e8a69632463..2c00780dcc80f31c1075183336ecdb83e53f4ca7 100755
--- a/impl/daemon-signin.fish
+++ b/impl/daemon-signin.fish
@@ -41,11 +41,18 @@ function do_signin
     end
     echo "sleep for $_autosign_delay seconds..."
     sleep $_autosign_delay
-    set _courseid (curl "$_url" -v 2>&1 | grep '^< Location: ' | sed 's/^.*course_id=//')
-    set _wx_csrf (grep 'Set-Cookie' $cookiefl | sed 's/^.*wx_csrf_cookie=//' | sed 's/;.*$//')
-    curl "https://www.teachermate.com.cn/wechat-api/v1/class-attendance/student-sign-in" --data "openid=$_openid&course_id=$_courseid&lon=$_EastLongitude&lat=$_NorthLatitude&wx_csrf_name=$_wx_csrf" > $cookiefl
+    # set _courseid (curl "$_url" -v 2>&1 | grep '^< Location: ' | sed 's/^.*course_id=//')
+    set _courseid (cat "$tmpfl" | grep 'id="course-id' | sed 's/^.*value="//g' | sed 's/" .*$//g')
+    set _signid (cat "$tmpfl" | grep 'id="sign-id' | sed 's/^.*value="//g' | sed 's/" .*$//g')
+    # set _wx_csrf (grep 'Set-Cookie' $cookiefl | sed 's/^.*wx_csrf_cookie=//' | sed 's/;.*$//')
+    set _wx_csrf (cat "$tmpfl" | grep 'id="token-hash' | sed 's/^.*value="//g' | sed 's/" .*$//g')
+    # recolic: they changed `www.teachermate.com.cn` to `v18.teachermate.com.cn` but doesn't provide new certificate... I added -k here. (which indicates that their client (wechat and dingtalk) doesn't check certificate at all)
+    curl -k "https://v18.teachermate.com.cn/wechat-api/v1/class-attendance/student-sign-in" --data "openid=$_openid&courseId=$_courseid&lon=$_EastLongitude&lat=$_NorthLatitude&signId=$_signid&wx_csrf_name=$_wx_csrf" > $cookiefl
     grep -F 'repeat sign in' $cookiefl; and set signed_in true; and return
-    grep -F '":["OK",' $cookiefl; and set signed_in true; and on_signin_success; or on_signin_fail
+    grep -F 'signRank' $cookiefl; and set signed_in true; and on_signin_success; and return
+    # Fail
+    cat $cookiefl
+    on_signin_fail
 end
 
 while true