如何在Angular帖子中正确发送application / x-www-form-urlencoded

时间:2019-08-29 19:31:00

标签: angular paypal angular-httpclient

我正在尝试获取Paypal访问令牌,并且根据paypal,请求的数据为-d "grant_type=client_credentials",必须以application / x-www-form-urlencoded格式发送,以下为代码我现在正在尝试

let body = "grant_type=client_credentials"

return this.httpClient.post<any (`https://api.sandbox.paypal.com/v1/oauth2/token`,body);

然后我在auth拦截器中设置标题,如下所示

const copiedReq = req.clone({ 
    setHeaders: {
      'Authorization': `Basic  ${this.client_id}:${this.secrete}`, 
      'Accept': 'application/json',
      'Content-Type':'application/x-www-form-urlencoded',
    }
});
return next.handle(copiedReq); 

它总是返回401未经授权,但是我的client_idsecrete没问题,因为当我尝试与邮递员通话时,效果很好

“网络”标签

The network tab 在具有相同凭据的邮递员上工作正常,但在这里不行,我做错了什么?如何提出适当的请求以获取结果

贝宝(Paypal)卷曲示例

curl -v https://api.sandbox.paypal.com/v1/oauth2/token \
-H "Accept: application/json" \
-H "Accept-Language: en_US" \
-u "client_id:secret" \
-d "grant_type=client_credentials"

1 个答案:

答案 0 :(得分:1)

迟到总比不到好。我只是遇到了与您相同的问题,终于解决了。 您必须基于64位编码您的凭据:

let credentials: btoa(`${this.client_id}:${this.secrete}`);

const copiedReq = req.clone({ 
setHeaders: {
  'Authorization': `Basic  `+credentials, 
  'Accept': 'application/json',
  'Content-Type':'application/x-www-form-urlencoded',
}
});
return next.handle(copiedReq); 

这在几分钟前对我有用。希望下次对您有用:D