我想在我的fb应用中获取signed_request
的内容,但只使用带有VBScript的经典ASP。
Facebook的网站在PHP中有一个解码的例子,但我找不到任何ASP。
我想我需要解码base64url,然后读取JSON,但我不知道如何。
答案 0 :(得分:3)
我和你在同一条船上。所有提供代码来创建门的站点都是用PHP编写的。使用ChiliPepperDesign的"Reveal / Fan-Gate / Like-Gate Facebook iFrame Tab"上的代码作为起点,我将PHP转换为ASP / VBScript,并找到了base64解码和JSON解码的源代码(PHP显然本身就是这样)。
我从GitHub获得的JSON.decode脚本。是的,它是Javascript,但是你可以在ASP / VBScript网站上运行它,如果你在页面上的代码前面加上:
<%@LANGUAGE="JAVASCRIPT" CODEPAGE="65001"%>
<script language="JSCRIPT" runat="server">
将所有下载的Javascript放入,然后使用通常的</script>
标记关闭。将此文件另存为 json_decode.asp 。
base64解码有点困难(我最初下载的sorta工作并且sorta不起作用)。我在Free VBCode找到了更好的版本。下载并将其放入另一个文件 base64_encode-decode.asp 。
最后,将所有内容整合在一起的代码是:
<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
<!-- #INCLUDE FILE="base64_encode-decode.asp" -->
<!-- #INCLUDE FILE="json_decode.asp" -->
<%
Dim encoded_sig, payload, sig, data, myArray
Function parsePageSignedRequest()
If Request("signed_request") <> "" THEN
myArray = Split(Request("signed_request"), ".")
encoded_sig = myArray(0)
payload = myArray(1)
sig = base64_decode(Replace(encoded_sig, "-_", "+/"))
set data = JSON.parse(base64_decode(Replace(payload, "-_", "+/")))
parsePageSignedRequest = data
If data.page.liked Then %>
<p>Thank you for liking us!</p>
<% Else %>
<p>Please click the "like" button to continue.</p>
<% End If
Else
parsePageSignedRequest = ""
End If
End Function
'' -- run the function
parsePageSignedRequest()
%>
将此保存为您网站上 facebook-likeGate.asp 与两个包含文件位于同一位置,并将Facebook指向此页面。
HTH
JF
答案 1 :(得分:2)
以下是不使用json_decode.asp的代码
<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
<!-- #INCLUDE FILE="base64_encode-decode.asp" -->
<%
Dim encoded_sig, payload, sig, data, myArray
Function parsePageSignedRequest()
If Request("signed_request") <> "" THEN
myArray = Split(Request("signed_request"), ".")
payload = myArray(1)
payload = base64_decode(payload)
If instr(payload,"liked"":true,") Then %>
<p>Thank you for liking us!</p>
<% Else %>
<p>Please click the "like" button to continue.</p>
<% End If
Else
parsePageSignedRequest = ""
End If
End Function
parsePageSignedRequest()
%>
答案 2 :(得分:1)
您可以使用新的JS SDK。这是我编码和使用的示例。 Post方法效果很好。
<head>
<SCRIPT language="JavaScript">
setInterval('SubMe()',1500);
function SubMe()
{
if(document.getElementById('fbmail').value != ''){
document.form.submit();
}
}
</SCRIPT>
</head>
<body>
<div id="fb-root"></div>
<h2></h2><br />
<div id="user-info"></div>
<p><fb:login-button scope="email,publish_stream,user_about_me,user_location,user_birthday" on-login="top.location = '';" autologoutlink="true"></fb:login-button></p>
<script>
window.fbAsyncInit = function() {
FB.init({ appId: 'APP ID',
status: true,
cookie: true,
xfbml: true,
oauth: true});
function updateButton(response) {
var button = document.getElementById('fb-auth');
if (response.authResponse) {
//user is already logged in and connected
var userInfo = document.getElementById('user-info');
FB.api('/me', function(response) {
userInfo.innerHTML='Redirecting...If doesnt work click <a href="">here</a>';
document.getElementById('fbmail').value = response.email;
document.getElementById('fbid').value = response.id;
document.getElementById('fbname').value = response.name;
document.getElementById('fbbirthday').value = response.birthday;
document.getElementById('fbhometown').value = response.hometown.name;
button.innerHTML = 'Logout';
});
button.onclick = function() {
FB.logout(function(response) {
var userInfo = document.getElementById('user-info');
userInfo.innerHTML="";
});
};
} else {
//user is not connected to your app or logged out
button.innerHTML = 'Logout';
button.onclick = function() {
FB.login(function(response) {
if (response.authResponse) {
FB.api('/me', function(response) {
var userInfo = document.getElementById('user-info');
userInfo.innerHTML='Redirecting...If doesnt work click <a href="">here</a>';
document.getElementById('fbmail').value = response.email;
document.getElementById('fbid').value = response.id;
document.getElementById('fbname').value = response.name;
document.getElementById('fbbirthday').value = response.birthday;
document.getElementById('fbhometown').value = response.hometown.name;
});
} else {
//user cancelled login or did not grant authorization
}
}, {scope:'email'});
}
}
}
// run once with current status and whenever the status changes
FB.getLoginStatus(updateButton);
FB.Event.subscribe('auth.statusChange', updateButton);
};
(function() {
var e = document.createElement('script'); e.async = true;
e.src = document.location.protocol
+ '//connect.facebook.net/en_US/all.js';
document.getElementById('fb-root').appendChild(e);
}());
</script>
<form method="post" name="form" id="form" action="go_little_caeser.asp">
<input name="fbmail" id="fbmail" type="hidden">
<input name="fbid" id="fbid" type="hidden">
<input name="fbname" id="fbname" type="hidden">
<input name="fbbirthday" id="fbbirthday" type="hidden">
<input name="fbhometown" id="fbhometown" type="hidden">
</form>
</body>