gpt4 book ai didi

java - 帮助使用 Facebook REST API - 使用 HttpClient (Java) 发送通知。

转载 作者:行者123 更新时间:2023-11-30 01:39:19 25 4
gpt4 key购买 nike

我正在使用 session 代理方法通过 Facebook Connect(通过我的 iPhone 模拟器)登录 Facebook 并获取我的 session key 。但是,我正在使用服务器端 Java 发送通知。我想做的只是将用户到用户的通知发送回给我自己(这就是我将 to_uids 设置为空字符串的原因)。我是登录用户。

我正在使用以下 Facebook REST API:

http://wiki.developers.facebook.com/index.php/Notifications.send

使用 Notifcations.send REST API 调用向用户发送用户通知时遇到问题...

HttpClient client = new HttpClient();
String host = "http://www.facebook.com/restserver.php";
String sessionKey = "42df12eaf555bd728ef236dc-3004114647";
String notificationsCallId = Long.toString(new java.util.Date().getTime());

// Notifications.send: api_key, call_id, format, method, notification, session key, to_ids, version,
String toNotificationsSignature =
"api_key="
+ "78c1c4c6a42990fbhh772f8aab96a4r4"
+ "call_id=" + notificationsCallId
+ "format=XML"
+ "method=Notifications.send"
+ "notification="
+ "session_key="+ sessionKey
+ "to_ids" + ""
+ "v=1.0"
+ "0x786c388bf3cae8668c863215da0ff2";

System.out.println("to md5: " + toNotificationsSignature);

String emptyString = "";
String notificationsSignature = SimpleMd5.MD5(toNotificationsSignature);
System.out.println("md5: " + notificationsSignature);

// Parameters
NameValuePair[] notificationsSendParameters =
{
new NameValuePair("api_key", "78c1c4c6a42990fbhh772f8aab96a4r4"),
new NameValuePair("call_id", notificationsCallId),
new NameValuePair("format", "XML"),
new NameValuePair("method", "Notifications.send"),
new NameValuePair("notification", ""),
new NameValuePair("session_key", sessionKey),
new NameValuePair("sig", notificationsSignature),
new NameValuePair("to_ids", emptyString),
new NameValuePair("v", "1.0")
};

PostMethod notificationsSendPost = new PostMethod(host);

notificationsSendPost.setRequestBody(notificationsSendParameters);
notificationsSendPost.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
notificationsSendPost.setRequestHeader("User-Agent", "Facebook API PHP5 Client 1.1 (curl) 5");

// Execute method and handle any error responses.
client.executeMethod(notificationsSendPost);

// Create response
StringBuilder notificationsSendResponse = new StringBuilder();

byte[] byteArrayNotifications = new byte[4096];

for (int n; (n = notificationsSendPost.getResponseBodyAsStream().read(byteArrayNotifications)) != -1;)
{
notificationsSendResponse.append(new String(byteArrayNotifications, 0, n));
}

String notificationInfo = notificationsSendResponse.toString();
System.out.println("Notification Info: " + notificationInfo);

19:22:06,995 INFO [STDOUT] 通知信息:

<error_response 
xmlns="http://api.facebook.com/1.0/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://api.facebook.com/1.0/ http://api.facebook.com/1.0/facebook.xsd">
<error_code>104</error_code>
<error_msg>Incorrect signature</error_msg>
<request_args list="true">
<arg>
<key>api_key</key>
<value>78c1c4c6a42990fbhh772f8aab96a4r4</value>
</arg>
<arg>
<key>call_id</key>
<value>1253586126742</value>
</arg>
<arg>
<key>format</key>
<value>XML</value>
</arg>
<arg>
<key>method</key>
<value>Notifications.send</value>
</arg>
<arg>
<key>notification</key>
<value/>
</arg>
<arg>
<key>session_key</key>
<value>42df12eaf555bd728ef236dc-3004114647</value>
</arg>
<arg>
<key>sig</key>
<value>325a3f78a836fe575ca77be04f66ec9d</value>
</arg>
<arg>
<key>to_ids</key>
<value/>
</arg>
<arg>
<key>v</key>
<value>1.0</value>
</arg>
</request_args>
</error_response>

SimpleMd5.toMD5代码:

public class SimpleMd5 {

private static String convertToHex(byte[] data) {
StringBuffer buf = new StringBuffer();
for (int i = 0; i < data.length; i++) {
int halfbyte = (data[i] >>> 4) & 0x0F;
int two_halfs = 0;
do {
if ((0 <= halfbyte) && (halfbyte <= 9))
buf.append((char) ('0' + halfbyte));
else
buf.append((char) ('a' + (halfbyte - 10)));
halfbyte = data[i] & 0x0F;
} while(two_halfs++ < 1);
}
return buf.toString();
}

public static String MD5(String text)
throws NoSuchAlgorithmException, UnsupportedEncodingException {
MessageDigest md;
md = MessageDigest.getInstance("MD5");
byte[] md5hash = new byte[32];
md.update(text.getBytes("iso-8859-1"), 0, text.length());
md5hash = md.digest();
return convertToHex(md5hash);
}
}

问题:

(1) 我可能做错了什么?为什么它返回 104?

(2) 我可以为通知字符串添加什么内容?

我知道它是 FBML 和 HTML 的精简版本,但想看一个示例。

我可以把“Hello”作为测试吗?

我知道我这样做是正确的,因为我在代码中正确调用了 Users.getInfo 和 Friends.get,并且不会返回 104 错误签名。

感谢您花时间阅读本文!

最佳答案

找到解决方案了! to_ids 后面没有=!

关于java - 帮助使用 Facebook REST API - 使用 HttpClient (Java) 发送通知。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1457923/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com