在51.com上如何编写SIGNED REQUEST--通用其他OS平台

原文链接:http://blog.xiaonei.com/GetEntry.do?id=380771921&owner=253723720

 

首先到51去申请一个OPENSOCIAL JS应用,这个流程这里就不提了,大家已经很熟悉了。

然后写我们的SIGNED REQUEST请求,这样的请求有利于我们开发者的服务器不会被除container的其他服务器发送的请求干扰。

 

这里面有一个实例,我们可以去看一下:http://apps.51.com/os_test。

这里是他的xml地址:http://www.unickway.org.cn/opensocial/xml/xml/test/test_xml/ostest.xml

下面是我们的js端的代码:(很简单)。

<code>

    var server_url = 'http://www.unickway.org.cn/opensocial/xml/xml/test/test_php/signed_request.php';   //这是要请求的我服务器上的URL 
    var params = {};                          //我要发送的参数 
    params[gadgets.io.RequestParameters.AUTHORIZATION] = gadgets.io.AuthorizationType.SIGNED; //叫CONTAINER进行加密发送,最主要的:) 
    params[gadgets.io.RequestParameters.CONTENT_TYPE] = gadgets.io.ContentType.JSON;
    gadgets.io.makeRequest(server_url,function(data){response(data.text);},params);         //发送请求,并在response函数接受请求 
</code> 

下面是我们的server端的代码:(也很简单,这里会用到shindig中的一个OAUTH.php,具体目录是shindig/php/src/gadgets/oauth/oauth.php,一定要用这个文件,其他的oauth.php不好用的:) )

<code>

<?php
   require_once("OAuth.php");

   class FOSignatureMethod extends OAuthSignatureMethod_RSA_SHA1 {
     protected function fetch_public_cert(&$request) {
       return <<<EOD
-----BEGIN CERTIFICATE-----
MIICxTCCAi6gAwIBAgIJAKGu1p8ZX0ClMA0GCSqGSIb3DQEBBQUAMEwxCzAJBgNV
BAYTAkdCMRIwEAYDVQQIEwlCZXJrc2hpcmUxEDAOBgNVBAcTB05ld2J1cnkxFzAV
BgNVBAoTDk15IENvbXBhbnkgTHRkMB4XDTA4MTAxNzAyMDkwNloXDTA5MTAxNzAy
MDkwNlowTDELMAkGA1UEBhMCR0IxEjAQBgNVBAgTCUJlcmtzaGlyZTEQMA4GA1UE
BxMHTmV3YnVyeTEXMBUGA1UEChMOTXkgQ29tcGFueSBMdGQwgZ8wDQYJKoZIhvcN
AQEBBQADgY0AMIGJAoGBAMLJ0Jcel8Jnw3dG4vUp7uOiBtRhShUEKD8wXSbjT/H4
vP6Np0wSBE1II0D4rmA6+LEJQp6II+35lnx3QZ4Fwknxg0EsHDrJHxmz47+Jdebg
KHwkdLteubzshqOD0DKpwIvp+tVdmtV9ThAk1k2La7y+O2qEZLnhpMPMh7rtWXc5
AgMBAAGjga4wgaswHQYDVR0OBBYEFK2mxQW2Zilj6YK/Jd8iEOio62tuMHwGA1Ud
IwR1MHOAFK2mxQW2Zilj6YK/Jd8iEOio62tuoVCkTjBMMQswCQYDVQQGEwJHQjES
MBAGA1UECBMJQmVya3NoaXJlMRAwDgYDVQQHEwdOZXdidXJ5MRcwFQYDVQQKEw5N
eSBDb21wYW55IEx0ZIIJAKGu1p8ZX0ClMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcN
AQEFBQADgYEAL9baSkA4jw+FL5Aq7xDR7aAoDu6qKT3wRgpmSQl9vL0SatncDdio
JpfAnENN3g4M/MABt0B1qOd7r1rK+ymbmszficRyb5v0Z8n/60fIg42YHygV+wFa
wcf4VXqAQ+lCpCosqgi30XDJXNECMx1kHf7NUtNacJpxHhJ+6swqErc=
-----END CERTIFICATE-----
EOD;
     }
   }
   //上面的 public_cert下载地址为: http://os.51.com/public.cer ,用来验证contianer给我们的信息,不同的container下载不同的public cert文件,你也可以不下载直接用网路上的文件:) 
   //Build a request object from the current request
   $request = OAuthRequest::from_request(null, null, array_merge($_GET, $_POST));

   //Initialize the new signature method
   $signature_method = new FOSignatureMethod();

   //Check the request signature
   @$signature_valid = $signature_method->check_signature($request, null, null, $_GET["oauth_signature"]);
   //上面这句代码就是去验证,是否我们想要的CONTAINER发送过来的信息:) 
   //Build the output object
   $payload = array();
   if ($signature_valid == true) { //这里是TRUE,说明验证成功了。 
     $payload["validated"] = "Success! The data was validated";
   } else {  // 失败:(,那我们就不叫他继续运行我们的程序了,屏蔽 
     $payload["validated"] = "This request was spoofed";
   }

   //Add extra parameters to help debugging
   $payload["get"] = $_GET;
   $payload["post"] = $_POST;
   $payload["rawpost"] = file_get_contents("php://input");

   //Return the response as JSON
   echo var_export($payload);
?>

</code>

 

这里我们在js端发送一个验证过的请求,到我们(应用本身)的SERVER端验证请求的正确性,就完成了。

 

本代码版权吴伊自所有,我这里纯属抄袭:)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值