条带401 - 未提供有效的API密钥 - C#

时间:2017-05-25 07:26:27

标签: c# stripe-payments http-status-code-401 stripe.net

我收到以下错误:"远程服务器返回错误:(401)未经授权"在这一行:

using (HttpWebResponse httpResponse = request.GetResponse() as HttpWebResponse) {}

以下是完整的代码:

string clientSecretKey = ConfigurationManager.AppSettings["ClientSecretKey"];

const string ChargeUrl = "https://api.stripe.com/v1/charges?amount={0}&currency={1}&source={2}&description={3}"; 
string requestUrl = HttpUtility.UrlPathEncode(
String.Format(ChargeUrl, 1000, "usd", "tok_19xLu8HN9aKw9vrkUsflNWOI", "Test charge to text@example.com") );
HttpWebRequest request = WebRequest.Create(requestUrl) as HttpWebRequest; 

request.Headers.Add("Authorization", "sk_test_example"); 
request.ContentType = "application/x-www-form-urlencoded";
request.Method = "POST";

using (HttpWebResponse httpResponse = request.GetResponse() as HttpWebResponse)
{/* some code */} 

一开始我认为错误是由于令牌不能使用多次而造成的,但是我更改了它并得到了同样的错误。我不确定导致错误的原因。

2 个答案:

答案 0 :(得分:2)

这里的问题是您传递的是API密钥,但没有使用Stripe API所期望的Bearer身份验证。您需要像这样更改Authorization标题:

request.Headers.Add("Authorization", "Bearer sk_test_example");

我知道你在评论中提到你不能使用第三方库但我想提一个以防万一。 Stripe.net让您可以轻松地在.Net中使用Stripe的API,而无需自己重写逻辑。正确处理错误,编码参数和子哈希,管理身份验证和JSON解码,所有这些都需要花费大量的时间和反复试验才能从头开始构建,而这个库可以为您处理所有这些。

答案 1 :(得分:1)

您正在初始化密钥的变量但不使用它。尝试修改请求网址以"https://" + clientSecretKey + ":@api..."

开头

当然,这是假设clientSecretKey是条带键。

小心地在服务器上的某处放置一个密钥,使其不会被用户/客户端隐藏。