【问题标题】:Paypal api oauthPaypal api 认证
【发布时间】:2014-08-13 12:17:48
【问题描述】:

文档说要获得oauth 令牌,请使用以下内容:

卷曲 -v https://api.sandbox.paypal.com/v1/oauth2/token \ -H“接受:应用程序/json”\ -H "接受语言:en_US" \ -u "EOJ2S-Z6OoN_le_KS1d75wsZ6y0SFdVsY9183IvxFyZp:EClusMEUk8e9ihI7ZdVLF5cZ6y0SFdVsY9183IvxFyZp" \ -d "grant_type=client_credentials"

如何使用angular js发送-u-d参数

    var senddata = {
        clientId:"Ac8T1BCmIxgxbS5O_ztwejxvNW8Cbr0y1724_2cd8bGl68axHyw_nEdcOBli",
        secret:"EAwgXhALV78LnphCPf-R3zs1Dx3nkcIOMc4TftSLh9q5EpgyqdeE19El9Oh0",
        grant_type:"client_credentials"
    };

尝试在http.post(url,senddata) 中传递senddata

但我得到了

{"error":"invalid_client","error_description":"Invalid client credentials"}  

【问题讨论】:

  • 您必须在 HTTP 请求的标头中包含身份验证信息。 senddata 似乎将数据添加到有效负载中。在blog.brunoscopelliti.com/… 下找到了一篇关于 http headers 和 angualar js 的好帖子
  • 认证头的名称应该是什么?
  • 检查 Finn K 的身份验证标头答案,以及 AngularJS 的 $http.post documentation 语法(标头在第三个参数中)。
  • 不会出现跨域错误吗?

标签: angularjs curl paypal oauth


【解决方案1】:

我正在使用 Angular-JS 开发的电子商务解决方案的上下文中进行 PayPal API 调用。我能够使用以下代码从 PayPal 取回 auth_token。困扰我一段时间的两个问题是:

  1. ClientId 和 ClientSecret 必须用冒号连接并进行 base64 编码(如 FinnK 上面所说)
  2. 当将数据作为对象data: {'grant_type': 'client_credentials'} 发送时,我收到一个错误,即“grant_type”是必需参数。将其更改为用等号连接的字符串后,我不再收到此错误。

    var basicAuthString = btoa('CLIENTID:SECRET');
    $http({
      method: 'POST',
      url: 'https://api.sandbox.paypal.com/v1/oauth2/token',
      headers: {
        'Accept': 'application/json',
        'Content-Type': 'application/x-www-form-urlencoded',
        'Authorization': 'Basic ' + basicAuthString,
      },
      data: 'grant_type=client_credentials'
    })
    .success(function(data){
      console.log(data.access_token);
    })
    .error(function(error){
      console.error(error);
    });
    

我希望这对那些试图实现它的人有所帮助。

【讨论】:

    【解决方案2】:

    客户端 ID 和密码需要在 Authorization 标头中发送。

    客户端 id 和密码需要用 : 分隔符连接(例如 client:secret),然后以基数 64 编码。这称为 basic authentication,以及使用 -u 时 cURL 在幕后的作用选项。

    您可以在第三个参数中将自定义标头传递给$http.post。请参阅method documentation。示例,直接使用$http(并深受文档启发):

    var req = {
      method: 'POST',
      url: 'http://example.com',
      headers: {
       'Authorization': "Basic 12Base346456enc0did"
      },
      data: { grant_type: 'client_credentials' }
    }
    
    $http(req).success(function(){...}).error(function(){...});
    

    【讨论】:

      猜你喜欢
      • 2016-07-27
      • 2013-08-13
      • 2013-05-14
      • 1970-01-01
      • 1970-01-01
      • 2016-08-22
      • 2014-02-06
      • 2015-05-29
      • 2012-08-23
      相关资源
      最近更新 更多