Facebook" signed_request"使用纯经典ASP

时间:2011-08-02 11:48:13

标签: facebook asp-classic base64

我想在我的fb应用中获取signed_request的内容,但只使用带有VBScript的经典ASP。

Facebook的网站在PHP中有一个解码的例子,但我找不到任何ASP。

我想我需要解码base64url,然后读取JSON,但我不知道如何。

3 个答案:

答案 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>