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
相关产品推荐
相关产品推荐

