You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

经典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头的步骤是:

  1. 把sk_你的密钥:(注意末尾必须加冒号,代表密码为空)转成Base64编码
  2. 构造请求头: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&currency=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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 10:30:51