View Javadoc
1   package com.foxinmy.weixin4j.pay.payment;
2   
3   import com.alibaba.fastjson.annotation.JSONField;
4   import com.foxinmy.weixin4j.pay.payment.mch.MerchantResult;
5   import com.foxinmy.weixin4j.util.DateUtil;
6   
7   import javax.xml.bind.annotation.XmlAccessType;
8   import javax.xml.bind.annotation.XmlAccessorType;
9   import javax.xml.bind.annotation.XmlElement;
10  import javax.xml.bind.annotation.XmlRootElement;
11  import java.util.Date;
12  
13  /**
14   * 订单信息
15   * 
16   * @className PayPackage
17   * @author jinyu(foxinmy@gmail.com)
18   * @date 2014年12月18日
19   * @since JDK 1.6
20   */
21  @XmlRootElement
22  @XmlAccessorType(XmlAccessType.FIELD)
23  public class PayPackage extends MerchantResult {
24  
25  	private static final long serialVersionUID = 3450161267802545790L;
26  
27  	/**
28  	 * 商品描述 必须
29  	 */
30  	private String body;
31  	/**
32  	 * 商品详情 非必须
33  	 */
34  	private String detail;
35  	/**
36  	 * 商户系统内部的订单号 ,32 个字符内 、可包含字母 ,确保 在商户系统唯一 必须
37  	 */
38  	@XmlElement(name = "out_trade_no")
39  	@JSONField(name = "out_trade_no")
40  	private String outTradeNo;
41  	/**
42  	 * 订单总金额,单位为分,不能带小数点 必须
43  	 */
44  	@XmlElement(name = "total_fee")
45  	@JSONField(name = "total_fee")
46  	private int totalFee;
47  	/**
48  	 * 通知地址接收微信支付成功通知 必须
49  	 */
50  	@XmlElement(name = "notify_url")
51  	@JSONField(name = "notify_url")
52  	private String notifyUrl;
53  	/**
54  	 * 订单生成的机器 IP 必须
55  	 */
56  	@XmlElement(name = "spbill_create_ip")
57  	@JSONField(name = "spbill_create_ip")
58  	private String createIp;
59  	/**
60  	 * 附加数据,原样返回 非必须
61  	 */
62  	private String attach;
63  	/**
64  	 * 订单生成时间,格式为 yyyyMMddHHmmss,如 2009 年 12月25日9点10分10秒表示为 20091225091010。时区 为
65  	 * GMT+8 beijing。该时间取 自商户服务器 非必须
66  	 */
67  	@XmlElement(name = "time_start")
68  	@JSONField(name = "time_start")
69  	private String timeStart;
70  	/**
71  	 * 订单失效时间,格为 yyyyMMddHHmmss,如 2009 年 12月27日9点10分10秒表示为 20091227091010。时区 为
72  	 * GMT+8 beijing。该时间取 自商户服务商品标记 非必须
73  	 */
74  	@XmlElement(name = "time_expire")
75  	@JSONField(name = "time_expire")
76  	private String timeExpire;
77  	/**
78  	 * 商品标记,该字段不能随便填,不使用请填空 非必须
79  	 */
80  	@XmlElement(name = "goods_tag")
81  	@JSONField(name = "goods_tag")
82  	private String goodsTag;
83  
84  	protected PayPackage() {
85  		// jaxb required
86  	}
87  
88  	/**
89  	 * 订单对象
90  	 * 
91  	 * @param body
92  	 *            订单描述 必填
93  	 * @param detail
94  	 *            订单详情 非必填
95  	 * @param outTradeNo
96  	 *            商户内部ID 必填
97  	 * @param totalFee
98  	 *            订单总额 必填 <font color="red">单位为元</font>
99  	 * @param notifyUrl
100 	 *            回调地址 必填
101 	 * @param createIp
102 	 *            生成订单数据的机器IP 必填
103 	 * @param attach
104 	 *            附加数据 非必填
105 	 * @param timeStart
106 	 *            订单生成时间 非必填
107 	 * @param timeExpire
108 	 *            订单失效时间 非必填
109 	 * @param goodsTag
110 	 *            订单标记 非必填
111 	 */
112 	public PayPackage(String body, String detail, String outTradeNo,
113 			double totalFee, String notifyUrl, String createIp, String attach,
114 			Date timeStart, Date timeExpire, String goodsTag) {
115 		this.body = body;
116 		this.detail = detail;
117 		this.outTradeNo = outTradeNo;
118 		this.totalFee = DateUtil.formatYuan2Fen(totalFee);
119 		this.notifyUrl = notifyUrl;
120 		this.createIp = createIp;
121 		this.attach = attach;
122 		this.timeStart = timeStart != null ? DateUtil
123 				.fortmat2yyyyMMddHHmmss(timeStart) : null;
124 		this.timeExpire = timeExpire != null ? DateUtil
125 				.fortmat2yyyyMMddHHmmss(timeExpire) : null;
126 		this.goodsTag = goodsTag;
127 	}
128 
129 	/**
130 	 * 订单对象
131 	 *
132 	 * @param body
133 	 *            订单描述 必填
134 	 * @param detail
135 	 *            订单详情 非必填
136 	 * @param outTradeNo
137 	 *            商户内部ID 必填
138 	 * @param totalFee
139 	 *            订单总额 必填 <font color="red">单位为分</font>
140 	 * @param notifyUrl
141 	 *            回调地址 必填
142 	 * @param createIp
143 	 *            生成订单数据的机器IP 必填
144 	 * @param attach
145 	 *            附加数据 非必填
146 	 * @param timeStart
147 	 *            订单生成时间 非必填
148 	 * @param timeExpire
149 	 *            订单失效时间 非必填
150 	 * @param goodsTag
151 	 *            订单标记 非必填
152 	 */
153 	public PayPackage(String body, String detail, String outTradeNo,
154 					  long totalFee, String notifyUrl, String createIp, String attach,
155 					  Date timeStart, Date timeExpire, String goodsTag) {
156 		this.body = body;
157 		this.detail = detail;
158 		this.outTradeNo = outTradeNo;
159 		this.totalFee = Long.valueOf(totalFee).intValue();
160 		this.notifyUrl = notifyUrl;
161 		this.createIp = createIp;
162 		this.attach = attach;
163 		this.timeStart = timeStart != null ? DateUtil
164 				.fortmat2yyyyMMddHHmmss(timeStart) : null;
165 		this.timeExpire = timeExpire != null ? DateUtil
166 				.fortmat2yyyyMMddHHmmss(timeExpire) : null;
167 		this.goodsTag = goodsTag;
168 	}
169 
170 	public String getBody() {
171 		return body;
172 	}
173 
174 	public void setBody(String body) {
175 		this.body = body;
176 	}
177 
178 	public String getDetail() {
179 		return detail;
180 	}
181 
182 	public void setDetail(String detail) {
183 		this.detail = detail;
184 	}
185 
186 	public String getOutTradeNo() {
187 		return outTradeNo;
188 	}
189 
190 	public void setOutTradeNo(String outTradeNo) {
191 		this.outTradeNo = outTradeNo;
192 	}
193 
194 	public int getTotalFee() {
195 		return totalFee;
196 	}
197 
198 	public void setTotalFee(int totalFee) {
199 		this.totalFee = totalFee;
200 	}
201 	
202 	/**
203 	 * <font color="red">调用接口获取单位为分,get方法转换为元方便使用</font>
204 	 * 
205 	 * @return 元单位
206 	 */
207 	@JSONField(serialize = false)
208 	public double getFormatTotalFee() {
209 		return totalFee / 100d;
210 	}
211 
212 	/**
213 	 * <font color="red">单位为元,自动格式化为分</font>
214 	 * 
215 	 * @param totalFee
216 	 *            订单总额 单位为元
217 	 */
218 	public void setTotalFee(double totalFee) {
219 		this.totalFee = DateUtil.formatYuan2Fen(totalFee);
220 	}
221 
222 	public String getNotifyUrl() {
223 		return notifyUrl;
224 	}
225 
226 	public void setNotifyUrl(String notifyUrl) {
227 		this.notifyUrl = notifyUrl;
228 	}
229 
230 	public String getCreateIp() {
231 		return createIp;
232 	}
233 
234 	public void setCreateIp(String createIp) {
235 		this.createIp = createIp;
236 	}
237 
238 	public String getAttach() {
239 		return attach;
240 	}
241 
242 	public void setAttach(String attach) {
243 		this.attach = attach;
244 	}
245 
246 	public String getTimeStart() {
247 		return timeStart;
248 	}
249 
250 	public void setTimeStart(String timeStart) {
251 		this.timeStart = timeStart;
252 	}
253 
254 	public void setTimeExpire(String timeExpire) {
255 		this.timeExpire = timeExpire;
256 	}
257 
258 	public void setTimeStart(Date timeStart) {
259 		this.timeStart = timeStart != null ? DateUtil
260 				.fortmat2yyyyMMddHHmmss(timeStart) : null;
261 	}
262 
263 	public String getTimeExpire() {
264 		return timeExpire;
265 	}
266 
267 	public void setTimeExpire(Date timeExpire) {
268 		this.timeExpire = timeExpire != null ? DateUtil
269 				.fortmat2yyyyMMddHHmmss(timeExpire) : null;
270 	}
271 
272 	public String getGoodsTag() {
273 		return goodsTag;
274 	}
275 
276 	public void setGoodsTag(String goodsTag) {
277 		this.goodsTag = goodsTag;
278 	}
279 
280 	@Override
281 	public String toString() {
282 		return "body=" + body + ", detail=" + detail + ", outTradeNo="
283 				+ outTradeNo + ", totalFee=" + totalFee + ", notifyUrl="
284 				+ notifyUrl + ", createIp=" + createIp + ", attach=" + attach
285 				+ ", timeStart=" + timeStart + ", timeExpire=" + timeExpire
286 				+ ", goodsTag=" + goodsTag;
287 	}
288 }