2013-06-13 58 views
1

我目前正在使用PayPal处理信用卡交易的ASP.Net MVC 4应用程序。我已经用PayPal RESTFul API设置了大部分设置,出于某种原因,PayPal最新版本的SDK不想工作(通过NUGET),所以我决定使用ASP.Net的最新和最好的API HttpClient()(像它这样更好反正)ASP.NET MVC 4 HttpClient()问题

我需要做的是以下内容(来自PayPal的文档复制)

curl -v https://api.sandbox.paypal.com/v1/payments/payment \ 
-H "Content-Type:application/json" \ 
-H "Authorization:Bearer EEwJ6tF9x5WCIZDYzyZGaz6Khbw7raYRIBV_WxVvgmsG" \ 
-d '{ 
     "intent": "sale", 
     "rest_of_the_data": "I didn't include it here" 
     }' 

什么我卡上,现在是第三个参数-H "Authorization:Bearer EEwJ6tF9x5WCIZDYzyZGaz6Khbw7raYRIBV_WxVvgmsG" \这里是什么我有没有工作:

using (var client = new HttpClient()) 
{ 
    client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 
    client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", Convert.ToBase64String(         System.Text.ASCIIEncoding.ASCII.GetBytes(string.Format("{0}:{1} {2}", "Authorization", accessToken.token_type, accessToken.access_token)))); 
    var response = client.PostAsync<Payment>(endPoint + "/v1/payments/payment", payment, new JsonMediaTypeFormatter()); 
    if (response.Result.IsSuccessStatusCode) 
     { 
      var responseContent = response.Result.Content; 
      var responseString = responseContent.ReadAsAsync<Payment>().Result; 
     } 
} 

与上面的代码,我发现了以下回应:

Result = {StatusCode: 401, ReasonPhrase: 'Unauthorized', Version: 1.1, Content: System.Net.Http.StreamContent, Headers: 
{ 
    Date: Thu, 13 Jun 2013 07:06:50 GMT 
    Server: Apache-Coyote/1.1 
    Content-Length: 0 
    Content-Type: application/json 
}} 

现在我敢肯定,我传递了正确的凭据,但我认为它不是根据-H "Authorization:Bearer...正确格式化我认为我不应该使用client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue(...,但我似乎无法找到替代品来完成此项工作。我应该使用什么?

在这方面的任何帮助将不胜感激。

+0

你尝试过这种方法:http://stackoverflow.com/a/10882556/1563373 – Slicksim

回答

0

看来你是错误地设置标题值。尝试以下,看看它的工作原理:

client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", Convert.ToBase64String(System.Text.ASCIIEncoding.ASCII.GetBytes(accessToken.access_token)); 
+0

感谢您的帮助,但我得到了同样的错误,我仔细检查了所有access_Token,它是正确的,但我得到相同的'状态代码401非法' – hjavaher

+0

好的,你也检查过,如果在令牌转换后,这个值与你在'curl'例子中使用的值相同。 –

+0

不,我没有,我上面提供的例子是由PayPal提供的。访问令牌只能使用8个小时。我在想的是你的解决方案转化为'curl .... -u [访问令牌]'而不是'curl ... -H [授权....]'基于我的使用它获取'访问令牌' – hjavaher