我收到以下错误:"远程服务器返回错误:(401)未经授权"在这一行:
using (HttpWebResponse httpResponse = request.GetResponse() as HttpWebResponse) {}
以下是完整的代码:
string clientSecretKey = ConfigurationManager.AppSettings["ClientSecretKey"];
const string ChargeUrl = "https://api.stripe.com/v1/charges?amount={0}¤cy={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 */}
一开始我认为错误是由于令牌不能使用多次而造成的,但是我更改了它并得到了同样的错误。我不确定导致错误的原因。
答案 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
是条带键。
小心地在服务器上的某处放置一个密钥,使其不会被用户/客户端隐藏。