久久久久av_欧美日韩一区二区在线_国产精品三区四区_日韩中字在线

Discuz! 官方交流社區

標題: Discuz! 3.5 的 UCenter 接口返回 Access denied for operation changed [打印本頁]

作者: 秋天的訴說    時間: 2023-3-26 23:14
標題: Discuz! 3.5 的 UCenter 接口返回 Access denied for operation changed
3.4 的接口可以正常返回,3.5 同樣的代碼就出現了 Access denied for operation changed。


另外有沒有比較清晰的 UCenter 的接口文檔,我是 Java 開發者,用的是別人比較老的調用接口的代碼,很不好調試。

感謝知道的朋友們的回復!

作者: 秋天的訴說    時間: 2023-3-26 23:17
補充:我找到了接口文檔的地址:https://help.v2my.com/UCenter/api/api_index.htm。

但是我是 Java 開發者,我想知道調用什么接口,什么請求方式,傳遞哪些參數,哪些參數應該怎么編碼,PHP 的示例代碼看不懂。哪里有比較清晰的文檔,告訴我調用的規則。謝謝知道的朋友!


作者: 專家    時間: 2023-3-27 00:40
如果你手頭已經有能用的老代碼那就好辦了,否則光是接口參數的加密就夠你頭疼一陣子的。
這接口大概是這么個編碼流程:
1. 先對參數做url編碼,大致就是變成a=b&c=d這種格式
2. (出于安全考慮新增的,x3.4可能沒有)參數后面追加&m=module&a=action&appid=UC_APPID,比方說登錄環節,module就是user action就是login
3. 后面再追加&agent=UA的MD5,&time=時間戳
4. 用Discuz自家的authcode加密算法(通常是一個函數實現,如果你原本有代碼這里應該有這個東西)對上述字符串加密,密鑰為UC_KEY,加密完了用urlencode編碼
5. 將加密以后的東西嵌入這串參數里面 m=module&a=action&inajax=2&release=UC_CLIENT_RELEASE&input=上一步的內容&appid=UC_APPID
6. 上述參數即為最終POST到接口的東西,記得Content-Type: application/x-www-form-urlencoded。因為已經encode過了所以直接發就行了。

你對照著這套邏輯看看你已有的原版代碼,看懂以后把缺少的部分補上應該就能用了。

作者: 秋天的訴說    時間: 2023-3-27 09:54
專家 發表于 2023-3-27 00:40
如果你手頭已經有能用的老代碼那就好辦了,否則光是接口參數的加密就夠你頭疼一陣子的。
這接口大概是這么 ...

感謝專家這么快速的回復,我試一下。如果可以的話,我會給您的回復「設置為最佳答案」。如果還有問題,我會在這里描述清楚,再次表示感謝。
作者: 秋天的訴說    時間: 2023-3-27 10:16
秋天的訴說 發表于 2023-3-27 09:54
感謝專家這么快速的回復,我試一下。如果可以的話,我會給您的回復「設置為最佳答案」。如果還有問題,我 ...

「如果可以」的意思是「如果按照您的方法最后調通(可以)」。我本來想點「設置為最佳答案」的,點了以后彈窗提示我,需要驗證成功以后再點。
作者: 秋天的訴說    時間: 2023-3-29 14:41
只需要按照「專家」說的第 2 點就可以了。
作者: D布丁233    時間: 2023-6-23 09:18
專家 發表于 2023-3-27 00:40
如果你手頭已經有能用的老代碼那就好辦了,否則光是接口參數的加密就夠你頭疼一陣子的。
這接口大概是這么 ...

請問加密參數應該怎么操作?已經讓我頭疼一整子了
作者: 專家    時間: 2023-6-23 22:08
D布丁233 發表于 2023-6-23 09:18
請問加密參數應該怎么操作?已經讓我頭疼一整子了

如果你用的是php,那么直接在Discuz里尋找authcode這個函數使用即可。
但如果你用的是別的語言,那么你必須用對應的語言重新實現一遍這個函數。
當然了,由于Discuz的運用非常廣泛,這個重新實現的事情有較大概率有人曾經做過,如果你能找到,那就不用自己做了。
作者: longer    時間: 2023-6-27 10:54
秋天的訴說 發表于 2023-3-29 14:41
只需要按照「專家」說的第 2 點就可以了。

您好,請問一下是如何解決的?我在3.5版本也遇到同樣的問題。期待您的回答,謝謝
作者: weekdaysun    時間: 2025-5-12 15:52
  1. public String ucApiPost(String module, String action, Map<String, Object> arg) {
  2.         StringBuffer s = new StringBuffer();
  3.         String sep = "";
  4.         //foreach(arg as k => v) {
  5.         for (String k : arg.keySet()) {
  6.             //k = (k);
  7.             Object v = arg.get(k);
  8.             k = urlencode(k);

  9.             if (v.getClass().isAssignableFrom(Map.class)) {
  10.                 String s2 = "";
  11.                 String sep2 = "";
  12.                 //foreach(v as k2 => v2) {
  13.                 for (String k2 : ((Map<String, Object>) v).keySet()) {
  14.                     Object v2 = ((Map<String, Object>) v).get(k2);
  15.                     k2 = urlencode(k2);
  16.                     s2 += sep2 + "{" + k + "}[" + k2 + "]=" + urlencode(ucStripslashes(String.valueOf(v2)));
  17.                     sep2 = "&";
  18.                 }
  19.                 s.append(sep).append(s2);
  20.             } else {
  21.                 s.append(sep).append(k).append("=").append(urlencode(ucStripslashes(String.valueOf(v))));
  22.             }
  23.             sep = "&";
  24.         }
  25.         String postdata = ucApiRequestdata(module, action, s.toString(), "");
  26.         return ucFopen2(UC_API + "/index.php", 500000, postdata, "", true, UC_IP, 20, true);
  27. //        return ucFopen2(UC_API, 500000, postdata, "", true, UC_IP, 20, true);
  28.     }


  29.     /**
  30.      * 構造發送給用戶中心的請求數據
  31.      *
  32.      * @param module 請求的模塊
  33.      * @param action 請求的動作
  34.      * @param arg    參數(會加密的方式傳送)
  35.      * @param extra  附加參數(傳送時不加密)
  36.      * @return string
  37.      */
  38.     protected String ucApiRequestdata(String module, String action, String arg, String extra) {
  39.         String input = ucApiInput(arg, module, action);
  40.         String post = "m=" + module + "&a=" + action + "&inajax=2&release=" + UC_CLIENT_RELEASE + "&input=" + input + "&appid=" + UC_APPID + extra;
  41.         return post;
  42.     }

  43.     protected String ucApiUrl(String module, String action, String arg, String extra) {
  44.         String url = UC_API + "/index.php?" + ucApiRequestdata(module, action, arg, extra);
  45.         return url;
  46.     }

  47.     public String ucApiInput(String data, String module, String action) {
  48.         data = data + "&m="+ module + "&a=" + action + "&appid=" + UC_APPID;
  49.         //String s = data;
  50.         //String s = urlencode(uc_authcode(data+"&agent="+md5(_SERVER["HTTP_USER_AGENT"])+"&time="+time(), "ENCODE", UC_KEY));
  51.         String s = urlencode(ucAuthcode(data + "&agent=" + md5(HTTP_USER_AGENT) + "&time=" + time(), "ENCODE", UC_KEY));
  52.         //String s = urlencode(ucAuthcode(data + "&agent=" + md5("") + "&time=" + time(), "ENCODE", UC_KEY));
  53.         return s;
  54.     }
復制代碼

我的版本是3.5的discuz,ucenter2.0,也不報這個錯,client代碼中,也都按照“專家”的步驟實現了。搞不懂哪里的問題了
作者: weekdaysun    時間: 2025-5-12 15:54
  1. public String ucApiPost(String module, String action, Map<String, Object> arg) {
  2.         StringBuffer s = new StringBuffer();
  3.         String sep = "";
  4.         //foreach(arg as k => v) {
  5.         for (String k : arg.keySet()) {
  6.             //k = (k);
  7.             Object v = arg.get(k);
  8.             k = urlencode(k);

  9.             if (v.getClass().isAssignableFrom(Map.class)) {
  10.                 String s2 = "";
  11.                 String sep2 = "";
  12.                 //foreach(v as k2 => v2) {
  13.                 for (String k2 : ((Map<String, Object>) v).keySet()) {
  14.                     Object v2 = ((Map<String, Object>) v).get(k2);
  15.                     k2 = urlencode(k2);
  16.                     s2 += sep2 + "{" + k + "}[" + k2 + "]=" + urlencode(ucStripslashes(String.valueOf(v2)));
  17.                     sep2 = "&";
  18.                 }
  19.                 s.append(sep).append(s2);
  20.             } else {
  21.                 s.append(sep).append(k).append("=").append(urlencode(ucStripslashes(String.valueOf(v))));
  22.             }
  23.             sep = "&";
  24.         }
  25.         String postdata = ucApiRequestdata(module, action, s.toString(), "");
  26.         return ucFopen2(UC_API + "/index.php", 500000, postdata, "", true, UC_IP, 20, true);
  27. //        return ucFopen2(UC_API, 500000, postdata, "", true, UC_IP, 20, true);
  28.     }


  29.     /**
  30.      * 構造發送給用戶中心的請求數據
  31.      *
  32.      * @param module 請求的模塊
  33.      * @param action 請求的動作
  34.      * @param arg    參數(會加密的方式傳送)
  35.      * @param extra  附加參數(傳送時不加密)
  36.      * @return string
  37.      */
  38.     protected String ucApiRequestdata(String module, String action, String arg, String extra) {
  39.         String input = ucApiInput(arg, module, action);
  40.         String post = "m=" + module + "&a=" + action + "&inajax=2&release=" + UC_CLIENT_RELEASE + "&input=" + input + "&appid=" + UC_APPID + extra;
  41.         return post;
  42.     }

  43.     protected String ucApiUrl(String module, String action, String arg, String extra) {
  44.         String url = UC_API + "/index.php?" + ucApiRequestdata(module, action, arg, extra);
  45.         return url;
  46.     }

  47.     public String ucApiInput(String data, String module, String action) {
  48.         data = data + "&m="+ module + "&a=" + action + "&appid=" + UC_APPID;
  49.         //String s = data;
  50.         //String s = urlencode(uc_authcode(data+"&agent="+md5(_SERVER["HTTP_USER_AGENT"])+"&time="+time(), "ENCODE", UC_KEY));
  51.         String s = urlencode(ucAuthcode(data + "&agent=" + md5(HTTP_USER_AGENT) + "&time=" + time(), "ENCODE", UC_KEY));
  52.         //String s = urlencode(ucAuthcode(data + "&agent=" + md5("") + "&time=" + time(), "ENCODE", UC_KEY));
  53.         return s;
  54.     }
復制代碼

我的版本是3.5的discuz,ucenter2.0,也報"Access denied for agent changed"這個錯  ,client代碼中,也都按照“專家”的步驟實現了。搞不懂哪里的問題了
作者: weekdaysun    時間: 2025-5-12 15:55
weekdaysun 發表于 2025-5-12 15:52
我的版本是3.5的discuz,ucenter2.0,也不報這個錯,client代碼中,也都按照“專家”的步驟實現了。搞不懂哪 ...

也報Access denied for agent changed的錯誤
作者: weekdaysun    時間: 2025-5-12 16:01
  1. @Override
  2.     public String ucApiPost(String module, String action, Map<String, Object> arg) {
  3.         StringBuffer s = new StringBuffer();
  4.         String sep = "";
  5.         //foreach(arg as k => v) {
  6.         for (String k : arg.keySet()) {
  7.             //k = (k);
  8.             Object v = arg.get(k);
  9.             k = urlencode(k);

  10.             if (v.getClass().isAssignableFrom(Map.class)) {
  11.                 String s2 = "";
  12.                 String sep2 = "";
  13.                 //foreach(v as k2 => v2) {
  14.                 for (String k2 : ((Map<String, Object>) v).keySet()) {
  15.                     Object v2 = ((Map<String, Object>) v).get(k2);
  16.                     k2 = urlencode(k2);
  17.                     s2 += sep2 + "{" + k + "}[" + k2 + "]=" + urlencode(ucStripslashes(String.valueOf(v2)));
  18.                     sep2 = "&";
  19.                 }
  20.                 s.append(sep).append(s2);
  21.             } else {
  22.                 s.append(sep).append(k).append("=").append(urlencode(ucStripslashes(String.valueOf(v))));
  23.             }
  24.             sep = "&";
  25.         }
  26.         String postdata = ucApiRequestdata(module, action, s.toString(), "");
  27.         return ucFopen2(UC_API + "/index.php", 500000, postdata, "", true, UC_IP, 20, true);
  28. //        return ucFopen2(UC_API, 500000, postdata, "", true, UC_IP, 20, true);
  29.     }


  30.     /**
  31.      * 構造發送給用戶中心的請求數據
  32.      *
  33.      * @param module 請求的模塊
  34.      * @param action 請求的動作
  35.      * @param arg    參數(會加密的方式傳送)
  36.      * @param extra  附加參數(傳送時不加密)
  37.      * @return string
  38.      */
  39.     protected String ucApiRequestdata(String module, String action, String arg, String extra) {
  40.         String input = ucApiInput(arg, module, action);
  41.         String post = "m=" + module + "&a=" + action + "&inajax=2&release=" + UC_CLIENT_RELEASE + "&input=" + input + "&appid=" + UC_APPID + extra;
  42.         return post;
  43.     }

  44.     protected String ucApiUrl(String module, String action, String arg, String extra) {
  45.         String url = UC_API + "/index.php?" + ucApiRequestdata(module, action, arg, extra);
  46.         return url;
  47.     }

  48.     public String ucApiInput(String data, String module, String action) {
  49.         data = data + "&m="+ module + "&a=" + action + "&appid=" + UC_APPID;
  50.         //String s = data;
  51.         //String s = urlencode(uc_authcode(data+"&agent="+md5(_SERVER["HTTP_USER_AGENT"])+"&time="+time(), "ENCODE", UC_KEY));
  52.         String s = urlencode(ucAuthcode(data + "&agent=" + md5(HTTP_USER_AGENT) + "&time=" + time(), "ENCODE", UC_KEY));
  53.         //String s = urlencode(ucAuthcode(data + "&agent=" + md5("") + "&time=" + time(), "ENCODE", UC_KEY));
  54.         return s;
  55.     }
復制代碼

腦殼疼,目前按鈕“專家”的步驟實現了java語言的client,但依然返回Access denied for agent changed;版本discuz3.5,ucenter2.0(之前1.7的也返回相同的錯);在ucenter中和java應用通信是成功的。
希望大神們能夠回復一下
作者: weekdaysun    時間: 2025-5-12 16:03
weekdaysun 發表于 2025-5-12 16:01
腦殼疼,目前按鈕“專家”的步驟實現了java語言的client,但依然返回Access denied for agent changed;版 ...
  1. public String ucAuthcode(String string, String operation, String key, int expiry) {

  2.         int ckey_length = 4;    //note 隨機密鑰長度 取值 0-32;
  3.         //note 加入隨機密鑰,可以令密文無任何規律,即便是原文和密鑰完全相同,加密結果也會每次不同,增大破解難度。
  4.         //note 取值越大,密文變動規律越大,密文變化 = 16 的 ckey_length 次方
  5.         //note 當此值為 0 時,則不產生隨機密鑰

  6.         key = md5(key != null ? key : UC_KEY);
  7.         String keya = md5(substr(key, 0, 16));
  8.         String keyb = md5(substr(key, 16, 16));
  9.         String keyc = ckey_length > 0 ? (operation.equals("DECODE") ? substr(string, 0, ckey_length) : substr(md5(microTime()), -ckey_length)) : "";

  10.         String cryptkey = keya + md5(keya + keyc);
  11.         int key_length = cryptkey.length();

  12.         string = operation.equals("DECODE") ? base64Decode(substr(string, ckey_length)) : sprintf("%010d", expiry > 0 ? expiry + time() : 0) + substr(md5(string + keyb), 0, 16) + string;
  13.         int string_length = string.length();

  14.         StringBuffer result1 = new StringBuffer();

  15.         int[] box = new int[256];
  16.         for (int i = 0; i < 256; i++) {
  17.             box[i] = i;
  18.         }

  19.         int[] rndkey = new int[256];
  20.         for (int i = 0; i <= 255; i++) {
  21.             rndkey[i] = (int) cryptkey.charAt(i % key_length);
  22.         }

  23.         int j = 0;
  24.         for (int i = 0; i < 256; i++) {
  25.             j = (j + box[i] + rndkey[i]) % 256;
  26.             int tmp = box[i];
  27.             box[i] = box[j];
  28.             box[j] = tmp;
  29.         }

  30.         j = 0;
  31.         int a = 0;
  32.         for (int i = 0; i < string_length; i++) {
  33.             a = (a + 1) % 256;
  34.             j = (j + box[a]) % 256;
  35.             int tmp = box[a];
  36.             box[a] = box[j];
  37.             box[j] = tmp;

  38.             result1.append((char) (((int) string.charAt(i)) ^ (box[(box[a] + box[j]) % 256])));

  39.         }

  40.         if (operation.equals("DECODE")) {
  41.             String result = result1.toString();
  42.             try {
  43.                 result = new String(result.getBytes(StandardCharsets.ISO_8859_1), StandardCharsets.UTF_8);
  44.             } catch (Exception e) {
  45.                 result = result1.substring(0, result1.length());
  46.             }
  47.             if ((Integer.parseInt(substr(result, 0, 10)) == 0 || Long.parseLong(substr(result, 0, 10)) - time() > 0) && substr(result, 10, 16).equals(substr(md5(substr(result, 26) + keyb), 0, 16))) {
  48.                 return substr(result, 26);
  49.             } else {
  50.                 return "";
  51.             }
  52.         } else {
  53.             return keyc + base64Encode(result1.toString()).replaceAll("=", "");
  54.         }
  55.     }
復制代碼

加密算法比對php版本的,邏輯也一致




歡迎光臨 Discuz! 官方交流社區 (http://www.9999xn.com/) Powered by Discuz! X5.0
久久久久av_欧美日韩一区二区在线_国产精品三区四区_日韩中字在线
欧美成人dvd在线视频| 首页国产丝袜综合| 极品少妇xxxx精品少妇| 亚洲综合99| 亚洲自拍偷拍图区| 亚洲一区二区三区午夜| 亚洲综合在线观看视频| 亚洲三级免费| 亚洲少妇屁股交4| 国产欧美午夜| 午夜精品影院在线观看| 一本色道久久加勒比精品| 日韩高清欧美激情| 欧美性一区二区| 精品亚洲aⅴ乱码一区二区三区| 在线视频观看一区| 精品一二三四在线| 欧美一区二区三区性视频| 国产成人av电影| 久久影院视频免费| 国产精品v欧美精品v日本精品动漫 | 永久久久久久| 一区二区三区欧美视频| 久久久精彩视频| 国产福利精品一区二区| 欧美日韩成人综合| 成人性生交大片免费看在线播放| 337p粉嫩大胆噜噜噜噜噜91av | 播五月开心婷婷综合| 久久久久久久综合日本| 欧美涩涩网站| 亚洲一区二区三区四区五区黄| 久久午夜av| 国产伦理精品不卡| 亚洲国产合集| 午夜精品一区二区三区免费视频 | 欧美一区二区三区四区五区| 成人免费的视频| 国产精品女同互慰在线看| 中文精品视频| 久久久久99精品一区| 日韩视频一区| 久久精品国产久精国产| 精品久久久久久久久久久久久久久久久 | 黑人巨大精品欧美一区二区小视频 | 国产精品国产馆在线真实露脸| 国产精品久久久久久久久久妞妞| 久久精品av麻豆的观看方式| 亚洲精品一区二区三区香蕉| 亚洲午夜视频| 日韩成人午夜精品| 欧美成人女星排行榜| 亚洲香蕉网站| 美脚の诱脚舐め脚责91| 久久久久久免费网| 午夜在线播放视频欧美| 国产一区二区影院| 中文字幕欧美激情| 久久网站免费| eeuss鲁一区二区三区| 亚洲色图视频免费播放| 欧美视频在线播放| 欧美日本一区二区高清播放视频| 亚洲二区在线观看| 欧美v亚洲v综合ⅴ国产v| 亚洲精品婷婷| 国产在线精品一区二区三区不卡 | 红桃视频国产精品| 秋霞国产午夜精品免费视频| 久久综合久久综合九色| 国产精品社区| 国产成都精品91一区二区三| 亚洲免费电影在线| 欧美一区二区三区爱爱| 国产欧美日韩视频一区二区三区| 国产一区二区导航在线播放| 亚洲欧美精品午睡沙发| 欧美二区乱c少妇| 亚洲免费精品| 成人美女视频在线看| 亚洲国产人成综合网站| 精品国产乱码久久久久久浪潮| 久久av最新网址| 99re这里都是精品| 日本一区中文字幕 | 亚洲男人的天堂一区二区| 欧美一区二视频| 亚洲一区激情| 91免费在线播放| 看片网站欧美日韩| 亚洲视频一区二区在线| 91精品免费在线观看| 国产精品一区二区三区免费观看| 成人黄色av网站在线| 日本亚洲最大的色成网站www| 中文天堂在线一区| 欧美美女一区二区在线观看| 一本久道久久综合狠狠爱| 成人精品视频一区二区三区 | www.日韩精品| 免费在线观看视频一区| 亚洲欧洲性图库| 日韩三级中文字幕| 老妇喷水一区二区三区| 好看不卡的中文字幕| 国产aⅴ综合色| 日韩中文字幕av电影| 18欧美乱大交hd1984| 欧美成人综合网站| 色欧美片视频在线观看在线视频| 一区在线观看| 99精品国产视频| 韩国欧美国产1区| 婷婷成人激情在线网| 亚洲特级片在线| 久久久久国产免费免费| 3d动漫精品啪啪一区二区竹菊| 美女精品国产| 亚洲高清在线观看一区| 97精品视频在线观看自产线路二| 九色综合国产一区二区三区| 亚洲成人精品影院| 亚洲人成精品久久久久久| 精品国偷自产国产一区| 日本久久电影网| 亚洲一区成人| 国内精品国语自产拍在线观看| 成人精品视频网站| 国产乱一区二区| 久久国产夜色精品鲁鲁99| 午夜av电影一区| 亚洲最新视频在线观看| 国产精品成人免费在线| 欧美经典一区二区| 久久综合久久鬼色中文字| 日韩一卡二卡三卡四卡| 欧美日韩免费观看一区二区三区 | 91在线视频免费观看| 国产一区二区在线影院| 毛片av一区二区三区| 亚洲成人av电影| 夜夜精品视频一区二区 | 成人亚洲一区二区一| 国产一本一道久久香蕉| 久久99久久久欧美国产| 免费成人在线影院| 日韩福利视频网| 石原莉奈一区二区三区在线观看| 亚洲综合视频在线观看| 亚洲美女屁股眼交| 亚洲人成伊人成综合网小说| 中文字幕中文在线不卡住| 国产精品美女久久久久高潮| 中文欧美字幕免费| 欧美激情在线观看视频免费| 国产欧美一区二区三区网站 | 精品不卡一区| 黄色综合网站| 亚洲国产专区校园欧美| 精品96久久久久久中文字幕无| 亚洲手机在线| 一区视频在线看| 99精品国产福利在线观看免费| 亚洲欧洲日本一区二区三区| 伊甸园精品99久久久久久| 一区在线视频| 国产视频一区三区| 亚洲一区bb| 91久久一区二区| 欧美丝袜丝交足nylons图片| 欧美三级韩国三级日本三斤| 欧美在线一区二区三区| 欧美精品视频www在线观看| 日韩一区二区在线免费观看| 狠狠色丁香久久婷婷综合丁香| 国产黄色精品视频| 成人爽a毛片一区二区免费| av成人免费在线| 欧美人与禽性xxxxx杂性| 激情综合电影网| 国产精品三上| 色成年激情久久综合| 欧美大香线蕉线伊人久久国产精品| 亚洲欧美综合一区| 亚洲第一区色| 美女日韩在线中文字幕| 91久久久免费一区二区| 555夜色666亚洲国产免| 精品剧情v国产在线观看在线| 国产欧美一区二区精品性色超碰| 国产精品视频免费| 一区二区三区在线观看欧美| 日韩高清电影一区| 国产福利91精品一区| 99re这里只有精品6| 亚洲高清久久| 日本韩国精品一区二区在线观看| 91精品国产一区二区| 国产欧美精品区一区二区三区 | 亚洲天堂2014|