• FedEx Package Rate Integration with NetSuite direct integrate by WebServices


    Quick TECHNICAL Note

    Reality: UPS only support WebServices integration(or window platform exe application: FedEx Ship Manager® Lite), friendly for JAVA, PHP or C#.

    We need to calling UPS SOAP services in NetSuite directly, so there is JSON -> XML for input expected XML parameters and parse API return result XML -> JSON action. 

    Different from UPS, There is high request for xml's element order/sequence for FedEx API.

    This's a re-usable framework for intergration with WebServices platform/application.


    Registration for the Developer Keys

    We will need registration on webside got

    Developer Test Key:   PFPtfQE9ME1N****
    Required for FedEx Web Services for Intra Country Shipping in US and Global 

    and the Email Box:

    Title: Your Developer Test Key Registration is complete
    
    Test Account Information
    <spacer.gif>
    Test URL: https://wsbeta.fedex.com:443/web-services
    Test Password: H6F4kyFrYIQxALXOTbH53**** 
    
    
    FedEx Web Services Testing Information:
     	FedEx Shipping Account Number: **0088000 
     	FedEx Meter Number: ***2012**
    

      

    On NetSuite Side we are targeting to achieve xml files like the sample:

    Example 1:Rate Request
    
    <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-
    ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://fedex.com/ws/rate/v28">
       <SOAP-ENV:Body>
          <RateRequest>
             <WebAuthenticationDetail>
                <ParentCredential>
                   <Key>XXXXXX</Key>
                   <Password>XXXXXX</Password>
                </ParentCredential>
                <UserCredential>
                   <Key>XXXXXX</Key>
                   <Password>XXXXXX</Password>
                </UserCredential>
             </WebAuthenticationDetail>
             <ClientDetail>
                <AccountNumber>XXXXXX</AccountNumber>
                <MeterNumber>XXXXXX</MeterNumber>
             </ClientDetail>
             <TransactionDetail>
                <CustomerTransactionId>RateRequest_v28</CustomerTransactionId>
             </TransactionDetail>
             <Version>
                <ServiceId>crs</ServiceId>
                <Major>28</Major>
                <Intermediate>0</Intermediate>
                <Minor>0</Minor>
             </Version>
             <RequestedShipment>
                <ShipTimestamp>2020-02-25T12:34:56-06:00</ShipTimestamp>
                <DropoffType>REGULAR_PICKUP</DropoffType>
                <ServiceType>PRIORITY_OVERNIGHT</ServiceType>
                <PackagingType>FEDEX_BOX</PackagingType>
    
    <TotalWeight>
       <Units>LB</Units>
       <Value>20.0</Value>
    </TotalWeight>
    <Shipper>
       <AccountNumber>XXXXXX</AccountNumber>
       <Contact>
          <CompanyName>FedEx-WAPI</CompanyName>
          <PhoneNumber>XXXXXX</PhoneNumber>
       </Contact>
       <Address>
          <StreetLines>SN2000 Test Meter 8</StreetLines>
          <StreetLines>10 Fedex Parkway</StreetLines>
          <City>AUSTIN</City>
          <StateOrProvinceCode>TX</StateOrProvinceCode>
          <PostalCode>XXXXXX</PostalCode>
          <CountryCode>US</CountryCode>
       </Address>
    </Shipper>
    <Recipient>
       <AccountNumber>XXXXXX</AccountNumber>
       <Contact>
          <PersonName>Recipient Contact</PersonName>
          <PhoneNumber>XXXXXX</PhoneNumber>
       </Contact>
       <Address>
          <StreetLines>Recipient Address Line 1</StreetLines>
          <StreetLines>Recipient Address Line 2</StreetLines>
          <City>Collierville</City>
          <StateOrProvinceCode>TN</StateOrProvinceCode>
          <PostalCode>XXXXXX</PostalCode>
          <CountryCode>US</CountryCode>
       </Address>
    </Recipient>
    <ShippingChargesPayment>
       <PaymentType>SENDER</PaymentType>
       <Payor>
          <ResponsibleParty>
             <AccountNumber>XXXXXX</AccountNumber>
             <Tins>
                <TinType>BUSINESS_STATE</TinType>
                <Number>123456</Number>
             </Tins>
          </ResponsibleParty>
       </Payor>
    </ShippingChargesPayment>
    <RateRequestTypes>LIST</RateRequestTypes>
    <PackageCount>1</PackageCount>
    <RequestedPackageLineItems>
       <SequenceNumber>1</SequenceNumber>
       <GroupNumber>1</GroupNumber>
       <GroupPackageCount>1</GroupPackageCount>
       <Weight>
          <Units>LB</Units>
          <Value>20.0</Value>
       </Weight>
       <Dimensions>
          <Length>12</Length>
          <Width>12</Width>
          <Height>12</Height>
          <Units>IN</Units>
       </Dimensions>
       <ContentRecords>
          <PartNumber>XXXXXX</PartNumber>
    <ItemNumber>XXXXXX</ItemNumber>
                      <ReceivedQuantity>12</ReceivedQuantity>
                      <Description>ContentDescription</Description>
                   </ContentRecords>
                </RequestedPackageLineItems>
             </RequestedShipment>
          </RateRequest>
       </SOAP-ENV:Body>
    

    And all above xml element is dynamically transfered from NetSuite Sales Order data(and also data from location, currency, custom record types, settings), We got those data(in expected order), using the Google Project's X2JS to convert from JSON to XML.

    Next resolve the across domain ajax call by using NetSuite 2.0 API https.post

    var response = https.post({
                url: 'https://wsbeta.fedex.com:443/web-services',
                body: new X2JS().json2xml_str(PostDataObj),
                headers: {
                    "Accept": "image/gif, image/jpeg, image/pjpeg, text/plain, text/html, */*",
                    "Content-Type": "text/xml",
                    "Access-Control-Allow-Origin": '*',
                }
            });
    

    Need to thanks this thread for useful notes: https://stackoverflow.com/questions/62523251/creating-a-http-post-call-for-fedex-web-services  

    FedEx Webservices Errors 

    • Response Code 400 or 500
      • Accross domain Error
      • Schema Error 
    • <cause>UnrecoverableClientError</cause>
      <code>SchemaError</code>
      <desc>validation failure for RateRequest Error:cvc-complex-type.2.4.a: Invalid content was found starting with element

      • Check the XML object sent to FedEx, the order of the element MUST match to the WDSL schema
      • Check the XML object elements if there is addtional property
    • FedEx 404 Unrecoverable ClientError
      • Double check the target server url address
      • test url: https://wsbeta.fedex.com:443/web-services
      • production url: https://ws.fedex.com:443/web-services

     

    Share tools used between XML and JSON

    • Testing/xmlTOjson/jsonTOxml: https://peterdaugaardrasmussen.com/json2xml/
    • Source Code: https://github.com/abdolence/x2js
      • Useful Javascript framework for convention between XML and JSON
    • Format XML: https://jsonformatter.org/xml-formatter
    • Format JSON: https://www.sojson.com/json/json_online.html
    • XML compare/diff https://extendsclass.com/xml-diff.html
      • Be careful, the result of the xml diff is not in element order, the diff not acurate for FedEx test
    • Comparing XML files: https://extendsclass.com/xml-diff.html
    • POSTMAN simulate and compare the input and output
      • Powerful and Easy to use
    • XML Formatter https://www.freeformatter.com/xml-formatter.html
      • Make XML clean and clear
    • JSON Reviewer/Formatter http://jsonviewer.stack.hu 
      • Clean and clear
    • JSON to XML https://www.convertjson.com/json-to-xml.htm

     

    Estimate Rate

    • UPS https://www.theupsstore.com/tools/estimate-shipping-cost
    • FedEx https://www.fedex.com/en-us/online/rating.html

     

    Integrate with existing UPS integration

    While end-use switching shipping carries, we need to clean up the backend package list data and rebuild for current shipping carrier, since UPS and FedEx are using DIFFERENT formating and propertys.


    纠正错误,欢迎探讨:
    打开微信-发现-扫一扫
  • 相关阅读:
    软件开发各列阶段需要达到的目标和生成的成果
    SQL Server 2005 Express附加数据库为“只读”的解决方法
    System.Web.HttpException: Request timed out.
    [收藏]javascript keycode大全
    MS SQL Server中的CONVERT日期格式化大全
    转贴 对于大型公司项目平台选择j2ee的几层认识(一)
    项目经理:做好项目开始阶段的九条经验(1) 项目 技术应用
    .Net Core 实现账户充值,还款,用户登录(WebApi的安全)
    JS如何通过月份,计算月份相差几个月
    .Net core Api后台获取数据,异步方法中,数据需采用Linq分页
  • 原文地址:https://www.cnblogs.com/backuper/p/FedEx_Package_Rate_Integration_with_NetSuite.html
Copyright © 2020-2023  润新知