经典ASP调用Stripe API时遭遇403 HTTP错误求助
排查经典ASP集成Stripe API时的403 Forbidden错误
看起来你在经典ASP里调用Stripe Charges API时踩了几个常见的坑,我帮你一步步梳理:
核心问题:用错了密钥类型
Stripe的Publishable Key(pk_开头)是给前端浏览器用的,后端服务器调用API必须用Secret Key(sk_开头)!这大概率是你出现403的主要原因——用Publishable Key即使做了Base64编码,后端请求也会被Stripe拒绝。
正确构造Authorization头
Stripe API用Basic Auth验证,规则是:
- 用户名:你的Stripe Secret Key
- 密码:留空(不需要填任何内容)
所以生成Authorization头的步骤是:
- 把
sk_你的密钥:(注意末尾必须加冒号,代表密码为空)转成Base64编码 - 构造请求头:
Authorization: Basic 编码后的字符串
修正后的代码示例
这里给你补全完整的请求代码,包含正确的授权头和参数:
Dim http, authKey, stripeSecretKey ' 替换成你从Stripe后台获取的Secret Key(sk_开头) stripeSecretKey = "sk_live_xxxxxxxxxxxxxxxxxxxxxxxx" ' 生成Basic Auth的Base64编码字符串(注意末尾的冒号) authKey = "Basic " & Base64Encode(stripeSecretKey & ":") Set http = Server.CreateObject("WinHttp.WinHttpRequest.5.1") With http Call .Open("POST", "https://api.stripe.com/v1/charges", False) ' 设置必要的请求头 Call .SetRequestHeader("Content-Type", "application/x-www-form-urlencoded") Call .SetRequestHeader("Authorization", authKey) ' 构造Charges接口的必填参数:amount(最小单位,比如1000=10美元)、currency、source(你的token) Dim postData postData = "amount=1000¤cy=usd&source=tok_xxxxxxxxxxxx" Call .Send(postData) ' 输出响应便于调试 Response.Write "Status: " & .Status & "<br>" Response.Write "Response: " & .ResponseText End With Set http = Nothing ' 经典ASP环境下的Base64编码辅助函数(如果你的服务器没有自带相关方法) Function Base64Encode(strText) Dim objXML, objNode Set objXML = CreateObject("MSXML2.DOMDocument") Set objNode = objXML.createElement("base64") objNode.dataType = "bin.base64" objNode.nodeTypedValue = Stream_StringToBinary(strText) Base64Encode = objNode.Text Set objNode = Nothing Set objXML = Nothing End Function Function Stream_StringToBinary(strText) Dim objStream Set objStream = CreateObject("ADODB.Stream") objStream.Type = 2 ' adTypeText objStream.Charset = "us-ascii" objStream.Open objStream.WriteText strText objStream.Position = 0 objStream.Type = 1 ' adTypeBinary Stream_StringToBinary = objStream.Read objStream.Close Set objStream = Nothing End Function
其他排查方向
如果换了Secret Key还是403,再检查这几点:
- 服务器防火墙/主机限制:有些ASP主机商会禁止出站请求到外部API,确认服务器能访问
https://api.stripe.com(443端口) - Secret Key权限:去Stripe后台查看你的Secret Key是否被设置了IP白名单,或者密钥状态是否正常(没有被冻结)
- 请求参数合法性:确认
amount是货币最小单位(比如人民币是分,美元是分),currency是小写的三位代码(如usd、cny),source是有效的前端token
内容的提问来源于stack exchange,提问作者Glenn
相关产品推荐
相关产品推荐

