關鍵字:微信支付 微信支付v3 報關接口
作者:方倍工作室
本文介紹微信支付下的報關接口的開發過程。微信報關是用于商戶送出海關需要的訂單資訊。
一、報關接口API
接口位址
https://api.mch.weixin.qq.com/cgi-bin/mch/customs/customdeclareorder
是否需要證書
不需要。
請求方式:post 資料格式:xml 簽名方式:MD5
注意:商戶訂單号金額以支付系統記錄的為準,無需上傳,如有子訂單号則必須上傳子訂單應付金額、物流費、商品價格(應付金額=物流費+商品價格)。
字段名 | 變量名 | 必填 | 類型 | 示例值 | 說明 |
簽名 | sign | 是 | String(32) | C380BEC2BFD727A4B6845133519F3AD6 | 簽名,詳見簽名生成算法 |
公衆賬号ID | appid | wxd678efh567hg6787 | 微信配置設定的公衆賬号ID | ||
商戶号 | mch_id | 1230000109 | 微信支付配置設定的商戶号 | ||
商戶訂單号 | out_trade_no | 20150806125346 | 商戶系統内部的訂單号 | ||
微信支付訂單号 | transaction_id | String(28) | 1000320306201511078440737890 | 微信支付傳回的訂單号 | |
海關 | customs | SHANGHAI | NO 無需上報海關 GUANGZHOU 廣州 HANGZHOU 杭州 NINGBO 甯波 ZHENGZHOU_BS 鄭州(保稅物流中心) CHONGQING 重慶 XIAN 西安 SHANGHAI 上海 ZHENGZHOU_ZH 鄭州(綜保區) SHENZHEN 深圳 | ||
商戶海關備案号 | mch_customs_no | 否 | 123456 | 商戶在海關登記的備案号,customs非NO,此參數必填 | |
關稅 | duty | Int | 888 | 關稅,以分為機關 |
以下字段在拆單或重新報關時必傳
描述 | |||||
商戶子訂單号 | sub_order_no | 商戶子訂單号,如有拆單則必傳 | |||
币種 | fee_type | String(3) | CNY | 微信支付訂單支付時使用的币種,暫隻支援人民币CNY,如有拆單則必傳。 | |
應付金額 | order_fee | 子訂單金額,以分為機關,不能超過原訂單金額,order_fee=transport_fee+product_fee(應付金額=物流費+商品價格),如有拆單則必傳。 | |||
物流費 | transport_fee | 物流費用,以分為機關,如有拆單則必傳。 | |||
商品價格 | product_fee | 商品費用,以分為機關,如有拆單則必傳。 |
以下字段在微信缺少使用者資訊時必傳,如果商戶上傳了使用者資訊,則以商戶上傳的資訊為準。
證件類型 | cert_type | IDCARD | 暫隻支援身份證,該參數是指使用者資訊,商戶若有使用者資訊,可上送,系統将以商戶上傳的資料為準,進行海關通關報備; | ||
證件号碼 | cert_id | String(64) | 330821198809085211 | 身份證号,該參數是指使用者資訊,商戶若有使用者資訊,可上送,系統将以商戶上傳的資料為準,進行海關通關報備; | |
姓名 | name | 張三 | 使用者姓名,該參數是指使用者資訊,商戶若有使用者資訊,可上送,系統将以商戶上傳的資料為準,進行海關通關報備; |
舉例如下:

<xml>
<appid>wx2421b1c4370ec43b</appid>
<customs>ZHENGZHOU_BS</customs>
<mch_customs_no>D00411</mch_customs_no>
<mch_id>1262544101</mch_id>
<order_fee>13110</order_fee>
<out_trade_no>15112496832609</out_trade_no>
<product_fee>13110</product_fee>
<sign>8FF6CEF879FB9555CD580222E671E9D4</sign>
<transaction_id>1006930610201511241751403478</transaction_id>
<transport_fee>0</transport_fee>
<fee_type>CNY</fee_type>
<sub_order_no>15112496832609001</sub_order_no>
</xml>

注:參數值用XML轉義即可,CDATA标簽用于說明資料不被XML解析器解析。
應答參數清單
傳回狀态碼 | return_code | String(16) | SUCCESS | SUCCESS/FAIL 此字段是通信辨別,非交易辨別,交易是否成功需要檢視result_code來判斷 | |
傳回資訊 | return_msg | String(128) | 簽名失敗 | 傳回資訊,如非空,為錯誤原因 參數格式校驗錯誤 |
以下字段在return_code為SUCCESS的時候有傳回
簽名類型 | sign_type | MD5 | 暫隻支援MD5 | ||
業務結果 | result_code | ||||
錯誤代碼 | err_code | SYSTEMERROR | 詳細參見錯誤清單 | ||
錯誤代碼描述 | err_code_des | 系統錯誤 | 錯誤傳回的資訊描述 |
以下字段在return_code 和result_code都為SUCCESS的時候有傳回
狀态碼 | state | String(2) | UNDECLARED | UNDECLARED -- 未申報 SUBMITTED -- 申報已送出(訂單已經送海關,商戶重新申報,并且海關還有修改接口,那麼記錄的狀态會是這個) PROCESSING -- 申報中 SUCCESS -- 申報成功 FAIL-- 申報失敗 EXCEPT --海關接口異常 | |
微信子訂單号 | sub_order_id | ||||
最後更新時間 | modify_time | String(14) | 20091227091010 | 最後更新時間,格式為yyyyMMddhhmmss,如2009年12月27日9點10分10秒表示為20091227091010。時區為GMT+8 beijing。該時間取自微信伺服器 |
錯誤碼
名稱 | 原因 | 解決方案 | |
132011004 | 參數錯誤 | 報關時僅傳入訂單号,不傳入子訂單号(sub_order_no)時,不能填費用資訊,須以支付系統中的值為準 | 請檢查參數是否都正确 |
132021028 | 交易币種與商戶結算币種不一緻】 | 報關時傳入子訂單号(sub_order_no)時,币種參數(fee_type)必填 | 請檢查所傳币種參數(fee_type)是否為空 |
MCHID_NOT_SET | 商戶号未設定 | 商戶号為必傳參數,請求時必傳 | 請檢查商戶号是否為空 |
MCHID_INVALID_LENGTH | 無效的商戶号長度 | 報關接口隻支援12開頭10位數字的商戶号 | 請檢查商戶号長度是否為10位 |
CUSTOMSCONFIG_NOT_SET | 海關配置未設定 | 報關接口需要商戶已配置過海關資訊才可以通路 | 請參照上文中的海關備案指引,進行海關資訊報備 |
FEETYPE_NOT_SET | 币種類型未設定 | 拆單情況下,币種為必填參數 | 請檢查fee_type是否為空 |
OUTTRADENO_NOT_SET | 商戶訂單号(out_trade_no)未設定 | 商戶訂單号為必傳參數 | 請檢查商戶訂單号(out_trade_no)是否為空 |
TRANSACTION_ID_NOT_SET | 微信訂單号(transaction_id)未設定 | 微信訂單号(transaction_id)為必傳參數 | 請檢查微信訂單号(transaction_id)是否為空 |
INVALID_TRANSACTION_ID | 無效的微信訂單号長度 | 微信訂單号為28位數字,請確定長度一緻 | 請檢查微信訂單号(transaction_id)是否正确 |
CUSTOMS_NOT_SET | 海關資訊未設定 | 海關資訊為必傳字段 | 請檢查海關資訊是否為空 |
CHCUSTOMSNO_NOT_SET | 海關備案号未設定 | 海關備案号為必傳字段 | 請檢查備案号是否為空 |
INVALID_MCHCUSTOMSNO | 無效的海關備案号長度 | 海關備案号一般為6位字元串 | 請檢查海關備案号是否正确 |
PAYFEE_NOT_MATCH | 金額不比對 | 報關的訂單金額必須和支付的金額一緻 | 請檢查報關訂單的金額是否正确 |
INVALID_SUBORDER_NO | 無效的子訂單号長度(sub_order_no) | 子訂單号要求是32位以内的字元串 | 請檢查子訂單号長度是否正确 |
APPID_NOT_EXIST | AppId未設定(sub_order_no) | appid為必傳字段 | 請檢查appid是否正确 |
MCHID_NOT_EXIST | 商戶号(mch_id)未設定 | MCH_ID為必傳字段 | 請檢查mch_id是否正确 |
AUTHORITY_NOT_FOUND | 未開通自助清關功能 | 須先開通自助清關功能才可成功調用接口 | 請檢查是否已開通自助清關功能,開通路徑:微信支付商戶平台-産品中心-自助清關中申請開通。 |
NO_AUTH | 無權限 | 未獲得此接口的調用權限 | 請檢查目前商戶号是否已獲得此接口的調用權限 |
二、SDK實作
sdk定義
三、調用方式
四、傳回結果
發送資料如下
array(6) {
["appid"]=>
string(18) "wxa8092dd025e45123"
["mch_id"]=>
string(10) "1238298123"
["out_trade_no"]=>
string(22) "SH20160824095750086988"
["transaction_id"]=>
string(28) "4006742001201608242098415582"
["customs"]=>
string(6) "NINGBO"
["mch_customs_no"]=>
string(10) "3302461123"
}
array(12) {
["return_code"]=>
string(7) "SUCCESS"
["return_msg"]=>
string(6) "成功"
["sign"]=>
string(32) "91EFCEEAAD4322F331F3F63C4D8F1279"
["appid"]=>
string(18) "wxa8092dd025e45123"
["mch_id"]=>
string(10) "1238298123"
["result_code"]=>
string(7) "SUCCESS"
["err_code"]=>
string(1) "0"
["err_code_des"]=>
string(2) "OK"
["state"]=>
string(9) "SUBMITTED"
["transaction_id"]=>
string(28) "4006742001201608242098415582"
["out_trade_no"]=>
string(22) "SH20160824095750086988"
["modify_time"]=>
string(14) "20160825111049"
}