<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                **生產平臺 Matrix** 是生產者定義發行 Token 的平臺,該平臺提供商品及其 Token 定義、信息查詢、物流信息同步等服務。具體接口如下: [TOC] ## 演示環境 演示環境:https://matrixdemo.stringon.com 接口地址:https://matrixdemo.stringon.com/api/…… 請在演示環境注冊測試賬號,登錄后通過訪問:賬戶 > 安全設置,獲取 apiKey 和 apiSecret。 > **注**:以下接口可使用統一的api_key + api_secret簽名方式訪問,如: >* api_key: 1c2966df9ea7480ebb29dc863404a7af >* api_secret: 780221dac2634d7b9a3aba1ebe97f0b4 **假設傳送以下參數:** api_key: 1c2966df9ea7480ebb29dc863404a7af spu\_ids: 13,14 origins: 0t5e209wv04tmymw nonce_str: bFC253c29116D8f3 // nonce_str: 是一個隨機數,長度在8~32位之間,主要是為保證簽名不可預測 > **簽名過程如下** > 1. 參數按字典序排列,拼成URL鍵值對的格式(key1=value1&key2=value2… ),參數的值為空不參與簽名,拼接成字符串stringA; stringA = "api_key=1c2966df9ea7480ebb29dc863404a7af&nonce_str=bFC253c29116D8f3&origins=0t5e209wv04tmymw&spu_ids=13,14" >**(請注意:如果參數值中存在特殊字符,如:空格、=、/ 等,不需做URL Encoder)** > 2. 在stringA最后拼接上apiSecret得到stringSignTemp字符串,并對stringSignTemp進行MD5運算,再將得到的字符串所有字符轉換為大寫,得到signature值 stringSignTemp = stringA + api_secret; 最終:stringSignTemp = "api_key=1c2966df9ea7480ebb29dc863404a7af&nonce_str=bFC253c29116D8f3&origins=0t5e209wv04tmymw&spu_ids=13,14780221dac2634d7b9a3aba1ebe97f0b4" > 3. signature = MD5(stringSignTemp).toUpperCase(); 經MD5運算,再轉大寫,將得到:signature=316AE3E43E6BB3D6196F298CE99B5195 > 4. 最終得到最終發送的數據: >* **GET請求參數:** api_key=1c2966df9ea7480ebb29dc863404a7af&spu\_ids=13,14&origins=0t5e209wv04tmymw&nonce_str=bFC253c29116D8f3&signature=316AE3E43E6BB3D6196F298CE99B5195 >* **POST請求:** **Content-Type: application/x-www-form-urlencoded** api_key=1c2966df9ea7480ebb29dc863404a7af spu\_ids=13,14 origins=0t5e209wv04tmymw nonce_str=bFC253c29116D8f3 signature=316AE3E43E6BB3D6196F298CE99B5195 > **Content-Type: application/json** { "api_key": "1c2966df9ea7480ebb29dc863404a7af", "spu_ids": "13,14", "origins": "0t5e209wv04tmymw", "nonce_str": "bFC253c29116D8f3", "signature": "316AE3E43E6BB3D6196F298CE99B5195" } ## 1. 商品接口 ### 1.1 獲取商品類目 接口名稱:獲取商品類目 請求數據類型:X-WWW-FORM-URLENCODED 響應類型:JSON 狀態:有效 接口描述:獲取所有商品類目信息 ~~~[api] get:/api/v2/prod/category/list <<< success { "code": 0, "msg": "操作成功", "data": [ { "id": 2, "parent_id": 0, "cat_name": "男人", "sort": 20000, "status": 1, "created_at": "2019-04-11T18:55:43.000Z", "updated_at": "2019-04-11T18:55:43.000Z", "children": [], "root": true }, { "id": 3, "parent_id": 0, "cat_name": "食品", "sort": 30000, "status": 1, "created_at": "2019-04-11T18:55:43.000Z", "updated_at": "2019-04-11T18:55:43.000Z", "children": [], "root": true }, ... ] } <<< error ~~~ **返回值** | 參數名 | 參數類型 | 描述 | | --- | --- | --- | | code | integer | 0:成功;500: 系統內部錯誤 | | msg | string | 錯誤原因 | | data | array(object) | 返回數據 | | id | integer | 分類ID | | cat_name | string | 分類名稱 | | parent_id | integer | 父分類ID | | sort | integer | 顯示順序 | | status | integer | 狀態:1=可用; 2=停用 | | created_at | integer | 創建時間 | | updated_at | integer | 更新時間 | | children | array | 子分類數組 | | root | boolean | 是否為根結點 | ### 1.2 獲取商品 ID 接口名稱: 獲取 Token 的商品 ID(spu_id、sku_id) 請求數據類型:X-WWW-FORM-URLENCODED 響應類型:JSON 狀態:有效 接口描述:根據 Token origin,獲取商品 spu_id 和 sku_id,多個 Token origin 之間用逗號分隔 ~~~[api] post:/api/v2/prod/spu/find origins#原始Token標識,多個Token之間逗號分隔,如:0t5e209wv04tmymw,ap4ac9rae3tedvh0 producer_ids#按生產商ID查詢,多個生產商ID之間用逗號分隔,如:190417552262,190417969915 <<< success { "code": 0, "msg": "操作成功", "data": [ { "origin": "0t5e209wv04tmymw", // 原始Token標識 "sku_id": 54, // Matrix平臺SKU ID "spu_id": 15 // Matrix平臺SPU ID }, { "origin": "ap4ac9rae3tedvh0", "sku_id": 140, "spu_id": 25 } ] } <<< error ~~~ **返回值** | 參數名 | 參數類型 | 描述 | | --- | --- | --- | | code | integer | 0:成功,600: 參數不正確;500: 系統內部錯誤 | | msg | string | 錯誤原因 | | data | array(object) | 返回數據 | | origin | string | 原始Token標識 | | sku_id | integer | Matrix平臺SKU ID | | spu_id | integer | Matrix平臺SPU ID | ### 1.3 獲取商品 SKU 信息 接口名稱: 獲取商品 SKU 信息 請求數據類型:X-WWW-FORM-URLENCODED 響應類型:JSON 狀態:有效 接口描述:根據原始Token標識,獲取商品 SKU 信息 ~~~[api] get:/api/v2/prod/sku/get *origin#Token原始標識 <<< success { "code": 0, "msg": "成功" "data": { "spu_id": 25, "uid": 190420811977, "caption": "女子運動鞋 Nike Air Max 720", "unit_name": "雙", "subcaption": "Nike Air Max 720 女子運動鞋搭載 Nike 革命性的大型 Air 氣墊,為足下注入許多空氣,帶來非凡舒適腳感。Air Max 的大體積設計讓你耳目一新?當然是大體積的好。", "shortcaption": null, "type": 1, "belongs": [ 1 ], "keywords": [ "Nike Air Max 720 女子運動鞋搭載 Nike 革命性的大型 Air 氣墊", "為足下注入許多空氣", "帶來非凡舒適腳感。Air Max 的大體積設計讓你耳目一新?當然是大體積的好。" ], "specs": [ { "key": "1555904570707", "name": "顏色", "values": [ { "key": "1555904570718", "name": "金屬銀/深藏青", "image": { "res_key": "http://img.stringon.com/33b033dfcc8e4effa78fcf0ead8716cd" } }, { "key": "1555905697622", "name": "白金色/氧氣紫/太空紫/氧氣紫", "image": { "res_key": "http://img.stringon.com/83c767fbb4f14f359e8e483f6a9896b3" } }, { "key": "1555905824401", "name": "白色/激光紫紅/上升粉", "image": { "res_key": "http://img.stringon.com/c7134860c9df4a869f3a92559a00f78b" } } ] }, { "key": "1555905923663", "name": "尺碼", "values": [ { "key": "1555905923669", "name": "35.5" }, { "key": "1555906332700", "name": "36" }, { "key": "1555906335480", "name": "36.5" }, { "key": "1555906349430", "name": "37.5" }, { "key": "1555906353155", "name": "38" }, { "key": "1555906361917", "name": "38.5" }, { "key": "1555906367509", "name": "39" }, { "key": "1555906374495", "name": "40.5" }, { "key": "1555906378208", "name": "41" }, { "key": "1555906380537", "name": "42" } ] } ], "params": [], "slideshow": [ { "res_key": "http://img.stringon.com/e3f1ad6569a7407ea4b14bb3c59b433d" }, { "res_key": "http://img.stringon.com/f54e3dd9fdbb4ccfb740f9f05f76b39d" }, { "res_key": "http://img.stringon.com/ee6de0839a6942cba7a0672e0fcef8d3" } ], "intro_imgs": [ { "res_key": "http://img.stringon.com/40330b6c3bfb4294b1b57ad3546ecc3b" }, { "res_key": "http://img.stringon.com/4dac8935730e411898621ef8ee1c4e18" }, { "res_key": "http://img.stringon.com/3cfc2c09dc3649849a4bcc6846acc8cb" } ], "brand_id": null, "group_id": null, "delivery_type": 1, "delivery_start": 3, "delivery_end": null, "status": 1, "created_at": "2019-04-22T04:13:23.000Z", "updated_at": "2019-04-22T04:16:03.000Z", "sku_list": [ { "sku_id": 140, "spu_id": 25, "uid": 190420811977, "specs": { "image": { "res_key": "http://img.stringon.com/c7134860c9df4a869f3a92559a00f78b", }, "尺碼": "37.5", "顏色": "白色/激光紫紅/上升粉" }, "spe_code": null, "bar_code": null, "cost": "300.00", "status": 0, "created_at": "2019-04-22T04:13:23.000Z", "updated_at": "2019-04-22T04:13:23.000Z" } ] } } <<< error ~~~ **返回值** | 參數名 | 參數類型 | 描述 | | --- | --- | --- | | code | integer | 0:成功,600: 參數不正確; 602: origin不存在;500: 系統內部錯誤 | | message | string | 錯誤原因 | | data | array | sku信息 | | spu_id | integer | supID | | uid | integer | 生產商id | | caption | string | 商品名稱 | | unit_name | string | 單位 | | subcaption | string | 商品副標題 | | shortcaption | string | 商品短標題 | | type | string | 商品類型 0: 實物商品, 1: 虛擬商品 | | belongs | array(string) | 所屬分類數組 | | keywords | array(string) | 搜索關鍵字數組 | | specs | array(object ) | 規格項數組 | | params | array(object) | 參數數組 | | slideshow | array(object) | 輪播圖url數組 | | intro_imgs | array(string) | 商品詳情圖url數組 | | brand_id | integer | 品牌商id | | group_id | integer | 分組id | | delivery_type | integer | 發貨類型:1=提貨申請后x天發貨; 2=固定時段 | | delivery_start | date | 發貨起始時間 | | delivery_end | date | 發貨結止時間 | | status | integer | 狀態:0=維護中; 1=待發布; 2=已發布; | | created_at | date | 創建時間 | | updated_at | date | 修改時間 | | sku_list | array(object) | sku信息 | | sku_id | integer | skuID | | spu_id | integer | supID | | uid | integer | 生產商id | | specs | array(object ) | 規格項數組 | | spe_code | string | 規格編碼 | | bar_code | string | 條碼 | | cost | string | 成本 | | status | integer | 狀態:0=未發布; 1=已發布; | | created_at | date | 創建時間 | | updated_at | date | 修改時間 | ### 1.4 獲取商品 SPU 信息 接口名稱:獲取商品 SPU 信息 請求數據類型:X-WWW-FORM-URLENCODED 響應類型:JSON 狀態:有效 接口描述:獲取指定商品 spu_ids 的完整商品信息,內容包括:商品信息、全部 SKU 信息 參數:spu_ids、origins 至少一項不為空 ~~~[api] post:/api/v2/prod/sync/spu spu_ids#一個或多個商品SPU ID,多個之間用逗號分隔 origins#一個或多個合約名稱,多個之間用逗號分隔 <<< success { "code": 0, "msg": "操作成功", "data": [ { "spu_id": 64, "caption": "鋼筆", "unit_name": "支", "subcaption": "描述描述", "shortcaption": null, "type": 1, "belongs": [ 21 ], "keywords": [ "鋼筆關鍵字" ], "specs": [ { "key": "1557210984839", "name": "規格1", "values": [ { "key": "1557210984854", "name": "規格1111", "image": { "res_key": "http://img.stringon.com/00cec074eef64a25b1f289b8ec4ef2a3", } }, { "key": "1557211054760", "name": "規格222", "image": { "res_key": "http://img.stringon.com/638c9045c89a45eea8244e0c2cba3697", } } ] } ], "params": [], "slideshow": [ { "res_key": "http://img.stringon.com/00cec074eef64a25b1f289b8ec4ef2a3", }, { "res_key": "http://img.stringon.com/3529218792ec4c6e9ed9da5737eb18dd", } ], "intro_imgs": [ { "res_key": "http://img.stringon.com/587973ee57874669bac38b9ac0163098", }, { "res_key": "http://img.stringon.com/638c9045c89a45eea8244e0c2cba3697", } ], "brand_id": null, "group_id": 18, "delivery_type": 2, "delivery_start": 1557215077, "delivery_end": 1557215077, "status": 2, "created_at": "2019-05-07T06:38:07.000Z", "updated_at": "2019-05-07T07:54:51.000Z", "sku_list": [ { "sku_id": 279, "spu_id": 64, "specs": { "image": { "res_key": "http://img.stringon.com/00cec074eef64a25b1f289b8ec4ef2a3", }, "規格1": "規格1111" }, "spe_code": "22", "bar_code": "11", "cost": "11.00", "status": 1, "created_at": "2019-05-07T06:38:07.000Z", "updated_at": "2019-05-07T06:44:01.000Z", "contract_list": [ { "contract_id": 874, "origin": "39079a1p8t8gt0ky", "sku_id": 279 } ] }, { "sku_id": 280, "spu_id": 64, "specs": { "image": { "res_key": "http://img.stringon.com/638c9045c89a45eea8244e0c2cba3697", }, "規格1": "規格222" }, "spe_code": "22", "bar_code": "11", "cost": "11.00", "status": 1, "created_at": "2019-05-07T06:38:07.000Z", "updated_at": "2019-05-07T06:44:01.000Z", "contract_list": [ { "contract_id": 875, "origin": "rp78an19238me8eg", "sku_id": 280 } ] } ] } ] } <<< error ~~~ **返回值** | 參數名 | 參數類型 | 描述 | | --- | --- | --- | | code | integer | 0:成功,600: 參數不正確;500: 系統內部錯誤 | | message | string | 錯誤原因 | | data | array | 返回數據 | | spu_id | integer | spuid | | caption | string | 商品名稱 | | subcaption | string | 商品副標題 | | shortcaption| string | 商品短標題 | | type | string | 商品類型 0: 實物商品, 1: 虛擬商品 | | belongs | array(string) | 所屬分類數組 | | keywords | array(string) | 搜索關鍵字數組 | | specs | array(object ) | 規格項數組 | | params | array(object) | 參數數組 | | slideshow | array(string) | 輪播圖url數組 | | intro_imgs | array(string) | 商品詳情圖url數組 | | brand_id | string | 品牌商id | | status | integer | 0:維護中, 1:待發布, 2:已發布 | | created_at | date | 創建時間 | | updated_at | date | 修改時間 | | sku_list | array(object) | sku信息 | | sku_id | integer | sku_id | | spu_id | integer | spu_id | | specs | array(object ) | 規格項數組 | | spe_code | string | 規格編碼 | | bar_code | string | 條碼 | | cost | string | 成本 | | status | integer | 0=未流通; 1=已流通(處理鎖定狀態) | | created_at | date | 創建時間 | | updated_at | date | 修改時間 | | batch_list | array(object) | 批次信息 | | symbol | string | token標識 | | sku_id | integer | sku_id | | spu_id | integer | spu_id | | uid | integer | 生產商id | | publish_id | integer | 流水號 | | total_supply | integer | 發行量 | | status | integer | 1=待發行; 2=已發行; 3=已作廢; 4=已流通 | | created_at | date | 創建時間 | | updated_at | date | 修改時間 | | transfer_to_add | string | 生產商token回收地址 | ### 1.5 獲取已變更商品列表 接口名稱:獲取已變更商品列表 請求數據類型:X-WWW-FORM-URLENCODED 響應類型:JSON 狀態:有效 接口描述:根據指定同步時間,獲取該時間之后的變更商品列表 ~~~[api] post:/api/v2/prod/sync/list *last_time#上次同步時間,格式為:1552361703000,單位:毫秒 int:producer_id#可空,生產商ID,查詢指定生產商的商品變更信息 <<< success { "code": 0, "msg": "操作成功", "data": [ "spu_id":8 ] } <<< error ~~~ **返回值** | 參數名 | 參數類型 | 描述 | | --- | --- | --- | | code | integer | 0:成功;600: 參數不正確;500: 系統內部錯誤 | | msg | string | 錯誤原因 | | data | object | 返回數據 | | spu_id | integer | 商品id | ### 1.6 查詢簡單商品SKU信息 接口名稱:簡單商品SKU信息 請求數據類型:X-WWW-FORM-URLENCODED 或 JSON 響應類型:JSON 狀態:有效 接口描述:根據憑證名稱(origin)和sku id查詢簡單商品信息 請求參數說明: origins和sku_ids:至少一項不為空; **請求類型為:application/x-www-form-urlencoded** origins[0]=hfh1ukjr1hxmxdfg origins[1]=hfh1ukjr1hxmxdfg sku_ids[0]=392 sku_ids[1]=393 **請求類型為:application/json** { "origins":["hfh1ukjr1hxmxdfg","gp0ymumbmmq42fty"], "sku_ids": [392,393] } ~~~[api] post:/api/v2/prod/sku/find array:origins#憑證名稱,數組類型,如:"origins":["hfh1ukjr1hxmxdfg","gp0ymumbmmq42fty"] array:sku_ids#商品SKU ID,數組類型,如:"sku_ids": [392,393] <<< success { "code": 0, "msg": "操作成功", "data": [ { "sku_id": 392, "specs": { "image": { "res_key": "http://img.stringon.com/587973ee57874669bac38b9ac0163098" }, "規格名": "規格值1" }, "spu_id": 82, "caption": "海淘商品", "unit_name": "個", "origins": [ "hfh1ukjr1hxmxdfg" ] }, { "sku_id": 393, "specs": { "image": { "res_key": "http://img.stringon.com/76c194c37f48472d8ef1d566e34d055f" }, "規格名": "規格值2" }, "spu_id": 82, "caption": "海淘商品", "unit_name": "個", "origins": [ "gp0ymumbmmq42fty" ] } ] } <<< error ~~~ **返回值** | 參數名 | 參數類型 | 描述 | | --- | --- | --- | | code | integer | 0:成功;600: 參數不正確;500: 系統內部錯誤 | | msg | string | 錯誤原因 | | data | object | 返回數據 | | spu_id | integer | 商品id | ## 2. 提貨接口 ### 2.1 獲取提貨商家回收地址 接口名稱: 獲取提貨商家回收地址 請求數據類型:X-WWW-FORM-URLENCODED 響應類型: JSON 狀態:有效 接口描述: 獲取提貨商家回收地址 ~~~[api] post:/api/v2/pickup/fetchAddr *origin#token原始標識 <<< success { code:0 msg: '成功' data:{ address: 'OX0DGGSDFFDG' } } <<< error ~~~ **返回值** | 參數名 | 參數類型 | 描述 | | --- | --- | --- | | code | integer | 0:成功;2102: 提貨商品不存在;500: 系統內部錯誤 | | msg | string | 錯誤原因 | | data | object| 返回數據 | | address | string | 地址 | ### 2.2 提貨申請 接口名稱:提貨申請 請求數據類型:X-WWW-FORM-URLENCODED 響應類型:JSON 狀態:有效 接口描述:客戶提貨申請 ~~~[api] post:/api/v2/pickup/apply *txid#交易id *out_pickup_no#商城提貨單號 int:amount#提貨數量 *consignee#收貨人 *cellphone#收貨人手機號 area#地區 *address#收貨地址 zipcode#郵編 *notify_url#處理結果,通知商城 <<< success { "code": 0, "msg": "提貨申請成功", "data": { pickup_no:生產平臺提貨單號, out_pickup_no:商城提貨單號, txid: 交易ID, status: 狀態:1=待通知廠商;2=通知廠商成功;3=通知廠商失敗;4=通知商城待發貨成功;5=通知商城待發貨失敗;6=已發貨(廠商受理成功);7=已發貨通知商城成功;8=已發貨通知商城失敗, amount: 提貨數量(從鏈上查詢得到) } } <<< error ~~~ **返回值** | 參數名 | 參數類型 | 描述 | | --- | --- | --- | | code | integer | 0:成功;405: 無權訪問 ;1021: 用戶被禁用;2700: 提貨單Txid已存在;2600:txid校驗失敗;2601:提貨數量與鏈上不一致;2701:未查到對應的商品;2702:發行地址與鏈上地址不一致 ;2000:提貨失敗| | msg| string | 錯誤原因 | | data | object | 返回數據 | | pickup_no | string | 生產平臺提貨單號 | | out_pickup_no | string | 商城提貨單號 | | txid | string | 交易ID | | status | integer | 狀態:1=待通知廠商;2=通知廠商成功;3=通知廠商失敗;4=通知商城待發貨成功;5=通知商城待發貨失敗;6=已發貨(廠商受理成功);7=已發貨通知商城成功;8=已發貨通知商城失敗 | | amount | integer | 提貨數量(從鏈上查詢得到) | ### 2.3 發貨通知 接口名稱:發貨通知 請求數據類型:APPLICATION/JSON 響應類型:JSON 狀態:有效 接口描述:由生產商ERP系統調用,真實發貨后,通知生產平臺提貨單狀態變化 **請求參數** ~~~ { "pickup_no": "11001904028341836781", // 生產平臺提貨單唯一編號 "out_delivery_no": "1001201112", // ERP發貨單唯一編號 "receipt_list": [ // 生產商發貨信息及Token信息 { "txid": "0C697F48392907A015959A00DB1CC6AF", // 交易ID "waybill_no": "01203131231231", // 運單號 "serial_no": "01203131231231", // 商品編碼,可空 "logistic_no": "01203131231231", // 物流商編號,可空 "logistic_name": "順風" // 物流商名稱,可空 } ] } ~~~ ~~~[api] post:/api/v2/pickup/delivered headers:[ {"egg_matrix_api_key":"aa"}, {"egg_matrix_sign":"bb"}, {"ts":4323435} ] body:{ "pickup_no": "11001904028341836781", "out_delivery_no": "1001201112", "receipt_list": [ { "txid": "0C697F48392907A015959A00DB1CC6AF", "waybill_no": "01203131231231", "serial_no": "01203131231231", "logistic_no": "01203131231231", "logistic_name": "順風" } ] } <<< success { "code": 0, "msg": "發貨通知成功", "data": { "pickup_no": "11001904195198261193", // 生產平臺提貨單唯一編號 "out_delivery_no": "1001201112", // ERP發貨單唯一編號 "status": 6, // 狀態:1=待通知廠商;2=通知廠商成功;3=通知廠商失敗;4=通知商城待發貨成功;5=通知商城待發貨失敗;6=已發貨(廠商受理成功);7=已發貨通知商城成功;8=已發貨通知商城失敗 "amount": 1 // 發貨數量(從鏈上查詢得到) } } <<< error ~~~ **返回值** | 參數名 | 參數類型 | 描述 | | --- | --- | --- | | code | integer | 0:成功;405: 無權訪問 ;1021: 用戶被禁用;2100: 提貨單不存在;2600:txid校驗失敗;2706:發貨Txid已存在;2701:未查到對應的商品;2702:發行地址與鏈上地址不一致 ;2703:提貨數量與發貨數量不一致;2704:提貨生產商與發貨商不一致;2705:提貨憑證轉入地址與客戶地址不一致;2300:提貨單狀態有誤;2010:發貨通知保存失敗 | | msg| string | 信息 | | data | object | 返回結果 | pickup_no | string | 生產平臺提貨單號 | | out_delivery_no | string | ERP發貨單唯一編號 | | status | integer | 狀態:1=待通知廠商;2=通知廠商成功;3=通知廠商失敗;4=通知商城待發貨成功;5=通知商城待發貨失敗;6=已發貨(廠商受理成功);7=已發貨通知商城成功;8=已發貨通知商城失敗 | | amount | integer | 提貨數量(從鏈上查詢得到) | ### 2.4 商城提貨單查詢 接口名稱:商城提貨單查詢 請求數據類型:X-WWW-FORM-URLENCODED 響應類型:JSON 狀態:有效 接口描述:請求參數:pickup\_no:生產平臺提貨單號、out\_pickup\_no:商城平臺提貨單號,二選一查詢 ~~~[api] post:/api/v2/pickup/findForMall pickup_no#生產平臺提貨單號 out_pickup_no#商城平臺提貨單號 txid#提貨上鏈交易ID delivered_txid#發貨上鏈交易ID waybill_no#發貨運單號 time_range#查詢時間段,格式為:[1552060800000,1552147200000],單位:毫秒 page_no#查詢頁 page_size#每頁條數 <<< success { "code": 0, "msg": "操作成功", "data": [ { "pickup_no": "11001904181154785525", "out_pickup_no": "111119", "txid": "8866CB397916001E1595995158C40D76", "tx_type": "astro.token.exchange", "symbol": "Victor1", "symbol_child": "Victor1_ex_36688a66-2805-4798-98eb-62c13914b0fb,Victor1_ex_366d1ce7-0fb2-4ddb", "from_addr": "AfmAE1K-T8V-y4ObshuwV2faNMOdNMYW0Q", "to_addr": "ARJtq6Q46oTnxDwvVqMgDtZeNxs7Ybt81A", "amount": 1, "status": 6, "created_at": "2019-04-18T06:49:09.000Z", "updated_at": "2019-04-18T06:51:04.000Z", "receipt_list": [ { "txid": "0C697F48392907A015959A00DB1CC6AF", "tx_type": "astro.token.deliver", "symbol": "Victor1", "symbol_child": "Victor1_ex_36688a66-2805-4798-98eb-62c13914b0fb", "from_addr": "ARJtq6Q46oTnxDwvVqMgDtZeNxs7Ybt81A", "to_addr": "AfmAE1K-T8V-y4ObshuwV2faNMOdNMYW0Q", "amount": 1, "serial_no": "01203131231231", "waybill_no": "01203131231231", "logistic_no": "01203131231231", "logistic_name": "順風", "created_at": "2019-04-18T06:51:04.000Z", "updated_at": "2019-04-18T06:51:04.000Z" } ] } ] "pagination": { "current": 1, "pageSize": 10, "total": 3 } } <<< error ~~~ **返回值** | 參數名 | 參數類型 | 描述 | | --- | --- | --- | | code | integer | 0:成功;600:參數不正確;500:系統內部錯誤 | | msg | string | 錯誤原因 | | data | array | 返回數據 | | pickup_no | string | 生產平臺提貨單號 | | out_pickup_no | string | 商城提貨單號 | | status | integer | 狀態:1=待通知廠商;2=通知廠商成功;3=通知廠商失敗;4=通知商城待發貨成功;5=通知商城待發貨失敗;6=已發貨(廠商受理成功);7=已發貨通知商城成功;8=已發貨通知商城失敗 | | txid | string | 商城提貨單號 | | tx_type | string | 合約分類: astro.token.offer=增發; astro.token.create=發行; astro.token.exchange=提貨; astro.token.deliver=發貨; astro.token.change=換貨; astro.token.refund=退貨 | | symbol | string | token名稱 | | symbol_child | string | 新token名稱 | | from_addr | string | 用戶轉出Token A地址,也做為A''接收地址 | | to_addr | string | 生產商接收Token A地址 | | amount | integer | 數量 | | created_at | date | 訂單時間 | | updated_at | date | 修改時間 | | receipt_list | array(object) | | | txid | string | 商城提貨單號 | | tx_type | string | 合約分類: astro.token.offer=增發; astro.token.create=發行; astro.token.exchange=提貨; astro.token.deliver=發貨; astro.token.change=換貨; astro.token.refund=退貨 | | symbol | string | token名稱 | | symbol_child | string | 新token名稱 | | from_addr | string | 用戶轉出Token A地址,也做為A''接收地址 | | to_addr | string | 生產商接收Token A地址 | | amount | integer | 數量 | | serial_no | string | 商品序列號 | | waybill_no | string | 物流運單號(獲取運單號后,改狀態為已發貨) | | logistic_no | string | 物流商編號 | | logistic_name | string | 物流商名稱 | | pagination| object | 分頁信息 | | current | integer | 當前頁 | | total | integer | 總條數 | ### 2.5 ERP 發貨單查詢 接口名稱:ERP發貨單查詢 請求數據類型:X-WWW-FORM-URLENCODED 響應類型:JSON 狀態:有效 接口描述:發貨單查詢,請求參數:pickup\_no、out_delivery_no,二選一查詢 ~~~[api] post:/api/v2/pickup/findForErp pickup_no#生產平臺提貨單號 out_delivery_no#ERP平臺發貨單號 txid#提貨上鏈交易ID delivered_txid#發貨上鏈交易ID waybill_no#發貨運單號 time_range#查詢時間段,格式為:[1552060800000,1552147200000],單位:毫秒 page_no#查詢頁 page_size#每頁條數 <<< success { "code": 0, "msg": "操作成功", "data": { "status": 0, "message": "操作成功", "data": [ { "pickup_no": "11001904194136563266", "out_pickup_no": "111119", "txid": "8866CB397916001E1595995158C40D76", "tx_type": "astro.token.exchange", "symbol": "Victor1", "symbol_child": "Victor1_ex_36688a66-2805-4798-98eb-62c13914b0fb", "from_addr": "AfmAE1K-T8V-y4ObshuwV2faNMOdNMYW0Q", "to_addr": "ARJtq6Q46oTnxDwvVqMgDtZeNxs7Ybt81A", "amount": 1, "consignee": "張三", "cellphone": "13912345678", "area": "北京/北京市/朝陽區", "address": "望京SOHO", "zipcode": "", "erp_notify_url": "http://localhost:6001/api/v1/mockup/erpreceiver", "caption": "牙膏", "specs": { "image": null, "顏色": "白" }, "status": 6, "created_at": "2019-04-19T03:04:45.000Z", "updated_at": "2019-04-19T03:17:32.000Z" } ], "pagination": { "current": 1, "pageSize": 10, "total": 1 } } } <<< error ~~~ **返回值** | 參數名 | 參數類型 | 描述 | | --- | --- | --- | | code | integer | 0:成功;600:參數不正確;500:系統內部錯誤 | | msg | string | 錯誤原因 | | data | array | 提貨數據 | | pickup_no | string | 生產平臺提貨單號 | | out_pickup_no | string | 商城提貨單號 | | status | integer | 狀態:1=待通知廠商;2=通知廠商成功;3=通知廠商失敗;4=通知商城待發貨成功;5=通知商城待發貨失敗;6=已發貨(廠商受理成功);7=已發貨通知商城成功;8=已發貨通知商城失敗 | | txid | string | 商城提貨單號 | | tx_type | string | 合約分類: astro.token.offer=增發; astro.token.create=發行; astro.token.exchange=提貨; astro.token.deliver=發貨; astro.token.change=換貨; astro.token.refund=退貨 | | symbol | string | token名稱 | | symbol_child | string | 新token名稱 | | from_addr | string | 用戶轉出Token A地址,也做為A''接收地址 | | to_addr | string | 生產商接收Token A地址 | | amount | integer | 數量 | | area | string | 地區 | | address | string | 地址 | | zipcode | string |郵編 | | mail_notify_url | string | 回調地址 | | specs | array | 商品規格 | | caption | string | 商品名稱 | | consignee | string | 消費者姓名 | | cellphone | string | 電話 | | created_at | date | 訂單時間 | | updated_at | date | 修改時間 | | pagination| object | 分頁信息 | | current | integer | 當前頁 | | total | integer | 總條數 | ## 3. 提貨進度通知 ### 3.1 待發貨 | 已發貨通知商城平臺 接口名稱: 待發貨|已發貨通知商城平臺 請求數據類型:X-WWW-FORM-URLENCODED 響應類型:JSON 狀態:有效 接口描述:商城平臺指定的回調URL 。 *注意:請求參數只有 apiKey 和 ciphertext,ciphertext 包含的參數為解密后結果。* **生產平臺加密過程:** 1. 參數按字典序排列,拼成URL鍵值對的格式(key1=value1&key2=value2…?),參數的值為空不參與加密,拼接成字符串 stringA,如: ``` 待發貨stringA stringA="pickup_no=xxx&out_pickup_no=xxx&status=3&txid=xxx&msg_ts=1552361701472&ts=1552361703000" 已發貨stringA stringA="pickup_no=xxx&out_pickup_no=xxx&status=3&txid=xxx&receipts=[{xxx:xxx}]&msg_ts=1552361701472&ts=1552361703000" 注:receipts為JSON字符串 ``` 2. 在stringA 最后拼接上 apiSecret 得到 stringSignTemp 字符串,?并對 stringSignTemp 進行 MD5 運算,再將得到的字符串所有字符轉換為大寫,得到 sign 值,如: ``` stringSignTemp?=?stringA +?apiSecret;? sign =?MD5(stringSignTemp).toUpperCase(); ``` 3. 生成 ciphertext:采用AES-256加密方式,加密內容為:params =?stringA + "&sign=" +?sign,如: ``` apiSecret=65b9477712dc43c8a899dfb69729c600 iv =?apiSecret.substr(0,16) cipher =?crypto.createCipheriv('aes-256-cbc',?apiSecret,?iv); encrypted?=?cipher.update(params);? ciphertext =?Buffer.concat(\[encrypted,cipher.final()\]).toString('hex') ``` **解密過程:** 1. 根據參數 apiKey 獲得對應的 apiSecret; 2. 解密 ciphertext:采用 AES-256 加密方式,加密內容為:data =?stringA + "&sign=" +?sign,? ?如: ``` apiSecret = "65b9477712dc43c8a899dfb69729c600" iv =?apiSecret.substr(0,16) encrypted?=newBuffer(ciphertext,'hex') decipher =crypto.createDecipheriv('aes-256-cbc',?apiSecret,iv); decrypted?=decipher.update(encrypted); params =?Buffer.concat([decrypted,decipher.final()]).toString(); ``` 3. 從 params 字符串中去掉末尾參數,&sign=xxx,獲得字符串 stringA; 4. 在 stringA 最后拼接上 apiSecret 得到 stringSignTemp 字符串,并對 stringSignTemp 進行 MD5 運算,再將得到的字符串所有字符轉換為大寫,得到 tempSign 值; 5. 比對 tempSign 與 sign 一致,表示數據有效。 **ciphertext密文內容包括:** ``` 待發貨通知: pickup_no: Matrix平臺提貨單唯一編號; out_pickup_no: 商城平臺提貨單唯一編號; txid:發起提貨交易ID; status: 提貨單狀態; notify_ts:通知創建時間; ts:通知發送時間。 ``` ``` 已發貨通知: pickup_no: Matrix平臺提貨單唯一編號; out_pickup_no: 商城平臺提貨單唯一編號; txid:發起提貨交易ID; status: 提貨單狀態; receipts: 發貨單票據,JSON字符串數據,包括: pickup_no:Matrix平臺提貨單唯一編號; tx_type:合約類型,astro.token.exchange=提貨; astro.token.deliver=發貨; astro.token.refund=退貨; origin:原始Token標識; origin_child:新Token標識; from_addr:轉出地址; to_addr:轉入地址; amount:轉出數量; waybill_no:發貨運單號; logistic_no:物流商編號; logistic_name:物流商名稱; serial_no:商品唯一編號 ``` ~~~[api] post:商城平臺指定的回調URL *apiKey#apiKey *ciphertext#密文 <<< success { "code": 0表示成功, 非0表示失敗 "msg" } <<< error ~~~ **返回值** | 參數名 | 參數類型 | 描述 | | --- | --- | --- | | code | integer | 0:成功,非0:請求錯誤 | | msg | string | 信息 | ### 3.2 待發貨通知 ERP 平臺 接口名稱: 待發貨通知ERP平臺 請求數據類型:X-WWW-FORM-URLENCODED 響應類型:JSON 狀態:有效 接口描述:生產商ERP系統指定的回調URL 注意:請求參數只有apiKey和ciphertext,ciphertext包含的參數為解密后結果。 加解密過程參考:「待發貨|已發貨通知商城平臺」 **ciphertext密文內容包括:** ``` pickup_no:Matrix平臺提貨單唯一編號; txid:發起提貨交易ID; origin: 原始Token標識; origin_child: 提貨Token標識; sku_id: Matrix平臺商品SKU ID; caption: Matrix平臺商品名稱; spce: Matrix平臺商品規格; consignee: 提貨人姓名; cellphone: 提貨人手機號; area: 提貨人所在區域; address: 提貨人地址; zipcode: 郵編; notify_ts:通知創建時間戳(1970到生成時的毫秒數); ts:通知發送時間戳(1970到生成時的毫秒數)。 ``` ~~~[api] post:生產商ERP系統指定的回調URL *apiKey#apiKey *ciphertext#密文 <<< success { "code": 0表示成功, 非0表示失敗 "msg" } <<< error ~~~ **返回值** | 參數名 | 參數類型 | 描述 | | --- | --- | --- | | code | integer | 0:成功,非0:請求錯誤 | | msg | string | 信息 | ## 4. 退貨接口 ### 4.1 獲取退貨商家回收地址 接口名稱: 獲取退貨商家回收地址 請求數據類型:X-WWW-FORM-URLENCODED 響應類型: JSON 狀態:有效 接口描述:獲取退貨商家回收地址 ~~~[api] post:/api/v2/pickup/fetchAddr *uid#生產商id *symbol#token標識 *sku_id#sku_id <<< success { code:0 msg: '成功' data:{ address: 'OX0DGGSDFFDG' } } <<< error ~~~ **返回值** | 參數名 | 參數類型 | 描述 | | --- | --- | --- | | code | integer | 0:成功;2102: 退貨商品不存在;500: 系統內部錯誤 | | msg | string | 錯誤原因 | | data | object| 返回數據 | | address | string | 地址 | ### 4.2 退貨申請 接口名稱:退貨申請 請求數據類型:X-WWW-FORM-URLENCODED 響應類型:JSON 狀態:有效 接口描述:客戶退貨申請 ~~~[api] post:/api/v2/refund/apply *txid#交易id *out_refund_no#商城退貨單號 *notify_url#處理結果,通知商城 int:amount#提貨數量 consignee#收貨人 cellphone#收貨人手機號 area#地區 address#收貨地址 zipcode#郵編 <<< success { "code": 0, "msg": "操作成功", "data": { refund_no:生產平臺退貨單號, out_refund_no:商城退貨單號, status: 狀態:1=待通知廠商;2=通知廠商成功;3=通知廠商失敗;4=通知商城退貨成功;5=通知商城退貨失敗;6=已退貨(廠商受理成功);7=已退貨通知商城成功;8=已退貨通知商城失敗, amount: 退貨數量(從鏈上查詢得到) } } <<< error ~~~ **返回值** | 參數名 | 參數類型 | 描述 | | --- | --- | --- | | code | integer | 0:成功;405: 無權訪問 ;1021: 用戶被禁用;2801: 退貨Txid已存在;2600:txid校驗失敗;2803:退貨數量與鏈上不一致;2701:未查到對應的商品;2702:發行地址與鏈上地址不一致 ;2800:退貨申請失敗 | | msg | string | 錯誤原因 | | data | object | 返回數據 | | refund_no | string | 生產平臺退貨單號 | | out_refund_no | string | 商城退貨單號 | | status | integer | 狀態:1=待通知廠商;2=通知廠商成功;3=通知廠商失敗;4=通知商城退貨成功;5=通知商城退貨失敗;6=已退貨(廠商受理成功);7=已退貨通知商城成功;8=已退貨通知商城失敗 | | amount | integer | 退貨數量(從鏈上查詢得到) | ### 4.3 退貨通知 接口名稱:退貨通知 請求數據類型:APPLICATION/JSON 響應類型:JSON 狀態:有效 接口描述:由生產商ERP系統調用,真實退貨后,通知生產平臺退貨單狀態變化 <!-- **請求參數** ~~~ { "pickup_no": "11001904028341836781", // 生產平臺退貨單唯一編號 "out_delivery_no": "1001201112", // ERP發貨單唯一編號 "receipt_list": [ // 生產商發貨信息及Token信息 { "txid": "0C697F48392907A015959A00DB1CC6AF", // 交易ID "waybill_no": "01203131231231", // 運單號 "serial_no": "01203131231231", // 商品編碼,可空 "logistic_no": "01203131231231", // 物流商編號,可空 "logistic_name": "順風" // 物流商名稱,可空 } ] } ~~~ --> ~~~[api] post:/api/v2/refund/refunded txid#交易id *out_refund_no#商城退貨單號 *refund_no#生產平臺退貨單號 <<< success { "code": 0, "msg": "退貨通知成功", "data": { "refund_no": "12001904199498821447", "out_refunded_no": "3223422342", "status": 6, "amount": 1 } } <<< error ~~~ **返回值** | 參數名 | 參數類型 | 描述 | | --- | --- | --- | | code | integer | 0:成功;405: 無權訪問 ;1021: 用戶被禁用;2902: 退貨單不存在;2600:txid校驗失敗;2804:退貨單編號已存在;2701:未查到對應的商品;2702:發行地址與鏈上地址不一致 ;2806:退貨數量與返還數量不一致;2807:生產商ID不一致;2805:轉入地址與客戶地址不一致;2808:退貨單狀態有誤;2809:退貨通知保存失敗 | | msg | string | 信息 | | data | object | 返回數據 | | refund_no | string | 生產平臺退貨單號 | | out_refund_no | string | 商城退貨單號 | | status | integer | 狀態:1=待通知廠商;2=通知廠商成功;3=通知廠商失敗;4=通知商城退貨成功;5=通知商城退貨失敗;6=已退貨(廠商受理成功);7=已退貨通知商城成功;8=已退貨通知商城失敗 | | amount | integer | 退貨數量(從鏈上查詢得到) | ### 4.4 商城退貨單查詢 接口名稱:退貨單商城查詢 請求數據類型:X-WWW-FORM-URLENCODED 響應類型:JSON 狀態:有效 接口描述:商城查詢退貨單 ~~~[api] post:/api/v2/refund/findForMall refund_no#生產平臺退貨單號 out_refund_no#商城退貨單號 txid#交易id refund_txid#退貨交易id time_range#查詢時間段,格式為:[1552060800000,1552147200000],單位:毫秒 <<< success { "code": 0, "msg": "操作成功", "data": [ { "refund_no": "119030814581566011699905", "out_refund_no": "1001007", "txid": "8866CB397916001E1595995158C40D76", "tx_type": "astro.token.exchange", "symbol": "Victor1", "symbol_child": "Victor1_ex_36688a66-2805-4798-98eb-62c13914b0fb" "from_addr": "AfmAE1K-T8V-y4ObshuwV2faNMOdNMYW0Q", "to_addr": "ARJtq6Q46oTnxDwvVqMgDtZeNxs7Ybt81A", "amount": 1, "notify_url": "http://localhost/pickup/callback", "status": "待退貨", "created_at": "2019-03-08T13:00:36.000Z", "updated_at": "2019-03-14T09:23:08.000Z" } ], "pagination": { "current": 1, "pageSize": 10, "total": 3 } } <<< error ~~~ **返回值** | 參數名 | 參數類型 | 描述 | | --- | --- | --- | | code | integer | 0:成功;600:參數不正確;500:系統內部錯誤 | | msg | string | 錯誤原因 | | data | array | 返回數據 | | refund_no | string | 生產平臺退貨單號 | | out_refund_no | string | 商城退貨單號 | | status | integer | 狀態:1=待通知廠商;2=通知廠商成功;3=通知廠商失敗;4=通知商城退貨成功;5=通知商城退貨失敗;6=已退貨(廠商受理成功);7=已退貨通知商城成功;8=已退貨通知商城失敗 | | txid | string | 商城退貨單號 | | tx_type | string | 合約分類: astro.token.offer=增發; astro.token.create=發行; astro.token.exchange=提貨; astro.token.deliver=發貨; astro.token.change=換貨; astro.token.refund=退貨 | | symbol | string | token名稱 | | symbol_child | string | 新token名稱 | | from_addr | string | 用戶轉出Token A地址,也做為A''接收地址 | | to_addr | string | 生產商接收Token A地址 | | amount | integer | 數量 | | notify_url | string | 回調地址 | | created_at | date | 訂單時間 | | updated_at | date | 修改時間 | | pagination| object | 分頁信息 | | current | integer | 當前頁 | | total | integer | 總條數 | ### 4.5 ERP 退貨單查詢 接口名稱:退貨單ERP查詢 請求數據類型:X-WWW-FORM-URLENCODED 響應類型:JSON 狀態:有效 接口描述:退貨單ERP查詢 ~~~[api] post:/api/v2/refound/findForErp refund_no#生產平臺退貨單號 out_refunded_no#ERP退貨單號 txid#退貨申請交易id refunded_txid#退貨id time_range#查詢時間段,格式為:[1552060800000,1552147200000],單位:毫秒 <<< success { "code": 0, "msg": "操作成功", "data": [ { "refund_no": "11001904181154785525", "out_refunded_no": "111119", "txid": "8866CB397916001E1595995158C40D76", "tx_type": "astro.token.exchange", "symbol": "Victor1", "symbol_child": "Victor1_ex_36688a66-2805-4798-98eb-62c13914b0fb,Victor1_ex_366d1ce7-0fb2-4ddb", "from_addr": "AfmAE1K-T8V-y4ObshuwV2faNMOdNMYW0Q", "to_addr": "ARJtq6Q46oTnxDwvVqMgDtZeNxs7Ybt81A", "amount": 1, "status": 6, "notify_url": "http://localhost/pickup/callback", "created_at": "2019-04-18T06:49:09.000Z", "updated_at": "2019-04-18T06:51:04.000Z", "consignee": "張三", "cellphone": "13912345678", "area": "北京/北京市/朝陽區", "address": "望京SOHO", "zipcode": "", "caption": "牙膏", "specs": { "image": null, "顏色": "白" }, } ] "pagination": { "current": 1, "pageSize": 10, "total": 3 } } <<< error ~~~ **返回值** | 參數名 | 參數類型 | 描述 | | --- | --- | --- | | code | integer | 0:成功;600:參數不正確;500:系統內部錯誤 | | msg | string | 錯誤原因 | | data | array | 返回數據 | | fefund_no | string | 生產平臺退貨單號 | | out_refunded_no | string | ERP退貨單號 | | status | integer | 狀態:1=待通知廠商;2=通知廠商成功;3=通知廠商失敗;4=通知商城退貨成功;5=通知商城退貨失敗;6=已退貨(廠商受理成功);7=已退貨通知商城成功;8=已退貨通知商城失敗 | | txid | string | 商城提貨單號 | | tx_type | string | 合約分類: astro.token.offer=增發; astro.token.create=發行; astro.token.exchange=提貨; astro.token.deliver=發貨; astro.token.change=換貨; astro.token.refund=退貨 | | symbol | string | token名稱 | | symbol_child | string | 新token名稱 | | from_addr | string | 用戶轉出Token A地址,也做為A''接收地址 | | to_addr | string | 生產商接收Token A地址 | | amount | integer | 數量 | | area | string | 地區 | | address | string | 地址 | | zipcode | string |郵編 | | notify_url | string | 回調地址 | | specs | array | 商品規格 | | caption | string | 商品名稱 | | consignee | string | 消費者姓名 | | cellphone | string | 電話 | | created_at | date | 訂單時間 | | updated_at | date | 修改時間 | | pagination| object | 分頁信息 | | current | integer | 當前頁 | | total | integer | 總條數 |
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看