UPS地址街道级别验证
本文关键字:验证 街道 地址 UPS | 更新日期: 2023-09-27 18:17:51
这可能是一个非常普遍的问题,但是有人在使用UPS街道级验证API时很幸运吗?我已经研究了其中的一部分:http://www.codeproject.com/KB/aspnet/Benz_CPE.aspx?msg=3658759&display=Mobile
这:https://www.ups.com/upsdeveloperkit/downloadresource?loc=en_US
UPS自己的样例代码并不是很有帮助。即使在获得访问键之后,他们的示例也坚持认为所提供的状态是无效的示例数据(即使具有测试环境可接受的状态)。寻找更多线索
UPS通知我,c#示例配置为"城市化",这只适用于波多黎各。我将代码修改如下:
class XAVWSClient
{
static void Main()
{
try
{
XAVService xavSvc = new XAVService();
XAVRequest xavRequest = new XAVRequest();
UPSSecurity upss = new UPSSecurity();
UPSSecurityServiceAccessToken upssSvcAccessToken = new UPSSecurityServiceAccessToken();
upssSvcAccessToken.AccessLicenseNumber = ;
upss.ServiceAccessToken = upssSvcAccessToken;
UPSSecurityUsernameToken upssUsrNameToken = new UPSSecurityUsernameToken();
upssUsrNameToken.Username = ;
upssUsrNameToken.Password = ;
upss.UsernameToken = upssUsrNameToken;
xavSvc.UPSSecurityValue = upss;
RequestType request = new RequestType();
//Below code contains dummy data for reference. Please update as required.
String[] requestOption = { "1" };
request.RequestOption = requestOption;
xavRequest.Request = request;
AddressKeyFormatType addressKeyFormat = new AddressKeyFormatType();
String[] addressLine = { "3930 KRISTI COURT" };
addressKeyFormat.AddressLine = addressLine;
addressKeyFormat.PoliticalDivision2 = "SACRAMENTO";
addressKeyFormat.PoliticalDivision1 = "CA";
addressKeyFormat.PostcodePrimaryLow = "95827";
addressKeyFormat.ConsigneeName = "Some Consignee";
addressKeyFormat.CountryCode = "US";
xavRequest.AddressKeyFormat = addressKeyFormat;
System.Net.ServicePointManager.CertificatePolicy = new TrustAllCertificatePolicy();
//serialize object (Debugging)
System.Xml.Serialization.XmlSerializer x = new System.Xml.Serialization.XmlSerializer(xavRequest.GetType());
Stream stream = File.Open("SerializedXAVRequest.xml", FileMode.Create);
x.Serialize(stream, xavRequest);
XAVResponse xavResponse = xavSvc.ProcessXAV(xavRequest);
Console.WriteLine("Response Status Code " + xavResponse.Response.ResponseStatus.Code);
Console.WriteLine("Response Status Description " + xavResponse.Response.ResponseStatus.Description);
Console.ReadLine();
虽然我现在可以验证我的凭据,但我不能产生多个结果,而且我不确定它是否在做任何验证,考虑到即使我输入了一个假地址,我也会收到以下内容:
响应状态码响应状态描述Success
当我的问题到了这一点时,我会发布另一个问题。在此之前,这个问题得到了解答。
您收到的成功响应是针对web服务调用的。现在,您需要查看可能的地址或'CandidateType' (UPS对象)。
层次结构响应应该类似于:
<soapenv:Envelop>
<soapenv:Body>
<xqv:XAVResponse>
<xav:Candidate> or <xav:NoCandidatesIndicator>
如果您有多个候选地址,您将收到一个候选类型对象数组。如果您只收到一个候选类型,请确保它不是一个地址范围(如果您不包括地址的特定数字部分,则可能作为响应获得)。
希望能有所帮助,我花了几个小时才弄明白这个
我看过UPS的街道级API。我四处搜索都没有弄清楚他们的数据是从哪里来的,直到我找到了UPS的一名开发人员,他告诉我他们的数据直接来自USPS地址数据库,并添加了一些他们自己的内部指标。由于UPS对你如何使用他们的数据有限制(只允许你使用他们的服务),这取决于你的使用量,使用相同的USPS数据但没有限制可能是有意义的。这通常可以从第三方USPS数据提供商处获得。您将无法下载该国所有地址的完整列表(因为隐私法),但您将能够使用API(不受限制)执行地址验证。
为了充分披露,我是SmartyStreets的创始人,这是一家做街道地址验证的公司
您也可以使用http://www.verifythisaddress.com,这是一个WCF服务,允许您从USPS以及250多个国家检索地址。这是昂贵的,虽然其他人已经说过。我曾经尝试过实施USPS,但是当我输入一个公寓大楼的地址时,我收到了一个成功的消息,但它应该抛出一个错误,即套件范围缺失。如果UPS验证不有效,我对UPS验证会有一些犹豫。如果你找不到正确的地址,它就会破坏目的。使用USPS服务或第三方服务,如上面的链接。