2016-05-24 10:23:53 +08:00

989 lines
34 KiB
Java
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package com.foxinmy.weixin4j.payment;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Date;
import com.foxinmy.weixin4j.api.CashApi;
import com.foxinmy.weixin4j.api.CouponApi;
import com.foxinmy.weixin4j.api.CustomsApi;
import com.foxinmy.weixin4j.api.PayApi;
import com.foxinmy.weixin4j.exception.WeixinException;
import com.foxinmy.weixin4j.http.weixin.XmlResult;
import com.foxinmy.weixin4j.model.Pageable;
import com.foxinmy.weixin4j.model.WeixinPayAccount;
import com.foxinmy.weixin4j.payment.coupon.CouponDetail;
import com.foxinmy.weixin4j.payment.coupon.CouponResult;
import com.foxinmy.weixin4j.payment.coupon.CouponStock;
import com.foxinmy.weixin4j.payment.mch.CorpPayment;
import com.foxinmy.weixin4j.payment.mch.CorpPaymentRecord;
import com.foxinmy.weixin4j.payment.mch.CorpPaymentResult;
import com.foxinmy.weixin4j.payment.mch.CustomsOrder;
import com.foxinmy.weixin4j.payment.mch.CustomsOrderRecord;
import com.foxinmy.weixin4j.payment.mch.CustomsOrderResult;
import com.foxinmy.weixin4j.payment.mch.MchPayPackage;
import com.foxinmy.weixin4j.payment.mch.MchPayRequest;
import com.foxinmy.weixin4j.payment.mch.MerchantResult;
import com.foxinmy.weixin4j.payment.mch.NativePayResponse;
import com.foxinmy.weixin4j.payment.mch.OpenIdResult;
import com.foxinmy.weixin4j.payment.mch.Order;
import com.foxinmy.weixin4j.payment.mch.PrePay;
import com.foxinmy.weixin4j.payment.mch.Redpacket;
import com.foxinmy.weixin4j.payment.mch.RedpacketRecord;
import com.foxinmy.weixin4j.payment.mch.RedpacketSendResult;
import com.foxinmy.weixin4j.payment.mch.RefundRecord;
import com.foxinmy.weixin4j.payment.mch.RefundResult;
import com.foxinmy.weixin4j.payment.mch.SettlementRecord;
import com.foxinmy.weixin4j.type.BillType;
import com.foxinmy.weixin4j.type.CurrencyType;
import com.foxinmy.weixin4j.type.CustomsCity;
import com.foxinmy.weixin4j.type.IdQuery;
import com.foxinmy.weixin4j.type.TradeType;
import com.foxinmy.weixin4j.util.Weixin4jSettings;
/**
* 微信支付接å<C2A5>£å®žçް
*
* @className WeixinPayProxy
* @author jinyu(foxinmy@gmail.com)
* @date 2015年1月3日
* @since JDK 1.6
* @see <a href="http://pay.weixin.qq.com/wiki/doc/api/index.html">商户平å<C2B3>°æ”¯ä»˜API</a>
*/
public class WeixinPayProxy {
/**
* 微信支付API:js支付ã€<C3A3>扫ç <C3A7>支付等接å<C2A5>£
*/
private final PayApi payApi;
/**
* 代é‡åˆ¸API
*/
private final CouponApi couponApi;
/**
* 现é‡API
*/
private final CashApi cashApi;
/**
* æµ·å…³API
*/
private final CustomsApi customsApi;
/**
* é…<C3A9>置信æ<C2A1>¯
*/
private final Weixin4jSettings settings;
/**
* 使用weixin4j.propertiesé…<C3A9>置的支付账å<C2A6>·ä¿¡æ<C2A1>¯
*/
public WeixinPayProxy() {
this(new Weixin4jSettings());
}
/**
*
* @param settings
* 支付ç¸å…³é…<C3A9>置信æ<C2A1>¯
* @see com.foxinmy.weixin4j.util.Weixin4jSettings
*/
public WeixinPayProxy(Weixin4jSettings settings) {
this.settings = settings;
this.payApi = new PayApi(settings.getWeixinPayAccount());
this.couponApi = new CouponApi(settings.getWeixinPayAccount());
this.cashApi = new CashApi(settings.getWeixinPayAccount());
this.customsApi = new CustomsApi(settings.getWeixinPayAccount());
}
/**
* 获å<C2B7>微信商户支付信æ<C2A1>¯
*
* @return
*/
public WeixinPayAccount getPayAccount() {
return this.settings.getWeixinPayAccount();
}
/**
* 统一ä¸å<E280B9>•接å<C2A5>£</br>
* 除被扫支付场景以å¤ï¼Œå•†æˆ·ç³»ç»Ÿå…ˆè°ƒç”¨è¯¥æŽ¥å<C2A5>£åœ¨å¾®ä¿¡æ”¯ä»˜æœ<C3A6>务å<C2A1>Žå<C5BD>°ç”Ÿæˆ<C3A6>预支付交易å<E2809C>•ï¼Œè¿”åžæ­£ç¡®çš„预支付交易åžè¯<C3A8>标识å<E280A0>Žå†<C3A5>按扫ç <C3A7>ã€<C3A3>JSAPI
* ã€<C3A3>APPç­‰ä¸<C3A4>å<EFBFBD>Œåœºæ™¯ç”Ÿæˆ<C3A6>交易串调起支付ã€
*
* @param payPackage
* 包å<E280A6>«è®¢å<C2A2>•ä¿¡æ<C2A1>¯çš„对象
* @see com.foxinmy.weixin4j.api.PayApi
* @see com.foxinmy.weixin4j.payment.mch.MchPayPackage
* @see com.foxinmy.weixin4j.payment.mch.PrePay
* @see <a href=
* "http://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_1">统一ä¸å<E280B9>•接å<C2A5>£
* </a>
* @return 预支付对象
*/
public PrePay createPrePay(MchPayPackage payPackage) throws WeixinException {
return payApi.createPrePay(payPackage);
}
/**
* 创建支付请求对象
*
* @param payPackage
* 支付详情
* @return 支付请求对象
* @see com.foxinmy.weixin4j.api.PayApi
* @see com.foxinmy.weixin4j.payment.mch.JSAPIPayRequest JS支付
* @see com.foxinmy.weixin4j.payment.mch.NATIVEPayRequest 扫ç <C3A7>支付
* @see com.foxinmy.weixin4j.payment.mch.MICROPayRequest 刷å<C2B7>¡æ”¯ä»˜
* @see com.foxinmy.weixin4j.payment.mch.APPPayRequest APP支付
* @see com.foxinmy.weixin4j.payment.mch.WAPPayRequest WAP支付
* @throws WeixinException
*/
public MchPayRequest createPayRequest(MchPayPackage payPackage)
throws WeixinException {
return payApi.createPayRequest(payPackage);
}
/**
* åˆå»ºæ”¯ä»˜è¯·æ±å¯¹è±¡ã€<C3A3>完整å<C2B4>æ•°ã€
*
* @param body
* 商å“<C3A5>æ<EFBFBD><C3A6>è¿° <font color="red">必填项</font>
* @param detail
* 商å“<C3A5>å<EFBFBD><C3A5>称明细列表 é<>žå¿…填项
* @param outTradeNo
* 商户内部唯一订å<C2A2>•å<E280A2>· <font color="red">必填项</font>
* @param totalFee
* 商å“<C3A5>总é¢<C3A9> å<>•ä½<C3A4>å…ƒ <font color="red">必填项</font>
* @param notifyUrl
* 支付åžè°ƒURL <font color="red">必填项</font>
* @param createIp
* 订å<C2A2>•生æˆ<C3A6>的机器IP <font color="red">必填项</font>
* @param tradeType
* 交易类型 <font color="red">必填项</font>
* @param openId
* 用户ID <font color="red">tradeType=JSAPI时必填</font>
* @param productId
* 产å“<C3A5>ID <font color="red">tradeType=NATIVEæ—¶å¿…å¡«</font>
* @param attach
* 附加数æ<C2B0>®ï¼Œåœ¨æŸ¥è¯¢APIåŒæ”¯ä»˜é€šçŸ¥ä¸­åŽŸæ ·è¿”åžï¼Œè¯¥å­—段主è¦<C3A8>用于商户æ<C2B7>ºå¸¦è®¢å<C2A2>•的自定义数æ<C2B0>® é<>žå¿…填项
* @param timeStart
* 订å<C2A2>•生æˆ<C3A6>时间,格å¼<C3A5>为yyyyMMddHHmmss é<>žå¿…填项
* @param timeExpire
* 订å<C2A2>•失效时间,格å¼<C3A5>为yyyyMMddHHmmss;注æ„<C3A6>:最短失效时间间隔必须大于5åˆ†éŸ é<>žå¿…填项
* @param goodsTag
* 商å“<C3A5>标记,代é‡åˆ¸æˆç«å‡<C3A5>优惠功能的å<E2809E>æ•° é<>žå¿…填项
* @param limitPay
* 指定支付æ¹å¼<C3A5>:no_credit--指定ä¸<C3A4>能使用信用å<C2A8>¡æ”¯ä»˜ é<>žå¿…填项
* @param subOpenId
* 用户在å­<C3A5>商户appidä¸çš„唯一标识 é<>žå¿…å¡«
* openidåŒsub_openidå<64>¯ä»¥é€‰ä¼ å…¶ä¸­ä¹ä¸€ï¼Œå¦æžœé€‰æ©ä¼ sub_openid ,则必须传sub_appid
* @see com.foxinmy.weixin4j.api.PayApi
* @see com.foxinmy.weixin4j.payment.mch.JSAPIPayRequest JS支付
* @see com.foxinmy.weixin4j.payment.mch.NATIVEPayRequest 扫ç <C3A7>支付
* @see com.foxinmy.weixin4j.payment.mch.MICROPayRequest 刷å<C2B7>¡æ”¯ä»˜
* @see com.foxinmy.weixin4j.payment.mch.APPPayRequest APP支付
* @see com.foxinmy.weixin4j.payment.mch.WAPPayRequest WAP支付
* @throws WeixinException
*/
public MchPayRequest createPayRequest(String body, String detail,
String outTradeNo, double totalFee, String notifyUrl,
String createIp, TradeType tradeType, String openId,
String productId, String attach, Date timeStart, Date timeExpire,
String goodsTag, String limitPay, String subOpenId)
throws WeixinException {
return payApi.createPayRequest(body, detail, outTradeNo, totalFee,
notifyUrl, createIp, tradeType, openId, productId, attach,
timeStart, timeExpire, goodsTag, limitPay, subOpenId);
}
/**
* åˆå»ºJSAPI支付请æ±å¯¹è±¡
*
* @param openId
* 用户ID
* @param body
* 订å<C2A2>•æ<E280A2><C3A6>è¿°
* @param outTradeNo
* 订å<C2A2>•å<E280A2>·
* @param totalFee
* 订å<C2A2>•总é¢<C3A9> 按实际é‡é¢<C3A9>ä¼ å…¥å<C2A5>³å<C2B3>¯(å…ƒ) 构造函数会转æ<C2AC>¢ä¸ºåˆ
* @param notifyUrl
* 支付通知地å<C2B0>
* @param createIp
* ip地å<C2B0>
* @param attach
* 附加数æ<C2B0>® é<>žå¿…å¡«
* @see com.foxinmy.weixin4j.api.PayApi
* @see com.foxinmy.weixin4j.payment.mch.JSAPIPayRequest
* @return JSAPI支付对象
* @throws WeixinException
*/
public MchPayRequest createJSPayRequest(String openId, String body,
String outTradeNo, double totalFee, String notifyUrl,
String createIp, String attach) throws WeixinException {
return payApi.createJSPayRequest(openId, body, outTradeNo, totalFee,
notifyUrl, createIp, attach);
}
/**
* <p>
* 生æˆ<C3A6>ç¼è¾åœ°å<C2B0>€è¯·æ±
* </p>
*
* err_msg edit_address:ok获å<C2B7>ç¼è¾æ”¶è´§åœ°å<C2B0>€æˆ<C3A6>功</br> edit_address:fail获å<C2B7>ç¼è¾æ”¶è´§åœ°å<C2B0>€å¤±è´¥</br>
* userName 收货人姓å<E2809C><C3A5></br> telNumber 收货人电è¯<C3A8></br> addressPostalCode 邮编</br>
* proviceFirstStageName 彿 ‡æ”¶è´§åœ°å<C2B0>€ç¬¬ä¸€çº§åœ°å<C2B0>€</br> addressCitySecondStageName
* 彿 ‡æ”¶è´§åœ°å<C2B0>€ç¬¬äºŒçº§åœ°å<C2B0>€</br> addressCountiesThirdStageName 彿 ‡æ”¶è´§åœ°å<C2B0>€ç¬¬ä¸‰çº§åœ°å<C2B0>€</br>
* addressDetailInfo 详细收货地å<C2B0>€ä¿¡æ<C2A1>¯</br> nationalCode 收货地å<C2B0>€å½å®¶ç <C3A7></br>
*
* @param url
* 当å‰<C3A5>访问页的URL
* @param oauthToken
* oauth授æ<CB86>ƒæ—¶äº§ç”Ÿçš„token
* @see com.foxinmy.weixin4j.api.PayApi
* @see <a href=
* "https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_8&index=7">
* 收货地å<C2B0>€å…±äº«</a>
* @return ç¼è¾åœ°å<C2B0>€è¯·æ±JSON串
*/
public String createAddressRequestJSON(String url, String oauthToken) {
return payApi.createAddressRequestJSON(url, oauthToken);
}
/**
* åˆå»ºNative支付(扫ç <C3A7>支付)链接ã€<C3A3>模å¼<C3A5>一ã€
*
* @param productId
* 与订å<C2A2>•ID等价
* @return 支付链接
* @see com.foxinmy.weixin4j.api.PayApi
* @see <a href=
* "https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=6_1">扫ç <C3A7>支付
* </a>
* @see <a href=
* "https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=6_4">模å¼<C3A5>ä¸
* </a>
*/
public String createNativePayRequestURL(String productId) {
return payApi.createNativePayRequestURL(productId);
}
/**
* åˆå»ºNative支付(扫ç <C3A7>支付žè°ƒå¯¹è±¡ã€<C3A3>模å¼<C3A5>一ã€
*
* @param productId
* 商å“<C3A5>ID
* @param body
* 商å“<C3A5>æ<EFBFBD><C3A6>è¿°
* @param outTradeNo
* 商户内部唯一订å<C2A2>•å<E280A2>·
* @param totalFee
* 商å“<C3A5>总é¢<C3A9> å<>•ä½<C3A4>å…ƒ
* @param notifyUrl
* 支付åžè°ƒURL
* @param createIp
* 订å<C2A2>•生æˆ<C3A6>的机器 IP
* @param attach
* 附加数æ<C2B0>® é<>žå¿…å¡«
* @return Nativeåžè°ƒå¯¹è±¡
* @see com.foxinmy.weixin4j.api.PayApi
* @see com.foxinmy.weixin4j.payment.mch.NativePayResponse
* @see <a href=
* "https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=6_1">扫ç <C3A7>支付
* </a>
* @see <a href=
* "https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=6_4">模å¼<C3A5>ä¸
* </a>
* @throws WeixinException
*/
public NativePayResponse createNativePayResponse(String productId,
String body, String outTradeNo, double totalFee, String notifyUrl,
String createIp, String attach) throws WeixinException {
return payApi.createNativePayResponse(productId, body, outTradeNo,
totalFee, notifyUrl, createIp, attach);
}
/**
* åˆå»ºNative支付(扫ç <C3A7>支付)链接ã€<C3A3>模å¼<C3A5>二ã€
*
* @param productId
* 商å“<C3A5>ID
* @param body
* 商å“<C3A5>æ<EFBFBD><C3A6>è¿°
* @param outTradeNo
* 商户内部唯一订å<C2A2>•å<E280A2>·
* @param totalFee
* 商å“<C3A5>总é¢<C3A9> å<>•ä½<C3A4>å…ƒ
* @param notifyUrl
* 支付åžè°ƒURL
* @param createIp
* 订å<C2A2>•生æˆ<C3A6>的机器 IP
* @param attach
* 附加数æ<C2B0>® é<>žå¿…å¡«
* @return Native支付对象
* @see com.foxinmy.weixin4j.api.PayApi
* @see com.foxinmy.weixin4j.payment.mch.NATIVEPayRequest
* @see <a href=
* "https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=6_1">扫ç <C3A7>支付
* </a>
* @see <a href=
* "https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=6_5">模å¼<C3A5>二
* </a>
* @throws WeixinException
*/
public MchPayRequest createNativePayRequest(String productId, String body,
String outTradeNo, double totalFee, String notifyUrl,
String createIp, String attach) throws WeixinException {
return payApi.createNativePayRequest(productId, body, outTradeNo,
totalFee, notifyUrl, createIp, attach);
}
/**
* åˆå»ºAPP支付请æ±å¯¹è±¡
*
* @param body
* 商å“<C3A5>æ<EFBFBD><C3A6>è¿°
* @param outTradeNo
* 商户内部唯一订å<C2A2>•å<E280A2>·
* @param totalFee
* 商å“<C3A5>总é¢<C3A9> å<>•ä½<C3A4>å…ƒ
* @param notifyUrl
* 支付åžè°ƒURL
* @param createIp
* 订å<C2A2>•生æˆ<C3A6>的机器 IP
* @param attach
* 附加数æ<C2B0>® é<>žå¿…å¡«
* @return APP支付对象
* @see com.foxinmy.weixin4j.api.PayApi
* @see com.foxinmy.weixin4j.payment.mch.APPPayRequest
* @see <a href=
* "https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=8_1">
* APP支付</a>
* @throws WeixinException
*/
public MchPayRequest createAppPayRequest(String body, String outTradeNo,
double totalFee, String notifyUrl, String createIp, String attach)
throws WeixinException {
return payApi.createAppPayRequest(body, outTradeNo, totalFee,
notifyUrl, createIp, attach);
}
/**
* åˆå»ºWAP支付请æ±å¯¹è±¡
*
* @param body
* 商å“<C3A5>æ<EFBFBD><C3A6>è¿°
* @param outTradeNo
* 商户内部唯一订å<C2A2>•å<E280A2>·
* @param totalFee
* 商å“<C3A5>总é¢<C3A9> å<>•ä½<C3A4>å…ƒ
* @param notifyUrl
* 支付åžè°ƒURL
* @param createIp
* 订å<C2A2>•生æˆ<C3A6>的机器 IP
* @param attach
* 附加数æ<C2B0>® é<>žå¿…å¡«
* @return WAP支付对象
* @see com.foxinmy.weixin4j.api.PayApi
* @see com.foxinmy.weixin4j.payment.mch.WAPPayRequest
* @see <a href=
* "https://pay.weixin.qq.com/wiki/doc/api/wap.php?chapter=15_1">WAP支付
* </a>
* @throws WeixinException
*/
public MchPayRequest createWAPPayRequest(String body, String outTradeNo,
double totalFee, String notifyUrl, String createIp, String attach)
throws WeixinException {
return payApi.createWAPPayRequest(body, outTradeNo, totalFee,
notifyUrl, createIp, attach);
}
/**
* æ<><C3A6>交被扫支付
*
* @param authCode
* 扫ç <C3A7>支付授æ<CB86>ƒç <C3A7> ,设备读å<C2BB>用户微信中的æ<E2809E>¡ç <C3A7>æˆè€…二维ç <C3A7>ä¿¡æ<C2A1>¯
* @param body
* 商å“<C3A5>æ<EFBFBD><C3A6>è¿°
* @param outTradeNo
* 商户内部唯一订å<C2A2>•å<E280A2>·
* @param totalFee
* 商å“<C3A5>总é¢<C3A9> å<>•ä½<C3A4>å…ƒ
* @param createIp
* 订å<C2A2>•生æˆ<C3A6>的机器 IP
* @param attach
* 附加数æ<C2B0>® é<>žå¿…å¡«
* @return 支付的订å<C2A2>•ä¿¡æ<C2A1>¯
* @see com.foxinmy.weixin4j.api.PayApi
* @see com.foxinmy.weixin4j.payment.mch.MICROPayRequest
* @see com.foxinmy.weixin4j.payment.mch.Order
* @see <a href=
* "http://pay.weixin.qq.com/wiki/doc/api/micropay.php?chapter=9_10">
* æ<><C3A6>交被扫支付API</a>
* @throws WeixinException
*/
public MchPayRequest createMICROPayRequest(String authCode, String body,
String outTradeNo, double totalFee, String createIp, String attach)
throws WeixinException {
return payApi.createMICROPayRequest(authCode, body, outTradeNo,
totalFee, createIp, attach);
}
/**
* 订å<C2A2>•查询
* <p>
* 当商户å<C2B7>Žå<C5BD>°ã€<C3A3>ç½ç»œã€<C3A3>æœ<C3A6>务器等出现å¼å¸¸ï¼Œå•†æˆ·ç³»ç»Ÿæœ€ç»ˆæœªæŽ¥æ”¶åˆ°æ”¯ä»˜é€šçŸ¥ï¼</br> 调用支付接å<C2A5>£å<C2A3>Žï¼Œè¿”åžç³»ç»Ÿé”™è¯¯æˆæœªçŸ¥äº¤æ˜“状æ€<C3A6>情况ï¼</br>
* 调用被扫支付API,返åžUSERPAYING的状æ€<C3A6>ï¼</br> 调用关å<C2B3>•æˆæ¤é”€æŽ¥å<C2A5>£APIä¹å‰<C3A5>,需确认支付状æ€<C3A6>ï¼
* </P>
*
* @param idQuery
* 商户系统内部的订å<C2A2>•å<E280A2>·, transaction_idã€<C3A3>out_trade_no 二 选一,妿žœå<C593>Œæ—¶å­˜åœ¨ä¼˜å…ˆçº§:
* transaction_id> out_trade_no
* @since V3
* @see com.foxinmy.weixin4j.payment.mch.Order
* @see com.foxinmy.weixin4j.api.PayApi
* @see <a href=
* "http://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_2">
* 订å<C2A2>•查询API</a>
* @return 订å<C2A2>•详情
* @throws WeixinException
*/
public Order queryOrder(IdQuery idQuery) throws WeixinException {
return payApi.queryOrder(idQuery);
}
/**
* 申请退款(请æ±éœ€è¦<C3A8>å<EFBFBD>Œå<C592>è¯<C3A8>书)</br>
* <p>
* 当交易å<E2809C>生ä¹å<E280B9>Žä¸€æ®µæ—¶é—´å†…,由于买家æˆè€…å<E280A6>家的原å éœ€è¦<C3A8>退款时,å<C592>å®¶å<C2B6>¯ä»¥é€šè¿‡é€€æ¬¾æŽ¥å<C2A5>£å°†æ”¯ä»˜æ¬¾é€€è¿˜ç»™ä¹°å®¶ï¼Œå¾®ä¿¡æ”¯ä»˜å°†åœ¨æ”¶åˆ°é€€æ¬¾è¯·æ±å¹¶ä¸”验è¯<C3A8>æˆ<C3A6>功ä¹å<E280B9>Žï¼Œ
* 按照退款规则将支付款按原路退到买家å¸<C3A5>å<EFBFBD>·ä¸Šã€
* </p>
* <p style="color:red">
* 1.交易时间超过å<E280A1>Šå¹´çš„订å<C2A2>•无法æ<E280A2><C3A6>交退款ï¼
* 2.微信支付退款支æŒ<C3A6>å<EFBFBD>•笔交易分多次退款,多次退款需è¦<C3A8>æ<EFBFBD><C3A6>交原支付订å<C2A2>•的商户订å<C2A2>•å<E280A2>·åŒè®¾ç½®ä¸<C3A4>å<EFBFBD>Œçš„退款å<C2BE>•å<E280A2>·ã€ä¸€ç¬”退款失败å<C2A5>Žé‡<C3A9>æ°æ<C2B0><C3A6>交
* ,è¦<C3A8>采用原æ<C5B8>¥çš„退款å<C2BE>•å<E280A2>·ã€æ€»é€€æ¬¾é‡é¢<C3A9>ä¸<C3A4>能超过用户实际支付é‡é¢<C3A9>ã€
* </p>
*
* @param certificate
* å<>Žç¼€ä¸º*.p12çš„è¯<C3A8>书æ‡ä»¶
* @param idQuery
* 商户系统内部的订å<C2A2>•å<E280A2>·, transaction_id ã€<C3A3> out_trade_no 二选一,妿žœå<C593>Œæ—¶å­˜åœ¨ä¼˜å…ˆçº§:
* transaction_id> out_trade_no
* @param outRefundNo
* 商户系统内部的退款å<C2BE>•å<E280A2>·,商 户系统内部唯一,å<>Œä¸€é€€æ¬¾å<C2BE>•å<E280A2>·å¤šæ¬¡è¯·æ±å<E2809A>ªé€€ä¸€ç¬”
* @param totalFee
* 订å<C2A2>•总é‡é¢<C3A9><>•ä½<C3A4>为元
* @param refundFee
* 退款总é‡é¢<C3A9><>•ä½<C3A4>为元,å<>¯ä»¥å<C2A5>šéƒ¨åˆ†é€€æ¬¾
* @param refundFeeType
* è´§å¸<C3A5>ç±»åžï¼Œç¬¦å<C2A6>ˆISO 4217标准的三ä½<C3A4>å­—æ¯<C3A6>代ç <C3A7>,默认人æ°å¸<C3A5>:CNY
* @param opUserId
* æ“<C3A6>作å˜å¸<C3A5>å<EFBFBD>·, 默认为商户å<C2B7>·
*
* @return 退款申请结果
* @see com.foxinmy.weixin4j.payment.mch.RefundResult
* @see com.foxinmy.weixin4j.api.PayApi
* @see <a href=
* "http://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_4">
* 申请退款API</a>
* @since V3
* @throws WeixinException
*/
public RefundResult applyRefund(InputStream certificate, IdQuery idQuery,
String outRefundNo, double totalFee, double refundFee,
CurrencyType refundFeeType, String opUserId) throws WeixinException {
return payApi.applyRefund(certificate, idQuery, outRefundNo, totalFee,
refundFee, refundFeeType, opUserId);
}
/**
* 退款申请(å…¨é¢<C3A9>退款)
*
* @throws IOException
*
* @see {@link #applyRefund(InputStream, IdQuery, String, double, double, String,CurrencyType)}
*/
public RefundResult applyRefund(IdQuery idQuery, String outRefundNo,
double totalFee) throws WeixinException, IOException {
return payApi.applyRefund(
new FileInputStream(settings.getCertificateFile0()), idQuery,
outRefundNo, totalFee);
}
/**
* 退款查询
* <p>
* æ<><C3A6>交退款申请å<C2B7>Žï¼Œé€šè¿‡è°ƒç”¨è¯¥æŽ¥å<C2A5>£æŸ¥è¯¢é€€æ¬¾çжæ€<C3A6>ã€é€€æ¬¾æœ‰ä¸€å®šå»¶æ—¶ï¼Œç”¨é¶é±æ”¯ä»˜çš„退款20分éŸå†…到账,银行å<C592>¡æ”¯ä»˜çš„退款3个工作日å<C2A5>Žé‡<C3A9>æ°æŸ¥è¯¢é€€æ¬¾çжæ€<C3A6>ã€
* </p>
*
* @param idQuery
* å<>•å<E280A2>· refund_idã€<C3A3>out_refund_noã€<C3A3> out_trade_no ã€<C3A3> transaction_id
* å个å<C2AA>数必填一个,优先级为:
* refund_id>out_refund_no>transaction_id>out_trade_no
* @return 退款记录
* @see com.foxinmy.weixin4j.api.PayApi
* @see com.foxinmy.weixin4j.payment.mch.RefundRecord
* @see <a href=
* "http://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_5">
* 退款查询API</a>
* @since V3
* @throws WeixinException
*/
public RefundRecord queryRefund(IdQuery idQuery) throws WeixinException {
return payApi.queryRefund(idQuery);
}
/**
* ä¸è½½å¯¹è´¦å<C2A6>•<br>
* 1.微信侧未æˆ<C3A6>功ä¸å<E280B9>•的交易ä¸<C3A4>会出现在对账å<C2A6>•ä¸­ã€æ”¯ä»˜æˆ<C3A6>功å<C5B8>Žæ¤é”€çš„交易会出现在对账 å<>•中,跟原支付å<CB9C>•订å<C2A2>•å<E280A2>·ä¸€è‡´,bill_type 为
* REVOKED;<br>
* 2.微信在次日 9 ç¹å<C2B9>¯åŠ¨ç”Ÿæˆ<C3A6>å‰<C3A5>一天的对账å<C2A6>•,建议商户 9 ç¹å<C2B9>Šå<C5A0>Žå†<C3A5>获å<C2B7>;<br>
* 3.对账å<C2A6>•中涉å<E280B0>Šé‡é¢<C3A9>的字段å<C2B5>•ä½<C3A4>为“元â€<C3A2>ã€<br>
*
* @param billDate
* ä¸è½½å¯¹è´¦å<C2A6>•的日期
* @param billType
* ä¸è½½å¯¹è´¦å<C2A6>•çš„ç±»åž ALL,è¿”åžå½“日所有订å<C2A2>•ä¿¡æ<C2A1>¯, 默认值 SUCCESS,è¿”åžå½“æ—¥æˆ<C3A6>功支付的订å<C2A2>
* REFUND,è¿”åžå½“日退款订å<C2A2>
* @return excel表格
* @since V2 & V3
* @see com.foxinmy.weixin4j.api.PayApi
* @see <a href=
* "http://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_6">
* ä¸è½½å¯¹è´¦å<C2A6>•API</a>
* @throws WeixinException
*/
public File downloadBill(Date billDate, BillType billType)
throws WeixinException {
return payApi.downloadBill(billDate, billType, settings.getTmpdir0());
}
/**
* 冲正订å<C2A2>•(需è¦<C3A8>è¯<C3A8>书)</br> 当支付返回失败,æˆæ”¶é“¶ç³»ç»Ÿè¶…时需è¦<C3A8>å<EFBFBD>消交易,å<>¯ä»¥è°ƒç”¨è¯¥æŽ¥å<C2A5>£</br> 接å<C2A5>£é€»è¾:支
* 付失败的关å<C2B3>•,支付æˆ<C3A6>功的æ¤é”€æ”¯ä»˜</br> <font color="red">7天以内的å<E2809E>•å<E280A2>¯æ¤é”€,其仿­£å¸¸æ”¯ä»˜çš„å<E2809E>
* å¦éœ€å®žçްç¸å<C2B8>ŒåŠŸèƒ½è¯·è°ƒç”¨é€€æ¬¾æŽ¥å<C2A5>£</font></br> <font
* color="red">调用扣款接å<C2A5>£å<C2A3>Žè¯·å¿ç«å<E280B9>³è°ƒç”¨æ¤é”€,需è¦<C3A8>等待5ç§ä»¥ä¸Šã€å…ˆè°ƒç”¨æŸ¥å<C2A5>•接å<C2A5>£,如果没有确切的返回,å†<C3A5>调用æ¤é”€</font> </br>
*
* @param certificate
* è¯<C3A8>书æ‡ä»¶(V2版本å<C2AC>Žç¼€ä¸º*.pfx,V3版本å<C2AC>Žç¼€ä¸º*.p12)
* @param idQuery
* 商户系统内部的订å<C2A2>•å<E280A2>·, transaction_id ã€<C3A3> out_trade_no 二选一,妿žœå<C593>Œæ—¶å­˜åœ¨ä¼˜å…ˆçº§:
* transaction_id> out_trade_no
* @return 撤销结果
* @see com.foxinmy.weixin4j.api.PayApi
* @since V3
* @throws WeixinException
*/
public MerchantResult reverseOrder(InputStream certificate, IdQuery idQuery)
throws WeixinException {
return payApi.reverseOrder(certificate, idQuery);
}
/**
* 冲正撤销
*
* @param idQuery
* transaction_idã€<C3A3>out_trade_no 二选一
* @return 撤销结果
* @see {@link #reverseOrder(InputStream, IdQuery)}
* @throws WeixinException
* @throws IOException
*/
public MerchantResult reverseOrder(IdQuery idQuery) throws WeixinException,
IOException {
return payApi.reverseOrder(
new FileInputStream(settings.getCertificateFile0()), idQuery);
}
/**
* 关闭订å<C2A2>
* <p>
* 商户订å<C2A2>•支付失败需è¦<C3A8>生æˆ<C3A6>æ°å<C2B0>•å<E280A2>·é‡<C3A9>æ°å<C2B0>起支付,è¦<C3A8>对原订å<C2A2>•å<E280A2>·è°ƒç”¨å…³å<C2B3>•,é<C592>¿å…<C3A5>é‡<C3A9>å¤<C3A5>支付ï¼ç³»ç»Ÿä¸å<E280B9>•å<E280A2>Žï¼Œç”¨æˆ·æ”¯ä»˜è¶…时,系统退出ä¸<C3A4>å†<C3A5>å<EFBFBD>—ç<E28094>†ï¼Œé<C592>¿å…<C3A5>用户继续
* ,请调用关å<C2B3>•接å<C2A5>£,妿žœå…³å<C2B3>•失败,返回已完 æˆ<C3A6>支付请按正常支付处ç<E2809E>†ã€å¦æžœå‡ºçŽ°é“¶è¡ŒæŽ‰å<E280B0>•,调用关å<C2B3>•æˆ<C3A6>功å<C5B8>Ž,微信å<C2A1>Žå<C5BD>°ä¼šä¸»åЍå<C2A8>起退款ã€
* </p>
*
* @param outTradeNo
* 商户系统内部的订å<C2A2>•å<E280A2>·
* @return 执行结果
* @see com.foxinmy.weixin4j.api.PayApi
* @since V3
* @throws WeixinException
* @see <a href=
* "http://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_3">
* 关闭订å<C2A2>•API</a>
*/
public MerchantResult closeOrder(String outTradeNo) throws WeixinException {
return payApi.closeOrder(outTradeNo);
}
/**
* native支付URL转短链接:用于扫ç <C3A7>原生支付模å¼<C3A5>一中的二维ç <C3A7>链接转æˆ<C3A6>短链接(weixin://wxpay/s/XXXXXX),å‡<C3A5>å°<C3A5>二维ç <C3A7>æ•°æ<C2B0>®é‡<C3A9>
* ,æ<C592><C3A6>å<EFBFBD>‡æ‰«æ<C2AB><C3A6>速度åŒç²¾ç¡®åº¦ã€
*
* @param url
* 具有native标识的支付URL
* @return 转æ<C2AC>¢å<C2A2>Žçš„短链接
* @see com.foxinmy.weixin4j.api.PayApi
* @see <a href=
* "http://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_9">
* 转æ<C2AC>¢çŸ­é“¾æŽ¥API</a>
* @since V3
* @throws WeixinException
*/
public String getPayShorturl(String url) throws WeixinException {
return payApi.getShorturl(url);
}
/**
* 接å<C2A5>£ä¸ŠæŠ¥
*
* @param interfaceUrl
* 上报对应的接å<C2A5>£çš„完整 URL, 类似: https://api.mch.weixin.q
* q.com/pay/unifiedorder
* @param executeTime
* 接å<C2A5>£è€—时情况,å<>•ä½<C3A4>为毫ç§
* @param outTradeNo
* 商户系统内部的订å<C2A2>•å<E280A2>·,商 户å<C2B7>¯ä»¥åœ¨ä¸ŠæŠ¥æ—¶æ<C2B6><C3A6>ä¾ç¸å…³å•†æˆ·è®¢å<C2A2>•å<E280A2>·æ¹ä¾¿å¾®ä¿¡æ”¯ä»˜æ´å¥½ çš„æ<E2809E><C3A6>高æœ<C3A6>务质é‡<C3A9>ã€
* @param ip
* å<>起接å<C2A5>£è°ƒç”¨æ—¶çš„æœºå™¨ IP
* @param time
* 商户调用该接å<C2A5>£æ—¶å•†æˆ·è‡ªå·± 系统的时间
* @param returnXml
* 调用接å<C2A5>£è¿”åžçš„基本数æ<C2B0>®
* @return 处ç<E2809E>†ç»“æžœ
* @see com.foxinmy.weixin4j.api.PayApi
* @see <a href=
* "http://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_8">
* 接å<C2A5>£æµè¯•上报API</a>
* @throws WeixinException
*/
public XmlResult interfaceReport(String interfaceUrl, int executeTime,
String outTradeNo, String ip, Date time, XmlResult returnXml)
throws WeixinException {
return payApi.interfaceReport(interfaceUrl, executeTime, outTradeNo,
ip, time, returnXml);
}
/**
* å<>放代é‡åˆ¸(需è¦<C3A8>è¯<C3A8>书)
*
* @param certificate
* å<>Žç¼€ä¸º*.p12çš„è¯<C3A8>书æ‡ä»¶
* @param couponStockId
* 代é‡åˆ¸æ‰¹æ¬¡id
* @param partnerTradeNo
* 商户å<C2B7>放凭æ<C2AD>®å<C2AE>·ï¼ˆæ ¼å¼<C3A5>:商户id+日期+æµ<C3A6>æ°´å<C2B4>·ï¼‰ï¼Œå•†æˆ·ä¾§éœ€ä¿<C3A4>æŒ<C3A6>唯一性
* @param openId
* 用户的openid
* @param opUserId
* æ“<C3A6>作å˜å¸<C3A5>å<EFBFBD>·, 默认为商户å<C2B7>· å<>¯åœ¨å•†æˆ·å¹³å<C2B3>°é…<C3A9>ç½®æ“<C3A6>作å˜å¯¹åº”çš„apiæ<69>ƒé™<C3A9> å<>¯ä¸ºç©º
* @return å<>放结果
* @see com.foxinmy.weixin4j.api.CouponApi
* @see com.foxinmy.weixin4j.payment.coupon.CouponResult
* @see <a href=
* "https://pay.weixin.qq.com/wiki/doc/api/tools/sp_coupon.php?chapter=12_3">
* å<>放代é‡åˆ¸æŽ¥å<C2A5>£</a>
* @throws WeixinException
*/
public CouponResult sendCoupon(InputStream certificate,
String couponStockId, String partnerTradeNo, String openId,
String opUserId) throws WeixinException {
return couponApi.sendCoupon(certificate, couponStockId, partnerTradeNo,
openId, opUserId);
}
/**
* å<>放代é‡åˆ¸
*
* @see {@link com.foxinmy.weixin4j.payment.WeixinPayProxy#sendCoupon(InputStream, String, String, String, String)}
*/
public CouponResult sendCoupon(String couponStockId, String partnerTradeNo,
String openId) throws WeixinException, IOException {
return couponApi.sendCoupon(
new FileInputStream(settings.getCertificateFile0()),
couponStockId, partnerTradeNo, openId, null);
}
/**
* 查询代金券批次
*
* @param couponStockId
* 代é‡åˆ¸æ‰¹æ¬¡ID
* @return 代é‡åˆ¸æ‰¹æ¬¡ä¿¡æ<C2A1>¯
* @see com.foxinmy.weixin4j.api.CouponApi
* @see com.foxinmy.weixin4j.payment.coupon.CouponStock
* @see <a href=
* "https://pay.weixin.qq.com/wiki/doc/api/tools/sp_coupon.php?chapter=12_4">
* 查询代é‡åˆ¸æ‰¹æ¬¡ä¿¡æ<C2A1>¯æŽ¥å<C2A5>£</a>
* @throws WeixinException
*/
public CouponStock queryCouponStock(String couponStockId)
throws WeixinException {
return couponApi.queryCouponStock(couponStockId);
}
/**
* 查询代金券详细
*
* @param couponId
* 代é‡åˆ¸ID
* @return 代é‡åˆ¸è¯¦ç»†ä¿¡æ<C2A1>¯
* @see com.foxinmy.weixin4j.api.CouponApi
* @see com.foxinmy.weixin4j.payment.coupon.CouponDetail
* @see <a href=
* "https://pay.weixin.qq.com/wiki/doc/api/tools/sp_coupon.php?chapter=12_5">
* 查询代é‡åˆ¸è¯¦ç»†ä¿¡æ<C2A1>¯æŽ¥å<C2A5>£</a>
* @throws WeixinException
*/
public CouponDetail queryCouponDetail(String couponId)
throws WeixinException {
return couponApi.queryCouponDetail(couponId);
}
/**
* å<>放红包 ä¼<C3A4>业å<C5A1>微信用户个人å<C2BA>现é‡çº¢åŒ…
*
* @param certificate
* å<>Žç¼€ä¸º*.p12çš„è¯<C3A8>书æ‡ä»¶
* @param redpacket
* 红包信æ<C2A1>¯
* @return å<>放结果
* @see com.foxinmy.weixin4j.api.CashApi
* @see com.foxinmy.weixin4j.payment.mch.Redpacket
* @see com.foxinmy.weixin4j.payment.mch.RedpacketSendResult
* @see <a href=
* "https://pay.weixin.qq.com/wiki/doc/api/tools/cash_coupon.php?chapter=13_5">
* å<>放现é‡çº¢åŒ…接å<C2A5>£</a>
* @see <a href=
* "https://pay.weixin.qq.com/wiki/doc/api/tools/cash_coupon.php?chapter=16_5">
* å<>放è£å<E2809A>˜çº¢åŒ…接å<C2A5>£</a>
* @throws WeixinException
*/
public RedpacketSendResult sendRedpack(InputStream certificate,
Redpacket redpacket) throws WeixinException {
return cashApi.sendRedpack(certificate, redpacket);
}
/**
* å<>放红包
*
* @see {@link #sendRedpack(InputStream, Redpacket)}
*/
public RedpacketSendResult sendRedpack(Redpacket redpacket)
throws WeixinException, IOException {
return cashApi.sendRedpack(
new FileInputStream(settings.getCertificateFile0()), redpacket);
}
/**
* 查询红包记录
*
* @param certificate
* å<>Žç¼€ä¸º*.p12çš„è¯<C3A8>书æ‡ä»¶
* @param outTradeNo
* 商户å<C2B7>放红包的商户订å<C2A2>•å<E280A2>·
* @return 红包记录
* @see com.foxinmy.weixin4j.api.CashApi
* @see com.foxinmy.weixin4j.payment.mch.RedpacketRecord
* @see <a href=
* "https://pay.weixin.qq.com/wiki/doc/api/tools/cash_coupon.php?chapter=13_7&index=6">
* 查询现é‡çº¢åŒ…接å<C2A5>£</a>
* @see <a href=
* "https://pay.weixin.qq.com/wiki/doc/api/tools/cash_coupon.php?chapter=16_6">
* 查询è£å<E2809A>˜çº¢åŒ…接å<C2A5>£</a>
* @throws WeixinException
*/
public RedpacketRecord queryRedpack(InputStream certificate,
String outTradeNo) throws WeixinException {
return cashApi.queryRedpack(certificate, outTradeNo);
}
/**
* 查询红包
*
* @see {@link #queryRedpack(InputStream,String)}
*/
public RedpacketRecord queryRedpack(String outTradeNo)
throws WeixinException, IOException {
return cashApi
.queryRedpack(
new FileInputStream(settings.getCertificateFile0()),
outTradeNo);
}
/**
* ä¼<C3A4>业付款 实现ä¼<C3A4>业å<C5A1>个人付款,éˆå¯¹éƒ¨åˆ†æœ‰å¼€å<E282AC>能åŠçš„商户, æ<><C3A6>ä¾é€šè¿‡API完æˆ<C3A6>ä¼<C3A4>业付款的功能〠比å¦ç®å‰<C3A5>çš„ä¿<C3A4>险行业å<C5A1>客户退ä¿<C3A4>ã€<C3A3>给付ã€<C3A3>ç<EFBFBD>†èµ”ã€
* <p>
* 接å<C2A5>£è°ƒç”¨è§„则:
* <p>
* <li>ç»™å<E284A2>Œä¸€ä¸ªå®žå<C5BE><C3A5>用户付款,å<C592>•笔å<E2809D>•æ—¥é™<C3A9>é¢<C3A9>2W/2W
* <li>ç»™å<E284A2>Œä¸€ä¸ªé<C2AA>žå®žå<C5BE><C3A5>用户付款,å<C592>•笔å<E2809D>•æ—¥é™<C3A9>é¢<C3A9>2000/2000
* <li>一个商户å<C2B7>Œä¸€æ—¥ä»˜æ¬¾æ€»é¢<C3A9>é™<C3A9>é¢<C3A9>100W
* <li>å<>•笔最å°<C3A5>é‡é¢<C3A9>默认为1å…ƒ
* <li>æ¯<C3A6>个用户æ¯<C3A6>天最多å<C5A1>¯ä»˜æ¬¾10次,å<C592>¯ä»¥åœ¨å•†æˆ·å¹³å<C2B3>°--API安全è¿è¡Œè®¾ç½®
* <li>ç»™å<E284A2>Œä¸€ä¸ªç”¨æˆ·ä»˜æ¬¾æ—¶é—´é—´éš”ä¸<C3A4>得低于15ç§
*
* @param certificate
* å<>Žç¼€ä¸º*.p12çš„è¯<C3A8>书æ‡ä»¶
* @param payment
* 付款信æ<C2A1>¯
* @return 付款结果
* @see com.foxinmy.weixin4j.api.CashApi
* @see com.foxinmy.weixin4j.payment.mch.CorpPayment
* @see com.foxinmy.weixin4j.payment.mch.CorpPaymentResult
* @see <a href=
* "https://pay.weixin.qq.com/wiki/doc/api/tools/mch_pay.php?chapter=14_2">
* ä¼<C3A4>业付款接å<C2A5>£</a>
* @throws WeixinException
*/
public CorpPaymentResult sendCorpPayment(InputStream certificate,
CorpPayment payment) throws WeixinException {
return cashApi.sendCorpPayment(certificate, payment);
}
/**
* ä¼<C3A4>业付款
*
* @see {@link #sendCorpPayment(InputStream, CorpPayment)}
*/
public CorpPaymentResult sendCorpPayment(CorpPayment payment)
throws WeixinException, IOException {
return cashApi.sendCorpPayment(
new FileInputStream(settings.getCertificateFile0()), payment);
}
/**
* ä¼<C3A4>业付款查询 用于商户的ä¼<C3A4>业付款æ“<C3A6>作è¿è¡Œç»“果查询,返åžä»˜æ¬¾æ“<C3A6>作详细结果
*
* @param certificate
* å<>Žç¼€ä¸º*.p12çš„è¯<C3A8>书æ‡ä»¶
* @param outTradeNo
* 商户调用ä¼<C3A4>业付款API时使用的商户订å<C2A2>•å<E280A2>·
* @return 付款记录
* @see com.foxinmy.weixin4j.api.CashApi
* @see com.foxinmy.weixin4j.payment.mch.CorpPaymentRecord
* @see <a href=
* "https://pay.weixin.qq.com/wiki/doc/api/tools/mch_pay.php?chapter=14_3">
* ä¼<C3A4>业付款查询接å<C2A5>£</a>
* @throws WeixinException
*/
public CorpPaymentRecord queryCorpPayment(InputStream certificate,
String outTradeNo) throws WeixinException {
return cashApi.queryCorpPayment(certificate, outTradeNo);
}
/**
* ä¼<C3A4>业付款查询
*
* @see {@link #CorpPaymentRecord(InputStream, String)}
*/
public CorpPaymentRecord queryCorpPayment(String outTradeNo)
throws WeixinException, IOException {
return cashApi
.queryCorpPayment(
new FileInputStream(settings.getCertificateFile0()),
outTradeNo);
}
/**
* 授æ<CB86>ƒç <C3A7>查询OPENID
*
* @param authCode
* 扫ç <C3A7>支付授æ<CB86>ƒç <C3A7>,设备读å<C2BB>用户微信中的æ<E2809E>¡ç <C3A7>æˆè€…二维ç <C3A7>ä¿¡æ<C2A1>¯
* @return 查询结果
* @see com.foxinmy.weixin4j.api.CashApi
* @see com.foxinmy.weixin4j.payment.mch.OpenIdResult
* @see <a href=
* "https://pay.weixin.qq.com/wiki/doc/api/micropay.php?chapter=9_13&index=9">
* 授æ<CB86>ƒç <C3A7>查询OPENID</a>
* @throws WeixinException
*/
public OpenIdResult authCode2openId(String authCode) throws WeixinException {
return payApi.authCode2openId(authCode);
}
/**
* 查询结算资金
*
* @param status
* 是å<C2AF>¦ç»“ç®—
* @param pageable
* 分页数æ<C2B0>®
* @param start
* 开始日期 查询未结算记录时,该字段å<C2B5>¯ä¸<C3A4>ä¼ 
* @param end
* 结æ<E2809C>Ÿæ—¥æœŸ 查询未结算记录时,该字段å<C2B5>¯ä¸<C3A4>ä¼ 
* @return 结算é‡é¢<C3A9>记录
* @throws WeixinException
* @see com.foxinmy.weixin4j.api.CashApi
* @see com.foxinmy.weixin4j.payment.mch.SettlementRecord
* @see <a href=
* "https://pay.weixin.qq.com/wiki/doc/api/external/micropay.php?chapter=9_14&index=7">
* æŸ¥è¯¢ç»“ç®—èµ„é‡æŽ¥å<C2A5>£</a>
*/
public SettlementRecord querySettlement(boolean status, Pageable pageable,
Date start, Date end) throws WeixinException {
return cashApi.querySettlement(status, pageable, start, end);
}
/**
* 查询汇率
*
* @param currencyType
* å¤å¸<C3A5>å¸<C3A5>ç§<C3A7>
* @param date
* 日期 ä¸<C3A4>填则默认当天
* @return 汇率对象
* @throws WeixinException
* @see com.foxinmy.weixin4j.api.CashApi
* @see <a href=
* "https://pay.weixin.qq.com/wiki/doc/api/external/micropay.php?chapter=9_15&index=8">
* 查询汇率接å<C2A5>£</a>
*/
public double queryExchageRate(CurrencyType currencyType, Date date)
throws WeixinException {
return cashApi.queryExchageRate(currencyType, date);
}
/**
* 订å<C2A2>•附加信æ<C2A1>¯æ<C2AF><C3A6>交
*
* @param customsOrder
* 附加订å<C2A2>•ä¿¡æ<C2A1>¯
* @return 报关结果
* @see com.foxinmy.weixin4j.api.CustomsApi
* @see com.foxinmy.weixin4j.payment.mch.CustomsOrder
* @see com.foxinmy.weixin4j.payment.mch.CustomsOrderResult
* @see <a href=
* "https://pay.weixin.qq.com/wiki/doc/api/external/declarecustom.php?chapter=18_1">
* 附加订å<C2A2>•ä¿¡æ<C2A1>¯æ<C2AF><C3A6>交接å<C2A5>£</a>
* @throws WeixinException
*/
public CustomsOrderResult declareCustomsOrder(CustomsOrder customsOrder)
throws WeixinException {
return customsApi.declareCustomsOrder(customsOrder);
}
/**
* 订å<C2A2>•附加信æ<C2A1>¯æŸ¥è¯¢
*
* @param idQuery
* out_trade_no,transaction_id,sub_order_no,sub_order_idå选ä¸
* @param customsCity
* æµ·å…³
* @return 报关记录
* @see com.foxinmy.weixin4j.payment.mch.CustomsOrderRecord
* @see com.foxinmy.weixin4j.api.CustomsApi
* @see <a href=
* "https://pay.weixin.qq.com/wiki/doc/api/external/declarecustom.php?chapter=18_1">
* 附加订å<C2A2>•ä¿¡æ<C2A1>¯æŸ¥è¯¢æŽ¥å<C2A5>£</a>
* @throws WeixinException
*/
public CustomsOrderRecord queryCustomsOrder(IdQuery idQuery,
CustomsCity customsCity) throws WeixinException {
return customsApi.queryCustomsOrder(idQuery, customsCity);
}
public final static String VERSION = "1.6.9";
}