页面树结构
转至元数据结尾
转至元数据起始

正在查看旧版本。 查看 当前版本.

与当前比较 查看页面历史

« 前一个 版本 14 下一个 »

eTower为每一个API客户提供一个API令牌和对应的密钥。密钥只用作MAC SHA-1签名,密钥不会在请求中进行传输。每一个请求必须包含身份认证信息以证实发送方的身份和权限。

入门

根据以下步骤快速完成身份认证。 

第一步:获取 Token 和 Key 



测试环境





正式环境

1

Host

http://qa.etowertech.comHosthttp://cn.etowertech.com 
2

Token

test5AdbzO5OEeOpvgAVXUFE0A

Token请于集成商联系
3

Key

79db9e5OEeOpvgAVXUFWSD

key

请于集成商联系

第二步:添加请求报文头部信息

Request Headers

X-WallTech-Date

请求发送时间

时间格式为 RFC1123 Format

格式:EEE, DD MM YYYY HH:MM:SS ZZZ

样例:Thu, 04 Nov 2021 03:39:28 GMT

注意:格林威治时间(GMT),是北京时间(GMT+8)减去8小时。

当服务器接收时间与发送时间相差15分钟以上,服务端拒绝请求。

Authorization

签名认证

格式:WallTech <Token>:<Base64 Encoded HMAC SHA-1 Hash>

说明:

    • <Token>:API 令牌 Token。
    • <Base64 Encoded HMAC SHA-1 Hash> :

Java代码描述:

通过将API令牌Key,如Key=79db9e5OEeOpvgAVXUFWSD,使用SecretKeySpec类对Key进行HmacSHA1方式的加密,再初始化一个算法为HmacSHA1的Mac对象,然后使用key初始化这个Mac对象。最后将Mac对象处理为Byte,然后对其进行Base64转换操作。具体加密方式请参考:

Content-Typeapplication/json
Acceptapplication/json

第三步:开始您的API对接

您现在可以开始将 eTower API集成到您的测试/正式环境中。 有关所有 API 操作的完整信息,请参阅通用 API 文档。 如需技术帮助,请发送电子邮件至

etowercs@walltechsystem.cn 。


加密样例

Python Demo
import requests
from datetime import datetime
import hmac
import base64
from hashlib import sha1


#define function
def buildWalltechDate():
    now = datetime.utcnow().strftime('%a, %d %b %Y %H:%M:%S GMT')
    return now

def buildAuthorization(now, key, token):
    signedString = bytes('POST\n%s\n%s' % (now, url), encoding='utf-8')
    signSha1 = hmac.new(key, signedString, sha1).digest()
    sign = base64.b64encode(signSha1).decode()
    authorization = 'WallTech %s:%s' % (token, sign)
    return authorization

def buildHeaders(now, authorization):
    headers = {
        "Content-Type": "application/json",
        "X-WallTech-Date": "%s" % (now),
        "Authorization": "%s" % (authorization),
        "Accept": "application/json",
    }
    return headers

#main thread

#your token && your key
token = "test9gPQuBsyNIhzTylSvh2"
key = bytes("TbKVYZ35YZF5RwODwZJrBA", encoding='utf-8')
#build headers
walltechDate = buildWalltechDate()
authorization = buildAuthorization(walltechDate, key, token)
headers = buildHeaders(walltechDate, authorization)

#createShipment
#your request url && your request method
method = "POST"
url = "http://qa.etowertech.com/services/shipper/orders"
#your data format of json string
data = "[\r\n  {\r\n    \"country\": \"US\",\r\n    \"serviceCode\": \"UBI.CN2US.STD\",\r\n    \"referenceNo\": \"123456dd78\",\r\n    \"recipientCompany\": \"Maxine Frost\",\r\n    \"recipientName\": \"Maxine Frost\",\r\n    \"addressLine1\": \"321 SW Water St.\",\r\n    \"addressLine2\": \"\",\r\n    \"addressLine3\": \"\",\r\n    \"phone\": \"07729717180\",\r\n    \"city\": \"Peorial\",\r\n    \"state\": \"Illinois\",\r\n    \"postcode\": \"61602\",\r\n    \"batteryType\": \"No Battery\",\r\n    \"batteryPacking\": \"No Battery\",\r\n    \"weight\": 2,\r\n    \"nativeDescription\": \"螺钉\",\r\n    \"recipientTaxId\": \"\",\r\n    \"description\": \"NUT\",\r\n    \"invoiceCurrency\": \"USD\",\r\n    \"invoiceValue\": 10,\r\n    \"packingList\": \".\",\r\n    \"sku\": \" 螺钉\",\r\n    \"orderItems\": [\r\n      {\r\n        \"nativeDescription\": \"螺钉\",\r\n        \"itemNo\": \"NUT\",\r\n        \"sku\": \"螺钉\",\r\n        \"description\": \"POLYETHYLENE,GRV<.94,VIS >1.44\",\r\n        \"hsCode\": \"0101100010\",\r\n        \"originCountry\": \"CHINA\",\r\n        \"unitValue\": 10,\r\n        \"itemCount\": 1,\r\n        \"weight\": 0.1\r\n      }\r\n    ]\r\n  }\r\n]"

#printLabel
#your request url && your request method
method = "POST"
url = "http://qa.etowertech.com/services/shipper/labels"

#forecast
#your request url && your request method
method = "POST"
url = "http://qa.etowertech.com/services/shipper/manifests"

#trackingEvents
#your request url && your request method
method = "POST"
url = "http://qa.etowertech.com/services/shipper/trackingEvents"

#request
#you should change your data to match the suitable request
response = requests.request(method, url, headers=headers, data=data.encode('utf-8'))
print(response.text)






Table of Contents ×

  • 无标签