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

Stripe 401 - No valid API key provided - C#

我在这一行收到以下错误:"The remote server returned an error: (401) Unauthorized":

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 */} 

一开始以为是token不能多次使用导致的错误,后来改了还是一样的错误。我不确定是什么导致了错误。

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

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

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

您正在为密钥初始化一个变量,但没有使用它。尝试修改请求 url 以 "https://" + clientSecretKey + ":@api..."

开头

当然,这是假设 clientSecretKey 是 Stripe 键。

小心将密钥放在服务器上的某处,以免对用户/客户端隐藏。