1 package com.foxinmy.weixin4j.payment;
2
3 import java.io.OutputStream;
4 import java.util.Date;
5 import java.util.List;
6 import java.util.concurrent.Future;
7
8 import com.alibaba.fastjson.JSON;
9 import com.foxinmy.weixin4j.api.CashApi;
10 import com.foxinmy.weixin4j.api.CouponApi;
11 import com.foxinmy.weixin4j.api.CustomsApi;
12 import com.foxinmy.weixin4j.api.PayApi;
13 import com.foxinmy.weixin4j.exception.WeixinException;
14 import com.foxinmy.weixin4j.http.weixin.XmlResult;
15 import com.foxinmy.weixin4j.model.WeixinPayAccount;
16 import com.foxinmy.weixin4j.model.paging.Pageable;
17 import com.foxinmy.weixin4j.payment.coupon.CouponDetail;
18 import com.foxinmy.weixin4j.payment.coupon.CouponResult;
19 import com.foxinmy.weixin4j.payment.coupon.CouponStock;
20 import com.foxinmy.weixin4j.payment.mch.CorpPayment;
21 import com.foxinmy.weixin4j.payment.mch.CorpPaymentRecord;
22 import com.foxinmy.weixin4j.payment.mch.CorpPaymentResult;
23 import com.foxinmy.weixin4j.payment.mch.CustomsOrder;
24 import com.foxinmy.weixin4j.payment.mch.CustomsOrderRecord;
25 import com.foxinmy.weixin4j.payment.mch.CustomsOrderResult;
26 import com.foxinmy.weixin4j.payment.mch.MchPayPackage;
27 import com.foxinmy.weixin4j.payment.mch.MchPayRequest;
28 import com.foxinmy.weixin4j.payment.mch.MerchantResult;
29 import com.foxinmy.weixin4j.payment.mch.NativePayResponse;
30 import com.foxinmy.weixin4j.payment.mch.OpenIdResult;
31 import com.foxinmy.weixin4j.payment.mch.Order;
32 import com.foxinmy.weixin4j.payment.mch.PrePay;
33 import com.foxinmy.weixin4j.payment.mch.Redpacket;
34 import com.foxinmy.weixin4j.payment.mch.RedpacketRecord;
35 import com.foxinmy.weixin4j.payment.mch.RedpacketSendResult;
36 import com.foxinmy.weixin4j.payment.mch.RefundRecord;
37 import com.foxinmy.weixin4j.payment.mch.RefundResult;
38 import com.foxinmy.weixin4j.payment.mch.SceneInfoApp;
39 import com.foxinmy.weixin4j.payment.mch.SceneInfoStore;
40 import com.foxinmy.weixin4j.payment.mch.SettlementRecord;
41 import com.foxinmy.weixin4j.sign.WeixinSignature;
42 import com.foxinmy.weixin4j.type.CurrencyType;
43 import com.foxinmy.weixin4j.type.CustomsCity;
44 import com.foxinmy.weixin4j.type.IdQuery;
45 import com.foxinmy.weixin4j.type.TarType;
46 import com.foxinmy.weixin4j.type.mch.BillType;
47 import com.foxinmy.weixin4j.type.mch.RefundAccountType;
48 import com.foxinmy.weixin4j.util.Consts;
49 import com.foxinmy.weixin4j.util.Weixin4jConfigUtil;
50
51 /**
52 * 微信支付接口实现
53 *
54 * @className WeixinPayProxy
55 * @author jinyu(foxinmy@gmail.com)
56 * @date 2015年1月3日
57 * @since JDK 1.6
58 * @see <a href="http://pay.weixin.qq.com/wiki/doc/api/index.html">商户平台支付API</a>
59 * @deprecated 迁移到子模块weixin4j-pay
60 */
61 @Deprecated
62 public class WeixinPayProxy {
63
64 /**
65 * 微信支付API:js支付、扫码支付等接口
66 */
67 private final PayApi payApi;
68 /**
69 * 代金券API
70 */
71 private final CouponApi couponApi;
72 /**
73 * 现金API
74 */
75 private final CashApi cashApi;
76 /**
77 * 海关API
78 */
79 private final CustomsApi customsApi;
80 /**
81 * 商户信息
82 */
83 private final WeixinPayAccount weixinPayAccount;
84
85 /**
86 * 微信支付接口实现(使用weixin4j.properties配置的account商户信息)
87 */
88 public WeixinPayProxy() {
89 this(JSON.parseObject(Weixin4jConfigUtil.getValue("account"),
90 WeixinPayAccount.class));
91 }
92
93 /**
94 * 微信支付接口实现
95 *
96 * @param weixinPayAccount
97 * 微信商户信息
98 */
99 public WeixinPayProxy(WeixinPayAccount weixinPayAccount) {
100 if (weixinPayAccount == null) {
101 throw new IllegalArgumentException(
102 "weixinPayAccount must not be empty");
103 }
104 this.weixinPayAccount = weixinPayAccount;
105 this.payApi = new PayApi(weixinPayAccount);
106 this.couponApi = new CouponApi(weixinPayAccount);
107 this.cashApi = new CashApi(weixinPayAccount);
108 this.customsApi = new CustomsApi(weixinPayAccount);
109 }
110
111 /**
112 * 获取微信商户账号信息
113 *
114 * @return
115 */
116 public WeixinPayAccount getWeixinPayAccount() {
117 return weixinPayAccount;
118 }
119
120 /**
121 * 获取微信签名类
122 *
123 * @return
124 */
125 public WeixinSignature getWeixinSignature() {
126 return payApi.getWeixinSignature();
127 }
128
129 /**
130 * 统一下单接口</br>
131 * 除被扫支付场景以外,商户系统先调用该接口在微信支付服务后台生成预支付交易单,返回正确的预支付交易回话标识后再按扫码、JSAPI
132 * 、APP等不同场景生成交易串调起支付。
133 *
134 * @param payPackage
135 * 包含订单信息的对象
136 * @see com.foxinmy.weixin4j.api.PayApi
137 * @see com.foxinmy.weixin4j.payment.mch.MchPayPackage
138 * @see com.foxinmy.weixin4j.payment.mch.PrePay
139 * @see <a href=
140 * "http://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_1">统一下单接口
141 * </a>
142 * @return 预支付对象
143 */
144 public PrePay createPrePay(MchPayPackage payPackage) throws WeixinException {
145 return payApi.createPrePay(payPackage);
146 }
147
148 /**
149 * 创建支付请求对象
150 *
151 * @param payPackage
152 * 支付详情
153 * @return 支付请求对象
154 * @see com.foxinmy.weixin4j.api.PayApi
155 * @see com.foxinmy.weixin4j.payment.mch.JSAPIPayRequest JS支付
156 * @see com.foxinmy.weixin4j.payment.mch.NATIVEPayRequest 扫码支付
157 * @see com.foxinmy.weixin4j.payment.mch.MICROPayRequest 刷卡支付
158 * @see com.foxinmy.weixin4j.payment.mch.APPPayRequest APP支付
159 * @see com.foxinmy.weixin4j.payment.mch.WAPPayRequest WAP支付
160 * @see com.foxinmy.weixin4j.payment.mch.MchPayRequest#toRequestString()
161 * @throws WeixinException
162 */
163 public MchPayRequest createPayRequest(MchPayPackage payPackage)
164 throws WeixinException {
165 return payApi.createPayRequest(payPackage);
166 }
167
168 /**
169 * 创建JSAPI支付请求对象
170 *
171 * @param openId
172 * 用户ID
173 * @param body
174 * 订单描述
175 * @param outTradeNo
176 * 订单号
177 * @param totalFee
178 * 订单总额(元)
179 * @param notifyUrl
180 * 支付通知地址
181 * @param createIp
182 * ip地址
183 * @param attach
184 * 附加数据 非必填
185 * @see com.foxinmy.weixin4j.api.PayApi
186 * @see com.foxinmy.weixin4j.payment.mch.JSAPIPayRequest
187 * @see com.foxinmy.weixin4j.payment.mch.MchPayRequest#toRequestString()
188 * @return JSAPI支付对象
189 * @throws WeixinException
190 */
191 public MchPayRequest createJSPayRequest(String openId, String body,
192 String outTradeNo, double totalFee, String notifyUrl,
193 String createIp, String attach) throws WeixinException {
194 return payApi.createJSPayRequest(openId, body, outTradeNo, totalFee,
195 notifyUrl, createIp, attach);
196 }
197
198 /**
199 * <p>
200 * 生成编辑地址请求
201 * </p>
202 *
203 * err_msg edit_address:ok获取编辑收货地址成功</br> edit_address:fail获取编辑收货地址失败</br>
204 * userName 收货人姓名</br> telNumber 收货人电话</br> addressPostalCode 邮编</br>
205 * proviceFirstStageName 国标收货地址第一级地址</br> addressCitySecondStageName
206 * 国标收货地址第二级地址</br> addressCountiesThirdStageName 国标收货地址第三级地址</br>
207 * addressDetailInfo 详细收货地址信息</br> nationalCode 收货地址国家码</br>
208 *
209 * @param url
210 * 当前访问页的URL
211 * @param oauthToken
212 * oauth授权时产生的token
213 * @see com.foxinmy.weixin4j.api.PayApi
214 * @see <a href=
215 * "https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_8&index=7">
216 * 收货地址共享</a>
217 * @return 编辑地址请求JSON串
218 */
219 public String createAddressRequestJSON(String url, String oauthToken) {
220 return payApi.createAddressRequestJSON(url, oauthToken);
221 }
222
223 /**
224 * 创建Native支付(扫码支付)链接【模式一】
225 *
226 * @param productId
227 * 与订单ID等价
228 * @return 支付链接
229 * @see com.foxinmy.weixin4j.api.PayApi
230 * @see <a href=
231 * "https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=6_1">扫码支付
232 * </a>
233 * @see <a href=
234 * "https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=6_4">模式一
235 * </a>
236 */
237 public String createNativePayRequest(String productId) {
238 return payApi.createNativePayRequest(productId);
239 }
240
241 /**
242 * 创建Native支付(扫码支付)回调对象【模式一】
243 *
244 * @param productId
245 * 商品ID
246 * @param body
247 * 商品描述
248 * @param outTradeNo
249 * 商户内部唯一订单号
250 * @param totalFee
251 * 商品总额 单位元
252 * @param notifyUrl
253 * 支付回调URL
254 * @param createIp
255 * 订单生成的机器 IP
256 * @param attach
257 * 附加数据 非必填
258 * @return Native回调对象
259 * @see com.foxinmy.weixin4j.api.PayApi
260 * @see com.foxinmy.weixin4j.payment.mch.NativePayResponse
261 * @see <a href=
262 * "https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=6_1">扫码支付
263 * </a>
264 * @see <a href=
265 * "https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=6_4">模式一
266 * </a>
267 * @throws WeixinException
268 */
269 public NativePayResponse createNativePayResponse(String productId,
270 String body, String outTradeNo, double totalFee, String notifyUrl,
271 String createIp, String attach) throws WeixinException {
272 return payApi.createNativePayResponse(productId, body, outTradeNo,
273 totalFee, notifyUrl, createIp, attach);
274 }
275
276 /**
277 * 创建Native支付(扫码支付)链接【模式二】
278 *
279 * @param productId
280 * 商品ID
281 * @param body
282 * 商品描述
283 * @param outTradeNo
284 * 商户内部唯一订单号
285 * @param totalFee
286 * 商品总额 单位元
287 * @param notifyUrl
288 * 支付回调URL
289 * @param createIp
290 * 订单生成的机器 IP
291 * @param attach
292 * 附加数据 非必填
293 * @return Native支付对象
294 * @see com.foxinmy.weixin4j.api.PayApi
295 * @see com.foxinmy.weixin4j.payment.mch.NATIVEPayRequest
296 * @see com.foxinmy.weixin4j.payment.mch.MchPayRequest#toRequestString()
297 * @see <a href=
298 * "https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=6_1">扫码支付
299 * </a>
300 * @see <a href=
301 * "https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=6_5">模式二
302 * </a>
303 * @throws WeixinException
304 */
305 public MchPayRequest createNativePayRequest(String productId, String body,
306 String outTradeNo, double totalFee, String notifyUrl,
307 String createIp, String attach) throws WeixinException {
308 return payApi.createNativePayRequest(productId, body, outTradeNo,
309 totalFee, notifyUrl, createIp, attach);
310 }
311
312 /**
313 * 创建APP支付请求对象
314 *
315 * @param body
316 * 商品描述
317 * @param outTradeNo
318 * 商户内部唯一订单号
319 * @param totalFee
320 * 商品总额 单位元
321 * @param notifyUrl
322 * 支付回调URL
323 * @param createIp
324 * 订单生成的机器 IP
325 * @param attach
326 * 附加数据 非必填
327 * @param store
328 * 门店信息 非必填
329 * @return APP支付对象
330 * @see com.foxinmy.weixin4j.api.PayApi
331 * @see com.foxinmy.weixin4j.payment.mch.SceneInfoStore
332 * @see com.foxinmy.weixin4j.payment.mch.APPPayRequest
333 * @see com.foxinmy.weixin4j.payment.mch.MchPayRequest#toRequestString()
334 * @see <a href=
335 * "https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=8_1">
336 * APP支付</a>
337 * @throws WeixinException
338 */
339 public MchPayRequest createAppPayRequest(String body, String outTradeNo,
340 double totalFee, String notifyUrl, String createIp, String attach,
341 SceneInfoStore store) throws WeixinException {
342 return payApi.createAppPayRequest(body, outTradeNo, totalFee,
343 notifyUrl, createIp, attach, store);
344 }
345
346 /**
347 * 创建WAP支付请求对象
348 *
349 * @param body
350 * 商品描述
351 * @param outTradeNo
352 * 商户内部唯一订单号
353 * @param totalFee
354 * 商品总额 单位元
355 * @param notifyUrl
356 * 支付回调URL
357 * @param createIp
358 * 订单生成的机器 IP
359 * @param attach
360 * 附加数据 非必填
361 * @param app
362 * 应用信息
363 * @return WAP支付对象
364 * @see com.foxinmy.weixin4j.api.PayApi
365 * @see com.foxinmy.weixin4j.payment.mch.SceneInfoApp
366 * @see com.foxinmy.weixin4j.payment.mch.WAPPayRequest
367 * @see com.foxinmy.weixin4j.payment.mch.MchPayRequest#toRequestString()
368 * @see <a href=
369 * "https://pay.weixin.qq.com/wiki/doc/api/wap.php?chapter=15_1">WAP支付
370 * </a>
371 * @throws WeixinException
372 */
373 public MchPayRequest createWapPayRequest(String body, String outTradeNo,
374 double totalFee, String notifyUrl, String createIp, String attach,
375 SceneInfoApp app) throws WeixinException {
376 return payApi.createWapPayRequest(body, outTradeNo, totalFee,
377 notifyUrl, createIp, attach, app);
378 }
379
380 /**
381 * 提交被扫支付
382 *
383 * @param authCode
384 * 扫码支付授权码 ,设备读取用户微信中的条码或者二维码信息
385 * @param body
386 * 商品描述
387 * @param outTradeNo
388 * 商户内部唯一订单号
389 * @param totalFee
390 * 商品总额 单位元
391 * @param createIp
392 * 订单生成的机器 IP
393 * @param attach
394 * 附加数据 非必填
395 * @param store
396 * 门店信息 非必填
397 * @return 支付的订单信息
398 * @see com.foxinmy.weixin4j.api.PayApi
399 * @see com.foxinmy.weixin4j.payment.mch.Order
400 * @see com.foxinmy.weixin4j.payment.mch.SceneInfoStore
401 * @see com.foxinmy.weixin4j.payment.mch.MICROPayRequest
402 * @see com.foxinmy.weixin4j.payment.mch.MchPayRequest#toRequestString()
403 * @see <a href=
404 * "http://pay.weixin.qq.com/wiki/doc/api/micropay.php?chapter=9_10">
405 * 提交被扫支付API</a>
406 * @throws WeixinException
407 */
408 public MchPayRequest createMicroPayRequest(String authCode, String body,
409 String outTradeNo, double totalFee, String createIp, String attach,
410 SceneInfoStore store) throws WeixinException {
411 return payApi.createMicroPayRequest(authCode, body, outTradeNo,
412 totalFee, createIp, attach, store);
413 }
414
415 /**
416 * 订单查询
417 * <p>
418 * 当商户后台、网络、服务器等出现异常,商户系统最终未接收到支付通知;</br> 调用支付接口后,返回系统错误或未知交易状态情况;</br>
419 * 调用被扫支付API,返回USERPAYING的状态;</br> 调用关单或撤销接口API之前,需确认支付状态;
420 * </P>
421 *
422 * @param idQuery
423 * 商户系统内部的订单号, transaction_id、out_trade_no 二 选一,如果同时存在优先级:
424 * transaction_id> out_trade_no
425 * @since V3
426 * @see com.foxinmy.weixin4j.payment.mch.Order
427 * @see com.foxinmy.weixin4j.api.PayApi
428 * @see <a href=
429 * "http://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_2">
430 * 订单查询API</a>
431 * @return 订单详情
432 * @throws WeixinException
433 */
434 public Order queryOrder(IdQuery idQuery) throws WeixinException {
435 return payApi.queryOrder(idQuery);
436 }
437
438 /**
439 * 申请退款
440 *
441 * @see PayApi#applyRefund(IdQuery, String, double, double, CurrencyType, String, String, RefundAccountType)
442 */
443 public RefundResult applyRefund(IdQuery idQuery, String outRefundNo,
444 double totalFee, double refundFee, CurrencyType refundFeeType,
445 String opUserId, String refundDesc,
446 RefundAccountType refundAccountType) throws WeixinException {
447 return payApi.applyRefund(idQuery, outRefundNo, totalFee, refundFee,
448 refundFeeType, opUserId, refundDesc, refundAccountType);
449 }
450
451 /**
452 * 申请退款
453 *
454 * @see PayApi#applyRefund(IdQuery, String, double)
455 */
456 public RefundResult applyRefund(IdQuery idQuery, String outRefundNo,
457 double totalFee) throws WeixinException {
458 return payApi.applyRefund(idQuery, outRefundNo, totalFee);
459 }
460
461 /**
462 * 退款查询
463 * <p>
464 * 提交退款申请后,通过调用该接口查询退款状态。退款有一定延时,用零钱支付的退款20分钟内到账,银行卡支付的退款3个工作日后重新查询退款状态。
465 * </p>
466 *
467 * @param idQuery
468 * 单号 refund_id、out_refund_no、 out_trade_no 、 transaction_id
469 * 四个参数必填一个,优先级为:
470 * refund_id>out_refund_no>transaction_id>out_trade_no
471 * @return 退款记录
472 * @see com.foxinmy.weixin4j.api.PayApi
473 * @see com.foxinmy.weixin4j.payment.mch.RefundRecord
474 * @see <a href=
475 * "http://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_5">
476 * 退款查询API</a>
477 * @since V3
478 * @throws WeixinException
479 */
480 public RefundRecord queryRefund(IdQuery idQuery) throws WeixinException {
481 return payApi.queryRefund(idQuery);
482 }
483
484 /**
485 * 下载对账单<br>
486 * 1.微信侧未成功下单的交易不会出现在对账单中。支付成功后撤销的交易会出现在对账 单中,跟原支付单订单号一致,bill_type 为
487 * REVOKED;<br>
488 * 2.微信在次日 9 点启动生成前一天的对账单,建议商户 9 点半后再获取;<br>
489 * 3.对账单中涉及金额的字段单位为“元”。<br>
490 *
491 * @param billDate
492 * 下载对账单的日期
493 * @param billType
494 * 下载对账单的类型 ALL,返回当日所有订单信息, 默认值 SUCCESS,返回当日成功支付的订单
495 * REFUND,返回当日退款订单
496 * @para outputStream 输出流
497 * @param tarType
498 * 非必传参数,固定值:GZIP,返回格式为.gzip的压缩包账单。不传则默认为数据流形式。
499 * @since V2 & V3
500 * @see com.foxinmy.weixin4j.api.PayApi
501 * @see <a href=
502 * "http://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_6">
503 * 下载对账单API</a>
504 * @throws WeixinException
505 */
506 public void downloadBill(Date billDate, BillType billType,
507 OutputStream outputStream, TarType tarType) throws WeixinException {
508 payApi.downloadBill(billDate, billType, outputStream, tarType);
509 }
510
511 /**
512 * 冲正订单(需要证书)</br> 当支付返回失败,或收银系统超时需要取消交易,可以调用该接口</br> 接口逻辑:支
513 * 付失败的关单,支付成功的撤销支付</br> <font color="red">7天以内的单可撤销,其他正常支付的单
514 * 如需实现相同功能请调用退款接口</font></br> <font
515 * color="red">调用扣款接口后请勿立即调用撤销,需要等待5秒以上。先调用查单接口,如果没有确切的返回,再调用撤销</font> </br>
516 *
517 * @param idQuery
518 * 商户系统内部的订单号, transaction_id 、 out_trade_no 二选一,如果同时存在优先级:
519 * transaction_id> out_trade_no
520 * @return 撤销结果
521 * @see com.foxinmy.weixin4j.api.PayApi
522 * @since V3
523 * @throws WeixinException
524 */
525 public MerchantResult reverseOrder(IdQuery idQuery) throws WeixinException {
526 return payApi.reverseOrder(idQuery);
527 }
528
529 /**
530 * 关闭订单
531 * <p>
532 * 商户订单支付失败需要生成新单号重新发起支付,要对原订单号调用关单,避免重复支付;系统下单后,用户支付超时,系统退出不再受理,避免用户继续
533 * ,请调用关单接口,如果关单失败,返回已完 成支付请按正常支付处理。如果出现银行掉单,调用关单成功后,微信后台会主动发起退款。
534 * </p>
535 *
536 * @param outTradeNo
537 * 商户系统内部的订单号
538 * @return 执行结果
539 * @see com.foxinmy.weixin4j.api.PayApi
540 * @since V3
541 * @throws WeixinException
542 * @see <a href=
543 * "http://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_3">
544 * 关闭订单API</a>
545 */
546 public MerchantResult closeOrder(String outTradeNo) throws WeixinException {
547 return payApi.closeOrder(outTradeNo);
548 }
549
550 /**
551 * native支付URL转短链接:用于扫码原生支付模式一中的二维码链接转成短链接(weixin://wxpay/s/XXXXXX),减小二维码数据量
552 * ,提升扫描速度和精确度。
553 *
554 * @param url
555 * 具有native标识的支付URL
556 * @return 转换后的短链接
557 * @see com.foxinmy.weixin4j.api.PayApi
558 * @see <a href=
559 * "http://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_9">
560 * 转换短链接API</a>
561 * @since V3
562 * @throws WeixinException
563 */
564 public String getPayShorturl(String url) throws WeixinException {
565 return payApi.getShorturl(url);
566 }
567
568 /**
569 * 接口上报
570 *
571 * @param interfaceUrl
572 * 上报对应的接口的完整 URL, 类似: https://api.mch.weixin.q
573 * q.com/pay/unifiedorder
574 * @param executeTime
575 * 接口耗时情况,单位为毫秒
576 * @param outTradeNo
577 * 商户系统内部的订单号,商 户可以在上报时提供相关商户订单号方便微信支付更好 的提高服务质量。
578 * @param ip
579 * 发起接口调用时的机器 IP
580 * @param time
581 * 商户调用该接口时商户自己 系统的时间
582 * @param returnXml
583 * 调用接口返回的基本数据
584 * @return 处理结果
585 * @see com.foxinmy.weixin4j.api.PayApi
586 * @see <a href=
587 * "http://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_8">
588 * 接口测试上报API</a>
589 * @throws WeixinException
590 */
591 public XmlResult reportInterface(String interfaceUrl, int executeTime,
592 String outTradeNo, String ip, Date time, XmlResult returnXml)
593 throws WeixinException {
594 return payApi.reportInterface(interfaceUrl, executeTime, outTradeNo,
595 ip, time, returnXml);
596 }
597
598 /**
599 * 发放代金券(需要证书)
600 *
601 * @param couponStockId
602 * 代金券批次id
603 * @param partnerTradeNo
604 * 商户发放凭据号(格式:商户id+日期+流水号),商户侧需保持唯一性
605 * @param openId
606 * 用户的openid
607 * @param opUserId
608 * 操作员帐号, 默认为商户号 可在商户平台配置操作员对应的api权限 可为空
609 * @return 发放结果
610 * @see com.foxinmy.weixin4j.api.CouponApi
611 * @see com.foxinmy.weixin4j.payment.coupon.CouponResult
612 * @see <a href=
613 * "https://pay.weixin.qq.com/wiki/doc/api/tools/sp_coupon.php?chapter=12_3">
614 * 发放代金券接口</a>
615 * @throws WeixinException
616 */
617 public CouponResult sendCoupon(String couponStockId, String partnerTradeNo,
618 String openId, String opUserId) throws WeixinException {
619 return couponApi.sendCoupon(couponStockId, partnerTradeNo, openId,
620 opUserId);
621 }
622
623 /**
624 * 查询代金券批次
625 *
626 * @param couponStockId
627 * 代金券批次ID
628 * @return 代金券批次信息
629 * @see com.foxinmy.weixin4j.api.CouponApi
630 * @see com.foxinmy.weixin4j.payment.coupon.CouponStock
631 * @see <a href=
632 * "https://pay.weixin.qq.com/wiki/doc/api/tools/sp_coupon.php?chapter=12_4">
633 * 查询代金券批次信息接口</a>
634 * @throws WeixinException
635 */
636 public CouponStock queryCouponStock(String couponStockId)
637 throws WeixinException {
638 return couponApi.queryCouponStock(couponStockId);
639 }
640
641 /**
642 * 查询代金券详细
643 *
644 * @param openId
645 * 用户ID
646 * @param couponId
647 * 代金券ID
648 * @param stockId
649 * 代金劵对应的批次号
650 * @return 代金券详细信息
651 * @see com.foxinmy.weixin4j.api.CouponApi
652 * @see com.foxinmy.weixin4j.payment.coupon.CouponDetail
653 * @see <a href=
654 * "https://pay.weixin.qq.com/wiki/doc/api/tools/sp_coupon.php?chapter=12_5">
655 * 查询代金券详细信息接口</a>
656 * @throws WeixinException
657 */
658 public CouponDetail queryCouponDetail(String openId, String couponId,
659 String stockId) throws WeixinException {
660 return couponApi.queryCouponDetail(openId, couponId, stockId);
661 }
662
663 /**
664 * 发放红包 企业向微信用户个人发现金红包
665 *
666 * @param redpacket
667 * 红包信息
668 * @return 发放结果
669 * @see com.foxinmy.weixin4j.api.CashApi
670 * @see com.foxinmy.weixin4j.payment.mch.Redpacket
671 * @see com.foxinmy.weixin4j.payment.mch.RedpacketSendResult
672 * @see <a href=
673 * "https://pay.weixin.qq.com/wiki/doc/api/tools/cash_coupon.php?chapter=13_5">
674 * 发放现金红包接口</a>
675 * @see <a href=
676 * "https://pay.weixin.qq.com/wiki/doc/api/tools/cash_coupon.php?chapter=16_5">
677 * 发放裂变红包接口</a>
678 * @throws WeixinException
679 */
680 public RedpacketSendResult sendRedpack(Redpacket redpacket)
681 throws WeixinException {
682 return cashApi.sendRedpack(redpacket);
683 }
684
685 /**
686 * 批量发放红包 企业向微信用户个人发现金红包
687 *
688 * @param redpacket
689 * 多个红包信息
690 * @return 发放结果
691 * @see com.foxinmy.weixin4j.api.CashApi
692 * @see #sendRedpacks(Redpacket...)
693 * @throws WeixinException
694 */
695 public List<Future<RedpacketSendResult>> sendRedpacks(
696 Redpacket... redpackets) {
697 return cashApi.sendRedpacks(redpackets);
698 }
699
700 /**
701 * 查询红包记录
702 *
703 * @param outTradeNo
704 * 商户发放红包的商户订单号
705 * @return 红包记录
706 * @see com.foxinmy.weixin4j.api.CashApi
707 * @see com.foxinmy.weixin4j.payment.mch.RedpacketRecord
708 * @see <a href=
709 * "https://pay.weixin.qq.com/wiki/doc/api/tools/cash_coupon.php?chapter=13_7&index=6">
710 * 查询现金红包接口</a>
711 * @see <a href=
712 * "https://pay.weixin.qq.com/wiki/doc/api/tools/cash_coupon.php?chapter=16_6">
713 * 查询裂变红包接口</a>
714 * @throws WeixinException
715 */
716 public RedpacketRecord queryRedpack(String outTradeNo)
717 throws WeixinException {
718 return cashApi.queryRedpack(outTradeNo);
719 }
720
721 /**
722 * 企业付款
723 *
724 * @see CashApi#sendCorpPayment(CorpPayment)
725 */
726 public CorpPaymentResult sendCorpPayment(CorpPayment payment)
727 throws WeixinException {
728 return cashApi.sendCorpPayment(payment);
729 }
730
731 /**
732 * 企业付款查询 用于商户的企业付款操作进行结果查询,返回付款操作详细结果
733 *
734 * @param outTradeNo
735 * 商户调用企业付款API时使用的商户订单号
736 * @return 付款记录
737 * @see com.foxinmy.weixin4j.api.CashApi
738 * @see com.foxinmy.weixin4j.payment.mch.CorpPaymentRecord
739 * @see <a href=
740 * "https://pay.weixin.qq.com/wiki/doc/api/tools/mch_pay.php?chapter=14_3">
741 * 企业付款查询接口</a>
742 * @throws WeixinException
743 */
744 public CorpPaymentRecord queryCorpPayment(String outTradeNo)
745 throws WeixinException {
746 return cashApi.queryCorpPayment(outTradeNo);
747 }
748
749 /**
750 * 授权码查询OPENID
751 *
752 * @param authCode
753 * 扫码支付授权码,设备读取用户微信中的条码或者二维码信息
754 * @return 查询结果
755 * @see com.foxinmy.weixin4j.api.CashApi
756 * @see com.foxinmy.weixin4j.payment.mch.OpenIdResult
757 * @see <a href=
758 * "https://pay.weixin.qq.com/wiki/doc/api/micropay.php?chapter=9_13&index=9">
759 * 授权码查询OPENID</a>
760 * @throws WeixinException
761 */
762 public OpenIdResult authCode2openId(String authCode) throws WeixinException {
763 return payApi.authCode2openId(authCode);
764 }
765
766 /**
767 * 查询结算资金
768 *
769 * @param status
770 * 是否结算
771 * @param pageable
772 * 分页数据
773 * @param start
774 * 开始日期 查询未结算记录时,该字段可不传
775 * @param end
776 * 结束日期 查询未结算记录时,该字段可不传
777 * @return 结算金额记录
778 * @throws WeixinException
779 * @see com.foxinmy.weixin4j.api.CashApi
780 * @see com.foxinmy.weixin4j.payment.mch.SettlementRecord
781 * @see <a href=
782 * "https://pay.weixin.qq.com/wiki/doc/api/external/micropay.php?chapter=9_14&index=7">
783 * 查询结算资金接口</a>
784 */
785 public SettlementRecord querySettlement(boolean status, Pageable pageable,
786 Date start, Date end) throws WeixinException {
787 return cashApi.querySettlement(status, pageable, start, end);
788 }
789
790 /**
791 * 查询汇率
792 *
793 * @param currencyType
794 * 外币币种
795 * @param date
796 * 日期 不填则默认当天
797 * @return 汇率对象
798 * @throws WeixinException
799 * @see com.foxinmy.weixin4j.api.CashApi
800 * @see <a href=
801 * "https://pay.weixin.qq.com/wiki/doc/api/external/micropay.php?chapter=9_15&index=8">
802 * 查询汇率接口</a>
803 */
804 public double queryExchageRate(CurrencyType currencyType, Date date)
805 throws WeixinException {
806 return cashApi.queryExchageRate(currencyType, date);
807 }
808
809 /**
810 * 订单附加信息提交
811 *
812 * @param customsOrder
813 * 附加订单信息
814 * @return 报关结果
815 * @see com.foxinmy.weixin4j.api.CustomsApi
816 * @see com.foxinmy.weixin4j.payment.mch.CustomsOrder
817 * @see com.foxinmy.weixin4j.payment.mch.CustomsOrderResult
818 * @see <a href=
819 * "https://pay.weixin.qq.com/wiki/doc/api/external/declarecustom.php?chapter=18_1">
820 * 附加订单信息提交接口</a>
821 * @throws WeixinException
822 */
823 public CustomsOrderResult declareCustomsOrder(CustomsOrder customsOrder)
824 throws WeixinException {
825 return customsApi.declareCustomsOrder(customsOrder);
826 }
827
828 /**
829 * 订单附加信息查询
830 *
831 * @param idQuery
832 * out_trade_no,transaction_id,sub_order_no,sub_order_id四选一
833 * @param customsCity
834 * 海关
835 * @return 报关记录
836 * @see com.foxinmy.weixin4j.payment.mch.CustomsOrderRecord
837 * @see com.foxinmy.weixin4j.api.CustomsApi
838 * @see <a href=
839 * "https://pay.weixin.qq.com/wiki/doc/api/external/declarecustom.php?chapter=18_1">
840 * 附加订单信息查询接口</a>
841 * @throws WeixinException
842 */
843 public CustomsOrderRecord queryCustomsOrder(IdQuery idQuery,
844 CustomsCity customsCity) throws WeixinException {
845 return customsApi.queryCustomsOrder(idQuery, customsCity);
846 }
847
848 public final static String VERSION = Consts.VERSION;
849 }