久久久久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://m.9999xn.com/) Powered by Discuz! X5.0
久久久久av_欧美日韩一区二区在线_国产精品三区四区_日韩中字在线
国产高清不卡二三区| 亚洲色欲色欲www| 在线一区欧美| 黄色国产精品一区二区三区| 99精品欧美一区| 国产精品一级在线| 国产成人欧美日韩在线电影| 国产一区不卡视频| 精品一区二区三区欧美| 久久一区二区三区四区| 日韩精品一区在线观看| 精品国产91洋老外米糕| 国产网站一区二区三区| 国产欧美精品国产国产专区 | 日韩欧美中文字幕精品| 日韩视频不卡中文| 久久男人中文字幕资源站| 精品国产成人系列| 国产精品青草综合久久久久99| 国产精品传媒入口麻豆| 欧美综合欧美视频| 欧美一区二区久久| 欧美精品一区二区不卡| 久久精品一区四区| 亚洲精品视频在线观看网站| 夜夜嗨av一区二区三区| 国产精品美女久久久| 欧美亚洲丝袜传媒另类| 欧美xxxxx牲另类人与| 国产日本欧洲亚洲| 亚洲成人自拍偷拍| 国产一区二区三区免费在线观看| 99久久久久久| 国产日本精品| 欧美精品亚洲一区二区在线播放| 欧美成人综合网站| 亚洲另类春色国产| 精品一区二区三区在线观看| 97久久久精品综合88久久| 极品av少妇一区二区| 国产精品日韩高清| 91精品在线观看入口| 欧美韩国日本综合| 亚洲www啪成人一区二区麻豆| 国产在线观看免费一区| 亚洲小说欧美另类社区| 精品视频一区二区不卡| 国产精品乱人伦| 美女一区二区三区在线观看| 91浏览器打开| 色噜噜狠狠成人网p站| 久久蜜桃av一区精品变态类天堂| 亚洲国产日韩一区二区| 99久久精品国产麻豆演员表| 国产精品久久波多野结衣| 欧美一二三四区在线| 一区二区在线看| 成人黄色777网| 另类国产ts人妖高潮视频| 欧美精品一区视频| 日本aⅴ亚洲精品中文乱码| 午夜国产一区| 欧美性一二三区| 亚洲人成亚洲人成在线观看图片| 国产曰批免费观看久久久| 在线不卡欧美| 日韩精品一区二区三区swag| 欧美三级资源在线| 亚洲免费av观看| 97久久超碰国产精品电影| 欧美午夜精品免费| 在线观看国产91| 亚洲精品国产第一综合99久久| 成人深夜福利app| 久久综合九色综合久99| 国产精品美女久久久久久久网站| 国产激情91久久精品导航| 久久精品一区| 亚洲免费高清视频在线| av电影在线观看完整版一区二区| 久久国产日韩| 亚洲人妖av一区二区| 欧美三级在线视频| 五月天视频一区| 国产精品久久九九| 国产精品久久久久久亚洲伦| 99免费精品视频| 日韩三级av在线播放| 欧美挠脚心视频网站| 亚洲v精品v日韩v欧美v专区| 99久久精品免费看国产免费软件| 欧美日韩一二三| 中文字幕日本不卡| 欧美黄色免费| 久久先锋影音av| 94-欧美-setu| 久久久午夜精品| 欧美一区1区三区3区公司| 精品美女在线观看| 成人黄色在线网站| 精品国产亚洲一区二区三区在线观看| 九色|91porny| 3atv在线一区二区三区| 国产精品69毛片高清亚洲| 欧美一区二区三区视频在线| 国产精品乡下勾搭老头1| 欧美一区二区三区视频| 亚洲国产精品成人久久综合一区| 成人不卡免费av| 久久亚洲一区二区三区四区| av爱爱亚洲一区| 国产丝袜欧美中文另类| 午夜欧美视频| 国产精品人人做人人爽人人添| 黑人一区二区三区四区五区| 亚洲女女做受ⅹxx高潮| 欧美mv日韩mv国产网站| 国内久久精品视频| 欧美电视剧免费观看| 91免费观看在线| 日韩美女久久久| 亚欧成人精品| 九九精品一区二区| 精品人伦一区二区色婷婷| 欧美成人一品| 亚洲一区二区三区四区不卡| 欧美在线啊v一区| 成人中文字幕电影| 国产精品久久久久久久蜜臀| 亚洲欧美日韩精品在线| 激情综合色综合久久| 久久久久97国产精华液好用吗| 亚洲国产精品日韩| 丝袜美腿亚洲色图| 日韩视频免费观看高清在线视频| 欧美日韩一区二| 日韩激情一二三区| 337p粉嫩大胆色噜噜噜噜亚洲| 欧美日韩一区在线观看视频| 亚洲成av人片一区二区梦乃| 91精品在线一区二区| 亚洲成人直播| 国产一区二区导航在线播放| 亚洲国产成人在线| 日本韩国欧美一区二区三区| 99久久婷婷国产综合精品| 亚洲综合在线视频| 日韩一区二区三区精品视频| 亚洲福利精品| 国产成人在线看| 亚洲永久精品大片| 欧美成人国产一区二区| 亚洲免费综合| 91欧美一区二区| 蜜臀av性久久久久蜜臀aⅴ流畅| 久久亚洲一区二区三区四区| 一本久道久久综合中文字幕| 91免费看`日韩一区二区| 日韩av网站在线观看| 国产精品色噜噜| 91精品国产入口在线| 亚洲综合国产| 91小视频在线| 国模大尺度一区二区三区| 亚洲欧美偷拍另类a∨色屁股| 日韩一区二区麻豆国产| 蜜桃久久精品乱码一区二区| 欧美激情综合| 国产大陆a不卡| 欧美电视剧免费观看| 色婷婷综合久色| 亚洲人成网站在线观看播放| 粉嫩嫩av羞羞动漫久久久| 三级久久三级久久| 成人免费在线观看入口| 亚洲激情偷拍| 午夜国产精品视频| 成人综合在线观看| 精品一区二区免费| 亚洲成a人v欧美综合天堂下载| 国产精品久久久久婷婷二区次| 日韩欧美美女一区二区三区| 欧美性猛交xxxx乱大交退制版 | 91精品91久久久中77777| 亚洲国内欧美| 国产在线欧美日韩| 国产精品无遮挡| 国产午夜精品一区二区| 日韩欧美国产综合| 7777女厕盗摄久久久| 欧美伊人久久大香线蕉综合69| 欧美中文字幕| 国产午夜久久| 欧美精品午夜| 91网站最新地址| 亚洲男人天堂一区| 亚洲三级小视频| 亚洲欧洲日韩av| 国产精品传媒视频| 综合av第一页|