View Javadoc
1   package com.foxinmy.weixin4j.pay.api;
2   
3   import com.alibaba.fastjson.JSON;
4   import com.alibaba.fastjson.JSONObject;
5   import com.alibaba.fastjson.TypeReference;
6   import com.foxinmy.weixin4j.exception.WeixinException;
7   import com.foxinmy.weixin4j.http.weixin.WeixinResponse;
8   import com.foxinmy.weixin4j.pay.model.WeixinPayAccount;
9   import com.foxinmy.weixin4j.pay.payment.mch.CustomsOrder;
10  import com.foxinmy.weixin4j.pay.payment.mch.CustomsOrderRecord;
11  import com.foxinmy.weixin4j.pay.payment.mch.CustomsOrderResult;
12  import com.foxinmy.weixin4j.pay.type.CustomsCity;
13  import com.foxinmy.weixin4j.pay.type.IdQuery;
14  import com.foxinmy.weixin4j.xml.ListsuffixResultDeserializer;
15  import com.foxinmy.weixin4j.xml.XmlStream;
16  
17  /**
18   * 报关接口
19   *
20   * @className CustomsApi
21   * @author jinyu(foxinmy@gmail.com)
22   * @date 2016年3月67日
23   * @since JDK 1.6
24   * @see
25   */
26  public class CustomsApi extends MchApi {
27  
28  	public CustomsApi(WeixinPayAccount weixinAccount) {
29  		super(weixinAccount);
30  	}
31  
32  	/**
33  	 * 订单附加信息提交
34  	 *
35  	 * @param customsOrder
36  	 *            附加订单信息
37  	 * @return 报关结果
38  	 * @see CustomsOrder
39  	 * @see CustomsOrderResult
40  	 * @see <a
41  	 *      href="https://pay.weixin.qq.com/wiki/doc/api/external/declarecustom.php?chapter=18_1">附加订单信息提交接口</a>
42  	 * @throws WeixinException
43  	 */
44  	public CustomsOrderResult declareCustomsOrder(CustomsOrder customsOrder)
45  			throws WeixinException {
46  		JSONObject para = (JSONObject) JSON.toJSON(customsOrder);
47  		para.put("appid", weixinAccount.getId());
48  		para.put("mch_id", weixinAccount.getMchId());
49  		para.put("sign", weixinSignature.sign(para));
50  		String param = XmlStream.map2xml(para);
51  		WeixinResponse response = weixinExecutor.post(
52  				getRequestUri("customsorder_declare_uri"), param);
53  		return response.getAsObject(new TypeReference<CustomsOrderResult>() {
54  		});
55  	}
56  
57  	/**
58  	 * 订单附加信息查询
59  	 *
60  	 * @param idQuery
61  	 *            out_trade_no,transaction_id,sub_order_no,sub_order_id四选一
62  	 * @param customsCity
63  	 *            海关
64  	 * @return 报关记录
65  	 * @see CustomsOrderRecord
66  	 * @see <a
67  	 *      href="https://pay.weixin.qq.com/wiki/doc/api/external/declarecustom.php?chapter=18_1">附加订单信息查询接口</a>
68  	 * @throws WeixinException
69  	 */
70  	public CustomsOrderRecord queryCustomsOrder(IdQuery idQuery,
71  			CustomsCity customsCity) throws WeixinException {
72  		JSONObject para = new JSONObject();
73  		para.put("appid", weixinAccount.getId());
74  		para.put("mch_id", weixinAccount.getMchId());
75  		para.put(idQuery.getType().getName(), idQuery.getId());
76  		para.put("customs", customsCity.name());
77  		para.put("sign", weixinSignature.sign(para));
78  		String param = XmlStream.map2xml(para);
79  		WeixinResponse response = weixinExecutor.post(
80  				getRequestUri("customsorder_query_uri"), param);
81  		return ListsuffixResultDeserializer.deserialize(response.getAsString(),
82  				CustomsOrderRecord.class);
83  	}
84  }