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

UPS Steppingstone端点OAuth2认证类异常:错误250002排查

UPS SOAP接口OAuth2 Bearer Token认证正确实现方案

你的问题出在自定义的Authorization类不符合UPS SOAP接口对OAuth2认证的结构要求,UPS要求认证信息必须封装在<UPSSecurity>节点下,而非自定义节点。以下是正确的实现步骤:

1. 确认UPS OAuth2 SOAP Header结构

UPS的OAuth2认证SOAP Header格式如下:

<UPSSecurity>
  <AccessToken>
    <BearerToken>Bearer your_oauth2_token</BearerToken>
  </AccessToken>
  <ServiceAccessToken>
    <AccessLicenseNumber>your_access_license</AccessLicenseNumber>
  </ServiceAccessToken>
</UPSSecurity>

需要保留原有的ServiceAccessToken节点,同时新增AccessToken节点承载Bearer Token。

2. 实现对应的认证类(如果WSDL未生成)

如果你的uUPSShip_WSDL单元中没有AccessToken类,手动定义继承自TSOAPHeader的类:

AccessToken = class(TSOAPHeader)
private
  FBearerToken: string;
published
  property BearerToken: string read FBearerToken write FBearerToken;
end;

3. 修改认证代码

替换原有的用户名密码认证逻辑,改用AccessToken传递Bearer Token:

FauthData := uUPSShip_WSDL.UPSSecurity.Create;
// 创建AccessToken并设置Bearer Token(必须带"Bearer "前缀)
accessToken := AccessToken.Create;
accessToken.BearerToken := 'Bearer your_valid_oauth2_token';
FauthData.AccessToken := accessToken;
// 保留ServiceAccessToken(AccessLicenseNumber仍需提供)
serviceToken := uUPSShip_WSDL.ServiceAccessToken.Create;
serviceToken.AccessLicenseNumber := 'your_access_license_number';
FauthData.ServiceAccessToken := serviceToken;

request_ := ShipmentRequest.Create;

(FiServices as ISOAPHeaders).Send(FauthData);
ProcessShipment(request_, nil);

关键注意事项

  • 不要自定义Authorization节点:UPS的SOAP接口只识别<UPSSecurity>下的标准子节点,自定义节点会被判定为无效认证信息(错误码250002)。
  • Bearer Token必须带前缀:值的格式必须是Bearer + 空格 + 令牌,不能只传令牌字符串。
  • 保留AccessLicenseNumber:即使切换到OAuth2认证,ServiceAccessToken和对应的AccessLicenseNumber仍然是必填项。

内容的提问来源于stack exchange,提问作者pperetko

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 03:39:56