Skip to content

Commit

Permalink
实现查询企业付款的API。 finish #51
Browse files Browse the repository at this point in the history
  • Loading branch information
binarywang committed Oct 19, 2016
1 parent f54097e commit f0192cc
Show file tree
Hide file tree
Showing 5 changed files with 417 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ public interface WxMpPayService {
* 在发起微信支付前,需要调用统一下单接口,获取"预支付交易会话标识"
* 接口地址:https://api.mch.weixin.qq.com/pay/unifiedorder
* @throws WxErrorException
* @param request 请求对象
*
*/
WxUnifiedOrderResult unifiedOrder(WxUnifiedOrderRequest request)
Expand All @@ -26,11 +27,10 @@ WxUnifiedOrderResult unifiedOrder(WxUnifiedOrderRequest request)
/**
* 该接口调用“统一下单”接口,并拼装发起支付请求需要的参数
* 详见http://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141115&token=&lang=zh_CN
*
* @param request 请求对象
*/
Map<String, String> getPayInfo(WxUnifiedOrderRequest request) throws WxErrorException;


/**
* 该接口提供所有微信支付订单的查询,当支付通知处理异常戒丢失的情冴,商户可以通过该接口查询订单支付状态。
* 详见http://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_2
Expand All @@ -53,6 +53,7 @@ WxMpPayResult getJSSDKPayResult(String transactionId, String outTradeNo)
* 详见 https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_4
* 接口链接:https://api.mch.weixin.qq.com/secapi/pay/refund
* </pre>
* @param request 请求对象
* @param keyFile 证书文件对象
* @return 退款操作结果
*/
Expand All @@ -74,6 +75,7 @@ WxMpPayResult getJSSDKPayResult(String transactionId, String outTradeNo)
* 发送普通红包 https://pay.weixin.qq.com/wiki/doc/api/tools/cash_coupon.php?chapter=13_4&index=3
* 发送裂变红包 https://pay.weixin.qq.com/wiki/doc/api/tools/cash_coupon.php?chapter=13_5&index=4
* </pre>
* @param request 请求对象
* @param keyFile 证书文件对象
*/
WxRedpackResult sendRedpack(WxSendRedpackRequest request, File keyFile) throws WxErrorException;
Expand All @@ -86,9 +88,22 @@ WxMpPayResult getJSSDKPayResult(String transactionId, String outTradeNo)
* 注意:与商户微信支付收款资金并非同一账户,需要单独充值。
* 文档详见:https://pay.weixin.qq.com/wiki/doc/api/tools/mch_pay.php?chapter=14_2
* 接口链接:https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers
* @param keyFile 证书文件对象
* </pre>
* @param request 请求对象
* @param keyFile 证书文件对象
*/
WxEntPayResult entPay(WxEntPayRequest request, File keyFile) throws WxErrorException;

/**
* <pre>
* 查询企业付款API
* 用于商户的企业付款操作进行结果查询,返回付款操作详细结果。
* 文档详见:https://pay.weixin.qq.com/wiki/doc/api/tools/mch_pay.php?chapter=14_3
* 接口链接:https://api.mch.weixin.qq.com/mmpaymkttransfers/gettransferinfo
* </pre>
* @param partnerTradeNo 商户订单号
* @param keyFile 证书文件对象
*/
WxEntPayQueryResult queryEntPay(String partnerTradeNo, File keyFile) throws WxErrorException;

}
Original file line number Diff line number Diff line change
Expand Up @@ -369,6 +369,31 @@ public WxEntPayResult entPay(WxEntPayRequest request, File keyFile) throws WxErr
return result;
}

@Override
public WxEntPayQueryResult queryEntPay(String partnerTradeNo, File keyFile) throws WxErrorException {
XStream xstream = XStreamInitializer.getInstance();
xstream.processAnnotations(WxEntPayQueryRequest.class);
xstream.processAnnotations(WxEntPayQueryResult.class);

WxEntPayQueryRequest request = new WxEntPayQueryRequest();
request.setAppid(this.wxMpService.getWxMpConfigStorage().getAppId());
request.setMchId(this.wxMpService.getWxMpConfigStorage().getPartnerId());
request.setNonceStr(System.currentTimeMillis() + "");

String sign = this.createSign(xmlBean2Map(request), this.wxMpService.getWxMpConfigStorage().getPartnerKey());
request.setSign(sign);

String url = PAY_BASE_URL + "/mmpaymkttransfers/gettransferinfo";

String responseContent = this.executeRequestWithKeyFile(url, keyFile, xstream.toXML(request), request.getMchId());
WxEntPayQueryResult result = (WxEntPayQueryResult) xstream.fromXML(responseContent);
if ("FAIL".equals(result.getResultCode())) {
throw new WxErrorException(
WxError.newBuilder().setErrorMsg(result.getErrCode() + ":" + result.getErrCodeDes()).build());
}
return result;
}

private String executeRequestWithKeyFile( String url, File keyFile, String requestStr, String mchId) throws WxErrorException {
try (FileInputStream inputStream = new FileInputStream(keyFile)) {
KeyStore keyStore = KeyStore.getInstance("PKCS12");
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,135 @@
package me.chanjar.weixin.mp.bean.pay;

import com.thoughtworks.xstream.annotations.XStreamAlias;
import me.chanjar.weixin.common.annotation.Required;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;

/**
* <pre>
* 企业付款请求对象
* 注释中各行每个字段描述对应如下:
* <li>字段名
* <li>变量名
* <li>是否必填
* <li>类型
* <li>示例值
* <li>描述
* </pre>
* Created by Binary Wang on 2016/10/19.
* @author binarywang (https://github.com/binarywang)
*/
@XStreamAlias("xml")
public class WxEntPayQueryRequest {
/**
* <pre>
* Appid
* appid
* 是
* wxe062425f740d30d8
* String(32)
* 商户号的appid
* </pre>
*/
@XStreamAlias("appid")
private String appid;

/**
* <pre>
* 商户号
* mch_id
* 是
* 10000098
* String(32)
* 微信支付分配的商户号
* </pre>
*/
@XStreamAlias("mchid")
private String mchId;

/**
* <pre>
* 随机字符串
* nonce_str
* 是
* 5K8264ILTKCH16CQ2502SI8ZNMTM67VS
* String(32)
* 随机字符串,不长于32位
* </pre>
*/
@XStreamAlias("nonce_str")
private String nonceStr;

/**
* <pre>
* 签名
* sign
* 是
* C380BEC2BFD727A4B6845133519F3AD6
* String(32)
*签名,详见签名算法
* </pre>
*/
@XStreamAlias("sign")
private String sign;

/**
* <pre>
* 商户订单号
* partner_trade_no
* 是
* 10000098201411111234567890
* String
* 商户订单号
* </pre>
*/
@Required
@XStreamAlias("partner_trade_no")
private String partnerTradeNo;

public String getAppid() {
return appid;
}

public void setAppid(String appid) {
this.appid = appid;
}

public String getMchId() {
return mchId;
}

public void setMchId(String mchId) {
this.mchId = mchId;
}

public String getNonceStr() {
return nonceStr;
}

public void setNonceStr(String nonceStr) {
this.nonceStr = nonceStr;
}

public String getSign() {
return sign;
}

public void setSign(String sign) {
this.sign = sign;
}

public String getPartnerTradeNo() {
return partnerTradeNo;
}

public void setPartnerTradeNo(String partnerTradeNo) {
this.partnerTradeNo = partnerTradeNo;
}

@Override
public String toString() {
return ToStringBuilder.reflectionToString(this, ToStringStyle.MULTI_LINE_STYLE);
}

}
Loading

0 comments on commit f0192cc

Please sign in to comment.