微信公眾平台開發(120) 微信支付報關接口


關鍵字:微信支付 微信支付v3 報關接口 
作者:方倍工作室
原文: http://www.cnblogs.com/txw1958/p/wxpay-declare.html

 

本文介紹微信支付下的報關接口的開發過程。微信報關是用於商戶提交海關需要的訂單信息。

 

一、報關接口API

接口地址

https://api.mch.weixin.qq.com/cgi-bin/mch/customs/customdeclareorder

是否需要證書

不需要。

請求方式:post 數據格式:xml 簽名方式:MD5

注意:商戶訂單號金額以支付系統記錄的為准,無需上傳,如有子訂單號則必須上傳子訂單應付金額、物流費、商品價格(應付金額=物流費+商品價格)。
字段名 變量名 必填 類型 示例值 說明
簽名 sign String(32) C380BEC2BFD727A4B6845133519F3AD6 簽名,詳見簽名生成算法
公眾賬號ID appid String(32) wxd678efh567hg6787 微信分配的公眾賬號ID
商戶號 mch_id String(32) 1230000109 微信支付分配的商戶號
商戶訂單號 out_trade_no String(32) 20150806125346 商戶系統內部的訂單號
微信支付訂單號 transaction_id String(28) 1000320306201511078440737890 微信支付返回的訂單號
海關 customs String(32) SHANGHAI

NO 無需上報海關

GUANGZHOU 廣州

HANGZHOU 杭州

NINGBO 寧波

ZHENGZHOU_BS 鄭州(保稅物流中心)

CHONGQING 重慶

XIAN 西安

SHANGHAI 上海

ZHENGZHOU_ZH 鄭州(綜保區)

SHENZHEN 深圳

商戶海關備案號 mch_customs_no String(32) 123456 商戶在海關登記的備案號,customs非NO,此參數必填
關稅 duty Int 888 關稅,以分為單位

以下字段在拆單或重新報關時必傳

字段名 變量名 必填 類型 示例值 描述
商戶子訂單號 sub_order_no String(32) 20150806125346 商戶子訂單號,如有拆單則必傳
幣種 fee_type String(3) CNY 微信支付訂單支付時使用的幣種,暫只支持人民幣CNY,如有拆單則必傳。
應付金額 order_fee Int 888 子訂單金額,以分為單位,不能超過原訂單金額,order_fee=transport_fee+product_fee(應付金額=物流費+商品價格),如有拆單則必傳。
物流費 transport_fee Int 888 物流費用,以分為單位,如有拆單則必傳。
商品價格 product_fee Int 888 商品費用,以分為單位,如有拆單則必傳。

以下字段在微信缺少用戶信息時必傳,如果商戶上傳了用戶信息,則以商戶上傳的信息為准。

字段名 變量名 必填 類型 示例值 描述
證件類型 cert_type String(32) IDCARD 暫只支持身份證,該參數是指用戶信息,商戶若有用戶信息,可上送,系統將以商戶上傳的數據為准,進行海關通關報備;
證件號碼 cert_id String(64) 330821198809085211 身份證號,該參數是指用戶信息,商戶若有用戶信息,可上送,系統將以商戶上傳的數據為准,進行海關通關報備;
姓名 name String(64) 張三 用戶姓名,該參數是指用戶信息,商戶若有用戶信息,可上送,系統將以商戶上傳的數據為准,進行海關通關報備;

舉例如下:

<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 String(32) MD5 暫只支持MD5
簽名 sign String(32) C380BEC2BFD727A4B6845133519F3AD6 簽名,詳見簽名生成算法
公眾賬號ID appid String(32) wxd678efh567hg6787 微信分配的公眾賬號ID
商戶號 mch_id String(32) 1230000109 微信支付分配的商戶號
業務結果 result_code String(16) SUCCESS SUCCESS/FAIL
錯誤代碼 err_code String(32) SYSTEMERROR 詳細參見錯誤列表
錯誤代碼描述 err_code_des String(128) 系統錯誤 錯誤返回的信息描述

以下字段在return_code 和result_code都為SUCCESS的時候有返回

字段名 變量名 必填 類型 示例值 描述
狀態碼 state String(2) UNDECLARED

狀態碼

UNDECLARED -- 未申報

SUBMITTED -- 申報已提交(訂單已經送海關,商戶重新申報,並且海關還有修改接口,那么記錄的狀態會是這個)

PROCESSING -- 申報中

SUCCESS -- 申報成功

FAIL-- 申報失敗

EXCEPT --海關接口異常

微信支付訂單號 transaction_id String(28) 1000320306201511078440737890 微信支付返回的訂單號
商戶訂單號 out_trade_no String(32) 20150806125346 商戶系統內部的訂單號
商戶子訂單號 sub_order_no String(32) 20150806125346 商戶子訂單號,如有拆單則必傳
微信子訂單號 sub_order_id String(32) 20150806125346 微信子訂單號
最后更新時間 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"
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM