() {
+ });
+ }
+
+ private static String JSAPI() throws PayException {
+ WeixinPayAccount weixinAccount = JSON.parseObject(
+ ConfigUtil.getValue("account"), WeixinPayAccount.class);
+ return createPayJsRequestJson("oyFLst1bqtuTcxK-ojF8hOGtLQao", "支付测试",
+ "JSAPI01", 0.01d, "http://127.0.0.1/jsapi/notify", "127.0.0.0",
+ weixinAccount);
+ }
+
+ private static String NATIVE() {
+ WeixinPayAccount weixinAccount = JSON.parseObject(
+ ConfigUtil.getValue("account"), WeixinPayAccount.class);
+ return createNativePayRequestURL(weixinAccount, "P1");
+ }
+
+ public static void main(String[] args) throws PayException {
+ // V3版本下的JS支付
+ System.out.println(JSAPI());
+ // V3版本下的原生支付
+ System.out.println(NATIVE());
+ }
+}
diff --git a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/payment/README.md b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/payment/README.md
similarity index 67%
rename from weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/payment/README.md
rename to weixin4j-base/src/main/java/com/foxinmy/weixin4j/payment/README.md
index 5994af13..2895e3b3 100644
--- a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/payment/README.md
+++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/payment/README.md
@@ -4,20 +4,14 @@
微信公众平台[V3版本支付](https://mp.weixin.qq.com/paymch/readtemplate?t=mp/business/course3_tmpl&lang=zh_CN)文档
-**在`2014年10月9号`之前申请并审核通过的支付接口应该属于`V2版本`支付,而之后申请的接口则为`V3版本`支付**
+**在`2014年10月9号`之前申请并审核通过的支付接口应该属于`V2版本`支付,而之后申请的接口则为`V3版本(商户平台)`支付**
[PayUtil](./PayUtil.java)
-------------------------
-* createPayJsRequestJson: 创建JSAPI支付串
+* createPayJsRequestJson: 创建V3版本(商户平台)的JSAPI支付串
-* createPayJsRequestJsonV2: 创建V2版本的JSAPI支付串
-
-* createNativePayRequestURLV2: 创建V2版本的扫码支付链接
-
-* createPayJsRequestJsonV3: 创建V3版本(商户平台)的JSAPI支付串
-
-* createNativePayRequestURLV3: 创建V3版本(商户平台)的扫码支付链接
+* createNativePayRequestURL: 创建V3版本(商户平台)的扫码支付链接
* createPrePay: 调用V3版本(商户平台)的统一订单接口生成预订单数据
@@ -26,14 +20,14 @@
* createAddressRequestJson: 生成编辑收货地址请求串
-[Pay3Api](./Pay3Api.java)
+[Pay3Api](../api/Pay3Api.java)
-------------------------
* orderQuery: 订单查询接口
-* refund: 退款申请接口
+* refundOrder: 退款申请接口
-* reverse: 冲正订单接口
+* reverseOrder: 冲正订单接口
* closeOrder: 关闭订单接口
@@ -42,12 +36,12 @@
* refundQuery: 退款查询接口
-[Pay2Api](./Pay2Api.java)
+[Pay2Api](../api/Pay2Api.java)
-------------------------
* orderQuery: 订单查询接口
-* refund: 退款申请接口
+* refundOrder: 退款申请接口
* downloadbill: 下载对账单接口
diff --git a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/WeixinPayProxy.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/payment/WeixinPayProxy.java
similarity index 51%
rename from weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/WeixinPayProxy.java
rename to weixin4j-base/src/main/java/com/foxinmy/weixin4j/payment/WeixinPayProxy.java
index 9a38d1ca..f761896e 100644
--- a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/WeixinPayProxy.java
+++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/payment/WeixinPayProxy.java
@@ -1,36 +1,31 @@
-package com.foxinmy.weixin4j.mp;
+package com.foxinmy.weixin4j.payment;
import java.io.File;
import java.util.Date;
+import com.alibaba.fastjson.JSON;
+import com.foxinmy.weixin4j.api.CashApi;
+import com.foxinmy.weixin4j.api.CouponApi;
+import com.foxinmy.weixin4j.api.Pay3Api;
import com.foxinmy.weixin4j.exception.WeixinException;
-import com.foxinmy.weixin4j.http.weixin.JsonResult;
import com.foxinmy.weixin4j.http.weixin.XmlResult;
-import com.foxinmy.weixin4j.mp.api.CashApi;
-import com.foxinmy.weixin4j.mp.api.CouponApi;
-import com.foxinmy.weixin4j.mp.api.MpApi;
-import com.foxinmy.weixin4j.mp.api.Pay2Api;
-import com.foxinmy.weixin4j.mp.api.Pay3Api;
-import com.foxinmy.weixin4j.mp.api.PayApi;
-import com.foxinmy.weixin4j.mp.model.WeixinMpAccount;
-import com.foxinmy.weixin4j.mp.payment.coupon.CouponDetail;
-import com.foxinmy.weixin4j.mp.payment.coupon.CouponResult;
-import com.foxinmy.weixin4j.mp.payment.coupon.CouponStock;
-import com.foxinmy.weixin4j.mp.payment.v3.ApiResult;
-import com.foxinmy.weixin4j.mp.payment.v3.MPPayment;
-import com.foxinmy.weixin4j.mp.payment.v3.MPPaymentRecord;
-import com.foxinmy.weixin4j.mp.payment.v3.MPPaymentResult;
-import com.foxinmy.weixin4j.mp.payment.v3.Redpacket;
-import com.foxinmy.weixin4j.mp.payment.v3.RedpacketRecord;
-import com.foxinmy.weixin4j.mp.payment.v3.RedpacketSendResult;
-import com.foxinmy.weixin4j.mp.token.WeixinTokenCreator;
-import com.foxinmy.weixin4j.mp.type.BillType;
-import com.foxinmy.weixin4j.mp.type.CurrencyType;
-import com.foxinmy.weixin4j.mp.type.IdQuery;
-import com.foxinmy.weixin4j.mp.type.IdType;
-import com.foxinmy.weixin4j.mp.type.RefundType;
-import com.foxinmy.weixin4j.token.TokenHolder;
-import com.foxinmy.weixin4j.token.TokenStorager;
+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.ApiResult;
+import com.foxinmy.weixin4j.payment.mch.MPPayment;
+import com.foxinmy.weixin4j.payment.mch.MPPaymentRecord;
+import com.foxinmy.weixin4j.payment.mch.MPPaymentResult;
+import com.foxinmy.weixin4j.payment.mch.Order;
+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.type.BillType;
+import com.foxinmy.weixin4j.type.CurrencyType;
+import com.foxinmy.weixin4j.type.IdQuery;
+import com.foxinmy.weixin4j.util.ConfigUtil;
/**
* 微信支付接口实现
@@ -39,42 +34,24 @@ import com.foxinmy.weixin4j.token.TokenStorager;
* @author jy
* @date 2015年1月3日
* @since JDK 1.7
- * @see com.foxinmy.weixin4j.mp.api.Pay2Api
- * @see com.foxinmy.weixin4j.mp.api.Pay3Api
+ * @see com.foxinmy.weixin4j.api.Pay2Api
+ * @see com.foxinmy.weixin4j.api.Pay3Api
* @see 商户平台支付API
*/
public class WeixinPayProxy {
- private final PayApi payApi;
- private final Pay2Api pay2Api;
private final Pay3Api pay3Api;
private final CouponApi couponApi;
private final CashApi cashApi;
- private final TokenHolder tokenHolder;
-
- /**
- * 默认使用文件保存token、使用weixin4j.properties配置的账号信息
- */
- public WeixinPayProxy() {
- this(MpApi.DEFAULT_TOKEN_STORAGER);
- }
+ private final File DEFAULT_CA_FILE;
/**
* 使用weixin4j.properties配置的账号信息
*/
- public WeixinPayProxy(TokenStorager tokenStorager) {
- this(MpApi.DEFAULT_WEIXIN_ACCOUNT, tokenStorager);
- }
-
- /**
- * 使用文件保存token
- *
- * @param weixinAccount
- * 支付相关的公众号账号信息
- */
- public WeixinPayProxy(WeixinMpAccount weixinAccount) {
- this(weixinAccount, MpApi.DEFAULT_TOKEN_STORAGER);
+ public WeixinPayProxy() {
+ this(JSON.parseObject(ConfigUtil.getValue("account"),
+ WeixinPayAccount.class));
}
/**
@@ -82,94 +59,16 @@ public class WeixinPayProxy {
* @param weixinAccount
* 支付相关的公众号账号信息
*
- * @param tokenStorager
- * token的存储策略
*/
- public WeixinPayProxy(WeixinMpAccount weixinAccount,
- TokenStorager tokenStorager) {
- this.tokenHolder = new TokenHolder(new WeixinTokenCreator(
- weixinAccount.getId(), weixinAccount.getSecret()),
- tokenStorager);
- this.pay2Api = new Pay2Api(weixinAccount, tokenHolder);
- this.pay3Api = new Pay3Api(weixinAccount, tokenHolder);
- int version = weixinAccount.getVersion();
- if (version == 2) {
- this.payApi = this.pay2Api;
- } else if (version == 3) {
- this.payApi = this.pay3Api;
- } else {
- this.payApi = this.pay3Api;
- }
+ public WeixinPayProxy(WeixinPayAccount weixinAccount) {
+ this.pay3Api = new Pay3Api(weixinAccount);
this.couponApi = new CouponApi(weixinAccount);
this.cashApi = new CashApi(weixinAccount);
- }
-
- public TokenHolder getTokenHolder() {
- return this.tokenHolder;
+ this.DEFAULT_CA_FILE = new File(ConfigUtil.getClassPathValue("ca_file"));
}
/**
- * 发货通知
- *
- * @param openId
- * 用户ID
- * @param transid
- * 交易单号
- * @param outTradeNo
- * 订单号
- * @param status
- * 成功|失败
- * @param statusMsg
- * status为失败时携带的信息
- * @return 发货处理结果
- * @since V2 & V3
- * @see com.foxinmy.weixin4j.mp.api.PayApi
- * @throws WeixinException
- */
- public JsonResult deliverNotify(String openId, String transid,
- String outTradeNo, boolean status, String statusMsg)
- throws WeixinException {
- return payApi.deliverNotify(openId, transid, outTradeNo, status,
- statusMsg);
- }
-
- /**
- * 维权处理
- *
- * @param openId
- * 用户ID
- * @param feedbackId
- * 维权单号
- * @return 调用结果
- * @see com.foxinmy.weixin4j.mp.api.PayApi
- * @since V2 & V3
- * @throws WeixinException
- */
- public JsonResult updateFeedback(String openId, String feedbackId)
- throws WeixinException {
- return payApi.updateFeedback(openId, feedbackId);
- }
-
- /**
- * V2订单查询
- *
- * @param idQuery
- * 商户系统内部的订单号, transaction_id、out_trade_no 二 选一,如果同时存在优先级:
- * transaction_id> out_trade_no
- * @since V2
- * @see com.foxinmy.weixin4j.mp.payment.v2.Order
- * @see com.foxinmy.weixin4j.mp.api.PayApi
- * @see com.foxinmy.weixin4j.mp.api.Pay2Api
- * @return 订单详情
- * @throws WeixinException
- */
- public com.foxinmy.weixin4j.mp.payment.v2.Order orderQueryV2(
- String outTradeNo) throws WeixinException {
- return pay2Api.orderQuery(new IdQuery(outTradeNo, IdType.TRADENO));
- }
-
- /**
- * V3订单查询
+ * 订单查询
*
* 当商户后台、网络、服务器等出现异常,商户系统最终未接收到支付通知; 调用支付接口后,返回系统错误或未知交易状态情况;
* 调用被扫支付API,返回USERPAYING的状态; 调用关单或撤销接口API之前,需确认支付状态;
@@ -179,133 +78,20 @@ public class WeixinPayProxy {
* 商户系统内部的订单号, transaction_id、out_trade_no 二 选一,如果同时存在优先级:
* transaction_id> out_trade_no
* @since V3
- * @see com.foxinmy.weixin4j.mp.payment.v3.Order
- * @see com.foxinmy.weixin4j.mp.api.PayApi
- * @see com.foxinmy.weixin4j.mp.api.Pay3Api
+ * @see com.foxinmy.weixin4j.payment.mch.Order
+ * @see com.foxinmy.weixin4j.api.PayApi
+ * @see com.foxinmy.weixin4j.api.Pay3Api
* @see 订单查询API
* @return 订单详情
* @throws WeixinException
*/
- public com.foxinmy.weixin4j.mp.payment.v3.Order orderQueryV3(IdQuery idQuery)
- throws WeixinException {
+ public Order orderQuery(IdQuery idQuery) throws WeixinException {
return pay3Api.orderQuery(idQuery);
}
/**
- * V2申请退款(请求需要双向证书)
- *
- * 交易时间超过 1 年的订单无法提交退款; 支持部分退款,部分退需要设置相同的订单号和不同的 out_refund_no。一笔退款失
- * 败后重新提交,要采用原来的 out_refund_no。总退款金额不能超过用户实际支付金额。
- *
- *
- * @param caFile
- * 证书文件(后缀为*.pfx)
- * @param idQuery
- * ) 商户系统内部的订单号, transaction_id 、 out_trade_no 二选一,如果同时存在优先级:
- * transaction_id> out_trade_no
- * @param outRefundNo
- * 商户系统内部的退款单号,商 户系统内部唯一,同一退款单号多次请求只退一笔
- * @param totalFee
- * 订单总金额,单位为元
- * @param refundFee
- * 退款总金额,单位为元,可以做部分退款
- * @param opUserId
- * 操作员帐号, 默认为商户号
- * @param opUserPasswd
- * 操作员密码
- *
- * @return 退款申请结果
- * @see com.foxinmy.weixin4j.mp.api.PayApi
- * @see com.foxinmy.weixin4j.mp.api.Pay2Api
- * @see com.foxinmy.weixin4j.mp.payment.v2.RefundResult
- * @since V2
- * @throws WeixinException
- */
- public com.foxinmy.weixin4j.mp.payment.v2.RefundResult refundV2(
- File caFile, IdQuery idQuery, String outRefundNo, double totalFee,
- double refundFee, String opUserId, String opUserPasswd)
- throws WeixinException {
- return pay2Api.refund(caFile, idQuery, outRefundNo, totalFee,
- refundFee, opUserId, opUserPasswd);
- }
-
- /**
- * V2退款申请采用properties中配置的ca文件
- *
- * @see {@link com.foxinmy.weixin4j.mp.WeixinPayProxy#refundV2(File, IdQuery, String, double, double, String,String)}
- */
- public com.foxinmy.weixin4j.mp.payment.v2.RefundResult refundV2(
- IdQuery idQuery, String outRefundNo, double totalFee,
- double refundFee, String opUserId, String opUserPasswd)
- throws WeixinException {
- return refundV2(PayApi.DEFAULT_CA_FILE, idQuery, outRefundNo, totalFee,
- refundFee, opUserId, opUserPasswd);
- }
-
- /**
- * V2退款申请
- *
- * @param caFile
- * 证书文件(V2版本后缀为*.pfx)
- * @param idQuery
- * 商户系统内部的订单号, transaction_id 、 out_trade_no 二选一,如果同时存在优先级:
- * transaction_id> out_trade_no
- * @param outRefundNo
- * 商户系统内部的退款单号,商 户系统内部唯一,同一退款单号多次请求只退一笔
- * @param totalFee
- * 订单总金额,单位为元
- * @param refundFee
- * 退款总金额,单位为元,可以做部分退款
- * @param opUserId
- * 操作员帐号, 默认为商户号
- * @param opUserPasswd
- * 操作员密码,默认为商户后台登录密码
- * @param recvUserId
- * 转账退款接收退款的财付通帐号。 一般无需填写,只有退银行失败,资金转入商 户号现金账号时(即状态为转入代发,查询返 回的
- * refund_status 是 7 或 11),填写原退款 单号并填写此字段,资金才会退到指定财付通
- * 账号。其他情况此字段忽略
- * @param reccvUserName
- * 转账退款接收退款的姓名(需与接收退款的财 付通帐号绑定的姓名一致)
- * @param refundType
- * 为空或者填 1:商户号余额退款;2:现金帐号 退款;3:优先商户号退款,若商户号余额不足, 再做现金帐号退款。使用 2 或
- * 3 时,需联系财 付通开通此功能
- * @see com.foxinmy.weixin4j.mp.api.PayApi
- * @see com.foxinmy.weixin4j.mp.api.Pay2Api
- * @see com.foxinmy.weixin4j.mp.payment.v2.RefundResult
- * @return 退款结果
- */
- public com.foxinmy.weixin4j.mp.payment.v2.RefundResult refundV2(
- File caFile, IdQuery idQuery, String outRefundNo, double totalFee,
- double refundFee, String opUserId, String opUserPasswd,
- String recvUserId, String reccvUserName, RefundType refundType)
- throws WeixinException {
- return pay2Api.refund(caFile, idQuery, outRefundNo, totalFee,
- refundFee, opUserId, opUserPasswd, recvUserId, reccvUserName,
- refundType);
- }
-
- /**
- * V2退款查询 退款有一定延时,用零钱支付的退款20分钟内到账,银行卡支付的退款 3 个工作日后重新查询退款状态
- *
- * @param idQuery
- * 单号 refund_id、out_refund_no、 out_trade_no 、 transaction_id
- * 四个参数必填一个,优先级为:
- * refund_id>out_refund_no>transaction_id>out_trade_no
- * @return 退款记录
- * @see com.foxinmy.weixin4j.mp.payment.v2.RefundRecord
- * @see com.foxinmy.weixin4j.mp.api.PayApi
- * @see com.foxinmy.weixin4j.mp.api.Pay2Api
- * @since V2
- * @throws WeixinException
- */
- public com.foxinmy.weixin4j.mp.payment.v2.RefundRecord refundQueryV2(
- IdQuery idQuery) throws WeixinException {
- return pay2Api.refundQuery(idQuery);
- }
-
- /**
- * V3申请退款(请求需要双向证书)
+ * 申请退款(请求需要双向证书)
*
* 当交易发生之后一段时间内,由于买家或者卖家的原因需要退款时,卖家可以通过退款接口将支付款退还给买家,微信支付将在收到退款请求并且验证成功之后,
* 按照退款规则将支付款按原路退到买家帐号上。
@@ -333,36 +119,36 @@ public class WeixinPayProxy {
* 操作员帐号, 默认为商户号
*
* @return 退款申请结果
- * @see com.foxinmy.weixin4j.mp.payment.v3.RefundResult
- * @see com.foxinmy.weixin4j.mp.api.PayApi
- * @see com.foxinmy.weixin4j.mp.api.Pay3Api
+ * @see com.foxinmy.weixin4j.payment.mch.RefundResult
+ * @see com.foxinmy.weixin4j.api.PayApi
+ * @see com.foxinmy.weixin4j.api.Pay3Api
* @see 申请退款API
* @since V3
* @throws WeixinException
*/
- public com.foxinmy.weixin4j.mp.payment.v3.RefundResult refundV3(
+ public com.foxinmy.weixin4j.payment.mch.RefundResult refundApply(
File caFile, IdQuery idQuery, String outRefundNo, double totalFee,
double refundFee, CurrencyType refundFeeType, String opUserId)
throws WeixinException {
- return pay3Api.refund(caFile, idQuery, outRefundNo, totalFee,
+ return pay3Api.refundApply(caFile, idQuery, outRefundNo, totalFee,
refundFee, refundFeeType, opUserId);
}
/**
- * V3退款申请采用properties中配置的ca文件
+ * 退款申请采用properties中配置的ca文件
*
- * @see {@link com.foxinmy.weixin4j.mp.WeixinPayProxy#refundV3(File, IdQuery, String, double, double,CurrencyType, String)}
+ * @see {@link com.foxinmy.weixin4j.payment.WeixinPayProxy#refundV3(File, IdQuery, String, double, double,CurrencyType, String)}
*/
- public com.foxinmy.weixin4j.mp.payment.v3.RefundResult refundV3(
+ public com.foxinmy.weixin4j.payment.mch.RefundResult refundApply(
IdQuery idQuery, String outRefundNo, double totalFee,
double refundFee, String opUserId) throws WeixinException {
- return pay3Api.refund(PayApi.DEFAULT_CA_FILE, idQuery, outRefundNo,
+ return pay3Api.refundApply(DEFAULT_CA_FILE, idQuery, outRefundNo,
totalFee, refundFee, CurrencyType.CNY, opUserId);
}
/**
- * V3退款查询
+ * 退款查询
*
* 提交退款申请后,通过调用该接口查询退款状态。退款有一定延时,用零钱支付的退款20分钟内到账,银行卡支付的退款3个工作日后重新查询退款状态。
*
@@ -372,16 +158,15 @@ public class WeixinPayProxy {
* 四个参数必填一个,优先级为:
* refund_id>out_refund_no>transaction_id>out_trade_no
* @return 退款记录
- * @see com.foxinmy.weixin4j.mp.api.PayApi
- * @see com.foxinmy.weixin4j.mp.api.Pay3Api
- * @see com.foxinmy.weixin4j.mp.payment.v3.RefundRecord
+ * @see com.foxinmy.weixin4j.api.PayApi
+ * @see com.foxinmy.weixin4j.api.Pay3Api
+ * @see com.foxinmy.weixin4j.payment.mch.RefundRecord
* @see 退款查询API
* @since V3
* @throws WeixinException
*/
- public com.foxinmy.weixin4j.mp.payment.v3.RefundRecord refundQueryV3(
- IdQuery idQuery) throws WeixinException {
+ public RefundRecord refundQueryV3(IdQuery idQuery) throws WeixinException {
return pay3Api.refundQuery(idQuery);
}
@@ -399,14 +184,14 @@ public class WeixinPayProxy {
* REFUND,返回当日退款订单
* @return excel表格
* @since V2 & V3
- * @see com.foxinmy.weixin4j.mp.api.PayApi
+ * @see com.foxinmy.weixin4j.api.PayApi
* @see 下载对账单API
* @throws WeixinException
*/
public File downloadbill(Date billDate, BillType billType)
throws WeixinException {
- return payApi.downloadbill(billDate, billType);
+ return pay3Api.downloadbill(billDate, billType);
}
/**
@@ -421,15 +206,15 @@ public class WeixinPayProxy {
* 商户系统内部的订单号, transaction_id 、 out_trade_no 二选一,如果同时存在优先级:
* transaction_id> out_trade_no
* @return 撤销结果
- * @see com.foxinmy.weixin4j.mp.api.PayApi
- * @see com.foxinmy.weixin4j.mp.api.Pay2Api
- * @see com.foxinmy.weixin4j.mp.api.Pay3Api
+ * @see com.foxinmy.weixin4j.api.PayApi
+ * @see com.foxinmy.weixin4j.api.Pay2Api
+ * @see com.foxinmy.weixin4j.api.Pay3Api
* @since V3
* @throws WeixinException
*/
- public ApiResult reverse(File caFile, IdQuery idQuery)
+ public ApiResult reverseOrder(File caFile, IdQuery idQuery)
throws WeixinException {
- return payApi.reverse(caFile, idQuery);
+ return pay3Api.reverseOrder(caFile, idQuery);
}
/**
@@ -441,8 +226,8 @@ public class WeixinPayProxy {
* @see {@link com.foxinmy.weixin4j.mp.WeixinProxy#reverse(File, IdQuery)}
* @throws WeixinException
*/
- public ApiResult reverse(IdQuery idQuery) throws WeixinException {
- return payApi.reverse(PayApi.DEFAULT_CA_FILE, idQuery);
+ public ApiResult reverseOrder(IdQuery idQuery) throws WeixinException {
+ return pay3Api.reverseOrder(DEFAULT_CA_FILE, idQuery);
}
/**
@@ -455,15 +240,15 @@ public class WeixinPayProxy {
* @param outTradeNo
* 商户系统内部的订单号
* @return 执行结果
- * @see com.foxinmy.weixin4j.mp.api.PayApi
- * @see com.foxinmy.weixin4j.mp.api.Pay3Api
+ * @see com.foxinmy.weixin4j.api.PayApi
+ * @see com.foxinmy.weixin4j.api.Pay3Api
* @since V3
* @throws WeixinException
* @see 关闭订单API
*/
public ApiResult closeOrder(String outTradeNo) throws WeixinException {
- return payApi.closeOrder(outTradeNo);
+ return pay3Api.closeOrder(outTradeNo);
}
/**
@@ -473,16 +258,16 @@ public class WeixinPayProxy {
* @param url
* 具有native标识的支付URL
* @return 转换后的短链接
- * @see com.foxinmy.weixin4j.mp.api.PayApi
- * @see com.foxinmy.weixin4j.mp.api.Pay2Api
- * @see com.foxinmy.weixin4j.mp.api.Pay3Api
+ * @see com.foxinmy.weixin4j.api.PayApi
+ * @see com.foxinmy.weixin4j.api.Pay2Api
+ * @see com.foxinmy.weixin4j.api.Pay3Api
* @see 转换短链接API
- * @since V2 & V3
+ * @since V3
* @throws WeixinException
*/
public String getPayShorturl(String url) throws WeixinException {
- return payApi.getShorturl(url);
+ return pay3Api.getShorturl(url);
}
/**
@@ -502,8 +287,8 @@ public class WeixinPayProxy {
* @param returnXml
* 调用接口返回的基本数据
* @return 处理结果
- * @see com.foxinmy.weixin4j.mp.api.PayApi
- * @see com.foxinmy.weixin4j.mp.api.Pay3Api
+ * @see com.foxinmy.weixin4j.api.PayApi
+ * @see com.foxinmy.weixin4j.api.Pay3Api
* @see 接口测试上报API
* @throws WeixinException
@@ -529,8 +314,8 @@ public class WeixinPayProxy {
* @param opUserId
* 操作员帐号, 默认为商户号 可在商户平台配置操作员对应的api权限 可为空
* @return 发放结果
- * @see com.foxinmy.weixin4j.mp.api.CouponApi
- * @see com.foxinmy.weixin4j.mp.payment.coupon.CouponResult
+ * @see com.foxinmy.weixin4j.api.CouponApi
+ * @see com.foxinmy.weixin4j.payment.coupon.CouponResult
* @see 发放代金券接口
* @throws WeixinException
@@ -545,11 +330,11 @@ public class WeixinPayProxy {
/**
* 发放代金券采用properties中配置的ca文件
*
- * @see {@link com.foxinmy.weixin4j.mp.WeixinPayProxy#sendCoupon(File, String, String, String, String)}
+ * @see {@link com.foxinmy.weixin4j.payment.WeixinPayProxy#sendCoupon(File, String, String, String, String)}
*/
public CouponResult sendCoupon(String couponStockId, String partnerTradeNo,
String openId) throws WeixinException {
- return couponApi.sendCoupon(PayApi.DEFAULT_CA_FILE, couponStockId,
+ return couponApi.sendCoupon(DEFAULT_CA_FILE, couponStockId,
partnerTradeNo, openId, null);
}
@@ -559,8 +344,8 @@ public class WeixinPayProxy {
* @param couponStockId
* 代金券批次ID
* @return 代金券批次信息
- * @see com.foxinmy.weixin4j.mp.api.CouponApi
- * @see com.foxinmy.weixin4j.mp.payment.coupon.CouponStock
+ * @see com.foxinmy.weixin4j.api.CouponApi
+ * @see com.foxinmy.weixin4j.payment.coupon.CouponStock
* @see 查询代金券信息
* @throws WeixinException
@@ -576,8 +361,8 @@ public class WeixinPayProxy {
* @param couponId
* 代金券ID
* @return 代金券详细信息
- * @see com.foxinmy.weixin4j.mp.api.CouponApi
- * @see com.foxinmy.weixin4j.mp.payment.coupon.CouponDetail
+ * @see com.foxinmy.weixin4j.api.CouponApi
+ * @see com.foxinmy.weixin4j.payment.coupon.CouponDetail
* @see 查询代金券详细信息
* @throws WeixinException
@@ -595,9 +380,9 @@ public class WeixinPayProxy {
* @param redpacket
* 红包信息
* @return 发放结果
- * @see com.foxinmy.weixin4j.mp.api.CashApi
- * @see com.foxinmy.weixin4j.mp.payment.v3.Redpacket
- * @see com.foxinmy.weixin4j.mp.payment.v3.RedpacketSendResult
+ * @see com.foxinmy.weixin4j.api.CashApi
+ * @see com.foxinmy.weixin4j.payment.mch.Redpacket
+ * @see com.foxinmy.weixin4j.payment.mch.RedpacketSendResult
* @see 红包接口说明
* @throws WeixinException
@@ -610,11 +395,11 @@ public class WeixinPayProxy {
/**
* 发放红包采用properties中配置的ca文件
*
- * @see {@link com.foxinmy.weixin4j.mp.WeixinPayProxy#sendRedpack(File, Redpacket)}
+ * @see {@link com.foxinmy.weixin4j.payment.WeixinPayProxy#sendRedpack(File, Redpacket)}
*/
public RedpacketSendResult sendRedpack(Redpacket redpacket)
throws WeixinException {
- return cashApi.sendRedpack(PayApi.DEFAULT_CA_FILE, redpacket);
+ return cashApi.sendRedpack(DEFAULT_CA_FILE, redpacket);
}
/**
@@ -625,8 +410,8 @@ public class WeixinPayProxy {
* @param outTradeNo
* 商户发放红包的商户订单号
* @return 红包记录
- * @see com.foxinmy.weixin4j.mp.api.CashApi
- * @see com.foxinmy.weixin4j.mp.payment.v3.RedpacketRecord
+ * @see com.foxinmy.weixin4j.api.CashApi
+ * @see com.foxinmy.weixin4j.payment.mch.RedpacketRecord
* @see 查询红包接口说明
* @throws WeixinException
@@ -639,11 +424,11 @@ public class WeixinPayProxy {
/**
* 查询红包采用properties中配置的ca文件
*
- * @see {@link com.foxinmy.weixin4j.mp.WeixinPayProxy#queryRedpack(File,String)}
+ * @see {@link com.foxinmy.weixin4j.payment.WeixinPayProxy#queryRedpack(File,String)}
*/
public RedpacketRecord queryRedpack(String outTradeNo)
throws WeixinException {
- return cashApi.queryRedpack(PayApi.DEFAULT_CA_FILE, outTradeNo);
+ return cashApi.queryRedpack(DEFAULT_CA_FILE, outTradeNo);
}
/**
@@ -654,9 +439,9 @@ public class WeixinPayProxy {
* @param mpPayment
* 付款信息
* @return 付款结果
- * @see com.foxinmy.weixin4j.mp.api.CashApi
- * @see com.foxinmy.weixin4j.mp.payment.v3.MPPayment
- * @see com.foxinmy.weixin4j.mp.payment.v3.MPPaymentResult
+ * @see com.foxinmy.weixin4j.api.CashApi
+ * @see com.foxinmy.weixin4j.payment.mch.MPPayment
+ * @see com.foxinmy.weixin4j.payment.mch.MPPaymentResult
* @see 企业付款
* @throws WeixinException
@@ -669,11 +454,11 @@ public class WeixinPayProxy {
/**
* 企业付款采用properties中配置的ca文件
*
- * @see {@link com.foxinmy.weixin4j.mp.WeixinPayProxy#mpPayment(File, MPPayment)}
+ * @see {@link com.foxinmy.weixin4j.payment.WeixinPayProxy#mpPayment(File, MPPayment)}
*/
public MPPaymentResult mpPayment(MPPayment mpPayment)
throws WeixinException {
- return cashApi.mpPayment(PayApi.DEFAULT_CA_FILE, mpPayment);
+ return cashApi.mpPayment(DEFAULT_CA_FILE, mpPayment);
}
/**
@@ -684,8 +469,8 @@ public class WeixinPayProxy {
* @param outTradeNo
* 商户调用企业付款API时使用的商户订单号
* @return 付款记录
- * @see com.foxinmy.weixin4j.mp.api.CashApi
- * @see com.foxinmy.weixin4j.mp.payment.v3.MPPaymentRecord
+ * @see com.foxinmy.weixin4j.api.CashApi
+ * @see com.foxinmy.weixin4j.payment.mch.MPPaymentRecord
* @see 企业付款查询
* @throws WeixinException
@@ -698,10 +483,10 @@ public class WeixinPayProxy {
/**
* 企业付款查询采用properties中配置的ca文件
*
- * @see {@link com.foxinmy.weixin4j.mp.WeixinPayProxy#mpPaymentQuery(File, String)}
+ * @see {@link com.foxinmy.weixin4j.payment.WeixinPayProxy#mpPaymentQuery(File, String)}
*/
public MPPaymentRecord mpPaymentQuery(String outTradeNo)
throws WeixinException {
- return cashApi.mpPaymentQuery(PayApi.DEFAULT_CA_FILE, outTradeNo);
+ return cashApi.mpPaymentQuery(DEFAULT_CA_FILE, outTradeNo);
}
}
diff --git a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/payment/coupon/CouponDetail.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/payment/coupon/CouponDetail.java
similarity index 97%
rename from weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/payment/coupon/CouponDetail.java
rename to weixin4j-base/src/main/java/com/foxinmy/weixin4j/payment/coupon/CouponDetail.java
index 2b2bc953..04a973fa 100644
--- a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/payment/coupon/CouponDetail.java
+++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/payment/coupon/CouponDetail.java
@@ -1,4 +1,4 @@
-package com.foxinmy.weixin4j.mp.payment.coupon;
+package com.foxinmy.weixin4j.payment.coupon;
import java.util.Date;
@@ -8,10 +8,10 @@ import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import com.alibaba.fastjson.annotation.JSONField;
-import com.foxinmy.weixin4j.mp.payment.v3.ApiResult;
-import com.foxinmy.weixin4j.mp.type.CouponStatus;
-import com.foxinmy.weixin4j.mp.type.CouponStockType;
-import com.foxinmy.weixin4j.mp.type.CouponType;
+import com.foxinmy.weixin4j.payment.mch.ApiResult;
+import com.foxinmy.weixin4j.type.CouponStatus;
+import com.foxinmy.weixin4j.type.CouponStockType;
+import com.foxinmy.weixin4j.type.CouponType;
import com.foxinmy.weixin4j.util.DateUtil;
import com.foxinmy.weixin4j.util.StringUtil;
diff --git a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/payment/coupon/CouponInfo.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/payment/coupon/CouponInfo.java
similarity index 97%
rename from weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/payment/coupon/CouponInfo.java
rename to weixin4j-base/src/main/java/com/foxinmy/weixin4j/payment/coupon/CouponInfo.java
index 04c5a332..7d88ee2b 100644
--- a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/payment/coupon/CouponInfo.java
+++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/payment/coupon/CouponInfo.java
@@ -1,4 +1,4 @@
-package com.foxinmy.weixin4j.mp.payment.coupon;
+package com.foxinmy.weixin4j.payment.coupon;
import java.io.Serializable;
diff --git a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/payment/coupon/CouponResult.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/payment/coupon/CouponResult.java
similarity index 96%
rename from weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/payment/coupon/CouponResult.java
rename to weixin4j-base/src/main/java/com/foxinmy/weixin4j/payment/coupon/CouponResult.java
index 3354cb08..6dc55692 100644
--- a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/payment/coupon/CouponResult.java
+++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/payment/coupon/CouponResult.java
@@ -1,4 +1,4 @@
-package com.foxinmy.weixin4j.mp.payment.coupon;
+package com.foxinmy.weixin4j.payment.coupon;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
@@ -6,7 +6,7 @@ import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import com.alibaba.fastjson.annotation.JSONField;
-import com.foxinmy.weixin4j.mp.payment.v3.ApiResult;
+import com.foxinmy.weixin4j.payment.mch.ApiResult;
/**
* 代金券发放结果
diff --git a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/payment/coupon/CouponStock.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/payment/coupon/CouponStock.java
similarity index 97%
rename from weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/payment/coupon/CouponStock.java
rename to weixin4j-base/src/main/java/com/foxinmy/weixin4j/payment/coupon/CouponStock.java
index 73ef13ed..b3b5f3d8 100644
--- a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/payment/coupon/CouponStock.java
+++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/payment/coupon/CouponStock.java
@@ -1,4 +1,4 @@
-package com.foxinmy.weixin4j.mp.payment.coupon;
+package com.foxinmy.weixin4j.payment.coupon;
import java.util.Date;
@@ -8,9 +8,9 @@ import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import com.alibaba.fastjson.annotation.JSONField;
-import com.foxinmy.weixin4j.mp.payment.v3.ApiResult;
-import com.foxinmy.weixin4j.mp.type.CouponStockStatus;
-import com.foxinmy.weixin4j.mp.type.CouponType;
+import com.foxinmy.weixin4j.payment.mch.ApiResult;
+import com.foxinmy.weixin4j.type.CouponStockStatus;
+import com.foxinmy.weixin4j.type.CouponType;
import com.foxinmy.weixin4j.util.DateUtil;
/**
diff --git a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/payment/v3/ApiResult.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/payment/mch/ApiResult.java
similarity index 98%
rename from weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/payment/v3/ApiResult.java
rename to weixin4j-base/src/main/java/com/foxinmy/weixin4j/payment/mch/ApiResult.java
index 3cd6804f..ab48b7bc 100644
--- a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/payment/v3/ApiResult.java
+++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/payment/mch/ApiResult.java
@@ -1,4 +1,4 @@
-package com.foxinmy.weixin4j.mp.payment.v3;
+package com.foxinmy.weixin4j.payment.mch;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
diff --git a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/payment/v3/MPPayment.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/payment/mch/MPPayment.java
similarity index 96%
rename from weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/payment/v3/MPPayment.java
rename to weixin4j-base/src/main/java/com/foxinmy/weixin4j/payment/mch/MPPayment.java
index ab7080e6..e05a6246 100644
--- a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/payment/v3/MPPayment.java
+++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/payment/mch/MPPayment.java
@@ -1,4 +1,4 @@
-package com.foxinmy.weixin4j.mp.payment.v3;
+package com.foxinmy.weixin4j.payment.mch;
import java.io.Serializable;
@@ -8,7 +8,7 @@ import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import com.alibaba.fastjson.annotation.JSONField;
-import com.foxinmy.weixin4j.mp.type.MPPaymentCheckNameType;
+import com.foxinmy.weixin4j.type.MPPaymentCheckNameType;
import com.foxinmy.weixin4j.util.DateUtil;
/**
diff --git a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/payment/v3/MPPaymentRecord.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/payment/mch/MPPaymentRecord.java
similarity index 97%
rename from weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/payment/v3/MPPaymentRecord.java
rename to weixin4j-base/src/main/java/com/foxinmy/weixin4j/payment/mch/MPPaymentRecord.java
index c5d4c0d1..9575aada 100644
--- a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/payment/v3/MPPaymentRecord.java
+++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/payment/mch/MPPaymentRecord.java
@@ -1,4 +1,4 @@
-package com.foxinmy.weixin4j.mp.payment.v3;
+package com.foxinmy.weixin4j.payment.mch;
import java.util.Date;
@@ -8,7 +8,7 @@ import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import com.alibaba.fastjson.annotation.JSONField;
-import com.foxinmy.weixin4j.mp.type.MPPaymentCheckNameType;
+import com.foxinmy.weixin4j.type.MPPaymentCheckNameType;
import com.foxinmy.weixin4j.util.DateUtil;
/**
diff --git a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/payment/v3/MPPaymentResult.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/payment/mch/MPPaymentResult.java
similarity index 96%
rename from weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/payment/v3/MPPaymentResult.java
rename to weixin4j-base/src/main/java/com/foxinmy/weixin4j/payment/mch/MPPaymentResult.java
index 5a8ee8e8..9028cdbe 100644
--- a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/payment/v3/MPPaymentResult.java
+++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/payment/mch/MPPaymentResult.java
@@ -1,4 +1,4 @@
-package com.foxinmy.weixin4j.mp.payment.v3;
+package com.foxinmy.weixin4j.payment.mch;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
diff --git a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/payment/v3/PayPackageV3.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/payment/mch/MchPayPackage.java
similarity index 85%
rename from weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/payment/v3/PayPackageV3.java
rename to weixin4j-base/src/main/java/com/foxinmy/weixin4j/payment/mch/MchPayPackage.java
index 3242ef69..32663529 100644
--- a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/payment/v3/PayPackageV3.java
+++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/payment/mch/MchPayPackage.java
@@ -1,4 +1,4 @@
-package com.foxinmy.weixin4j.mp.payment.v3;
+package com.foxinmy.weixin4j.payment.mch;
import java.util.Date;
@@ -8,15 +8,15 @@ import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import com.alibaba.fastjson.annotation.JSONField;
-import com.foxinmy.weixin4j.mp.model.WeixinMpAccount;
-import com.foxinmy.weixin4j.mp.payment.PayPackage;
-import com.foxinmy.weixin4j.mp.type.TradeType;
+import com.foxinmy.weixin4j.model.WeixinPayAccount;
+import com.foxinmy.weixin4j.payment.PayPackage;
+import com.foxinmy.weixin4j.type.TradeType;
import com.foxinmy.weixin4j.util.RandomUtil;
/**
- * V3支付的订单详情
+ * 支付的订单详情
*
- * @className PayPackageV3
+ * @className MchPayPackage
* @author jy
* @date 2014年10月21日
* @since JDK 1.7
@@ -24,7 +24,7 @@ import com.foxinmy.weixin4j.util.RandomUtil;
*/
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
-public class PayPackageV3 extends PayPackage {
+public class MchPayPackage extends PayPackage {
private static final long serialVersionUID = 8944928173669656177L;
@@ -71,18 +71,18 @@ public class PayPackageV3 extends PayPackage {
@JSONField(name = "product_id")
private String productId;
- protected PayPackageV3() {
+ protected MchPayPackage() {
// jaxb required
}
-
- public PayPackageV3(WeixinMpAccount weixinAccount, String openId,
+
+ public MchPayPackage(WeixinPayAccount weixinAccount, String openId,
String body, String outTradeNo, double totalFee,
String spbillCreateIp, TradeType tradeType) {
this(weixinAccount, openId, body, null, outTradeNo, totalFee, null,
spbillCreateIp, tradeType);
}
- public PayPackageV3(WeixinMpAccount weixinAccount, String openId,
+ public MchPayPackage(WeixinPayAccount weixinAccount, String openId,
String body, String attach, String outTradeNo, double totalFee,
String notifyUrl, String spbillCreateIp, TradeType tradeType) {
this(weixinAccount.getId(), weixinAccount.getMchId(), weixinAccount
@@ -91,7 +91,7 @@ public class PayPackageV3 extends PayPackage {
notifyUrl, tradeType, openId, null);
}
- public PayPackageV3(String appid, String mchId, String deviceInfo,
+ public MchPayPackage(String appid, String mchId, String deviceInfo,
String nonceStr, String body, String attach, String outTradeNo,
double totalFee, String spbillCreateIp, Date timeStart,
Date timeExpire, String goodsTag, String notifyUrl,
@@ -149,7 +149,7 @@ public class PayPackageV3 extends PayPackage {
@Override
public String toString() {
- return "PayPackageV3 [appid=" + appid + ", mchId=" + mchId
+ return "MchPayPackage [appid=" + appid + ", mchId=" + mchId
+ ", deviceInfo=" + deviceInfo + ", nonceStr=" + nonceStr
+ ", sign=" + sign + ", tradeType=" + tradeType + ", openid="
+ openid + ", productId=" + productId + ", " + super.toString()
diff --git a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/payment/v3/PayRequestV3.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/payment/mch/MchPayRequest.java
similarity index 66%
rename from weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/payment/v3/PayRequestV3.java
rename to weixin4j-base/src/main/java/com/foxinmy/weixin4j/payment/mch/MchPayRequest.java
index 9768db86..6591697a 100644
--- a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/payment/v3/PayRequestV3.java
+++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/payment/mch/MchPayRequest.java
@@ -1,14 +1,14 @@
-package com.foxinmy.weixin4j.mp.payment.v3;
+package com.foxinmy.weixin4j.payment.mch;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;
import com.foxinmy.weixin4j.exception.PayException;
-import com.foxinmy.weixin4j.mp.payment.PayRequest;
+import com.foxinmy.weixin4j.payment.PayRequest;
/**
- * V3 JS支付:get_brand_wcpay_request
+ * JS支付:get_brand_wcpay_request
*
* get_brand_wcpay_request:ok 支付成功
* get_brand_wcpay_request:cancel 支付过程中用户取消
@@ -18,29 +18,29 @@ import com.foxinmy.weixin4j.mp.payment.PayRequest;
* NATIVE支付:PayRequest.TradeType=NATIVE
*
*
- * @className PayRequestV3
+ * @className PayRequest
* @author jy
* @date 2014年8月17日
* @since JDK 1.7
- * @see com.foxinmy.weixin4j.mp.payment.v3.PrePay
+ * @see com.foxinmy.weixin4j.payment.mch.PrePay
*/
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
-public class PayRequestV3 extends PayRequest {
+public class MchPayRequest extends PayRequest {
private static final long serialVersionUID = -5972173459255255197L;
- protected PayRequestV3() {
+ protected MchPayRequest() {
// jaxb required
}
- public PayRequestV3(PrePay prePay) throws PayException {
+ public MchPayRequest(PrePay prePay) throws PayException {
this.setAppId(prePay.getAppId());
this.setPackageInfo("prepay_id=" + prePay.getPrepayId());
}
@Override
public String toString() {
- return "JsPayRequestV3 [" + super.toString() + "]";
+ return "MchPayRequest [" + super.toString() + "]";
}
}
diff --git a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/payment/v3/NativePayNotifyV3.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/payment/mch/NativePayNotify.java
similarity index 71%
rename from weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/payment/v3/NativePayNotifyV3.java
rename to weixin4j-base/src/main/java/com/foxinmy/weixin4j/payment/mch/NativePayNotify.java
index 57181205..afc76cb3 100644
--- a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/payment/v3/NativePayNotifyV3.java
+++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/payment/mch/NativePayNotify.java
@@ -1,4 +1,4 @@
-package com.foxinmy.weixin4j.mp.payment.v3;
+package com.foxinmy.weixin4j.payment.mch;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
@@ -6,9 +6,9 @@ import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
/**
- * V3 Native支付回调时POST的信息
+ * Native支付回调时POST的信息
*
- * @className PayNativeNotifyV3
+ * @className PayNativeNotify
* @author jy
* @date 2014年10月30日
* @since JDK 1.7
@@ -16,7 +16,7 @@ import javax.xml.bind.annotation.XmlRootElement;
*/
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
-public class NativePayNotifyV3 extends ApiResult {
+public class NativePayNotify extends ApiResult {
private static final long serialVersionUID = 4515471400239795492L;
@@ -26,7 +26,7 @@ public class NativePayNotifyV3 extends ApiResult {
@XmlElement(name = "product_id")
private String productId;
- protected NativePayNotifyV3() {
+ protected NativePayNotify() {
// jaxb required
}
@@ -36,7 +36,7 @@ public class NativePayNotifyV3 extends ApiResult {
@Override
public String toString() {
- return "NativePayNotifyV3 [productId=" + productId + ", "
+ return "NativePayNotify [productId=" + productId + ", "
+ super.toString() + "]";
}
}
diff --git a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/payment/v3/NativePayResponseV3.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/payment/mch/NativePayResponse.java
similarity index 83%
rename from weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/payment/v3/NativePayResponseV3.java
rename to weixin4j-base/src/main/java/com/foxinmy/weixin4j/payment/mch/NativePayResponse.java
index bbd41580..3cd05f6c 100644
--- a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/payment/v3/NativePayResponseV3.java
+++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/payment/mch/NativePayResponse.java
@@ -1,4 +1,4 @@
-package com.foxinmy.weixin4j.mp.payment.v3;
+package com.foxinmy.weixin4j.payment.mch;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
@@ -8,11 +8,11 @@ import javax.xml.bind.annotation.XmlTransient;
import com.alibaba.fastjson.annotation.JSONField;
import com.foxinmy.weixin4j.exception.PayException;
import com.foxinmy.weixin4j.model.Consts;
-import com.foxinmy.weixin4j.mp.payment.PayUtil;
+import com.foxinmy.weixin4j.payment.PayUtil;
import com.foxinmy.weixin4j.util.RandomUtil;
/**
- * V3 Native支付时的回调响应
+ * Native支付时的回调响应
*
* @className NativePayResponseV3
* @author jy
@@ -22,7 +22,7 @@ import com.foxinmy.weixin4j.util.RandomUtil;
*/
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
-public class NativePayResponseV3 extends ApiResult {
+public class NativePayResponse extends ApiResult {
private static final long serialVersionUID = 6119895998783333012L;
@@ -32,10 +32,10 @@ public class NativePayResponseV3 extends ApiResult {
private String prepay_id;
- protected NativePayResponseV3() {
+ protected NativePayResponse() {
// jaxb required
}
-
+
/**
* 一般作为校验失败时返回
*
@@ -45,7 +45,7 @@ public class NativePayResponseV3 extends ApiResult {
* 结果消息
* @throws PayException
*/
- public NativePayResponseV3(String returnMsg, String resultMsg) {
+ public NativePayResponse(String returnMsg, String resultMsg) {
super.setReturnMsg(returnMsg);
super.setReturnCode(Consts.FAIL);
super.setErrCodeDes(resultMsg);
@@ -59,7 +59,7 @@ public class NativePayResponseV3 extends ApiResult {
* 订单信息
* @throws PayException
*/
- public NativePayResponseV3(PayPackageV3 payPackage, String paysignKey)
+ public NativePayResponse(MchPayPackage payPackage, String paysignKey)
throws PayException {
super.setReturnCode(Consts.SUCCESS);
this.setResultCode(Consts.SUCCESS);
diff --git a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/payment/v3/Order.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/payment/mch/Order.java
similarity index 92%
rename from weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/payment/v3/Order.java
rename to weixin4j-base/src/main/java/com/foxinmy/weixin4j/payment/mch/Order.java
index d6ee46fc..2605ff49 100644
--- a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/payment/v3/Order.java
+++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/payment/mch/Order.java
@@ -1,4 +1,4 @@
-package com.foxinmy.weixin4j.mp.payment.v3;
+package com.foxinmy.weixin4j.payment.mch;
import java.util.Date;
import java.util.List;
@@ -9,10 +9,10 @@ import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import com.alibaba.fastjson.annotation.JSONField;
-import com.foxinmy.weixin4j.mp.payment.coupon.CouponInfo;
-import com.foxinmy.weixin4j.mp.type.CurrencyType;
-import com.foxinmy.weixin4j.mp.type.TradeState;
-import com.foxinmy.weixin4j.mp.type.TradeType;
+import com.foxinmy.weixin4j.payment.coupon.CouponInfo;
+import com.foxinmy.weixin4j.type.CurrencyType;
+import com.foxinmy.weixin4j.type.TradeState;
+import com.foxinmy.weixin4j.type.TradeType;
import com.foxinmy.weixin4j.util.DateUtil;
import com.foxinmy.weixin4j.util.StringUtil;
import com.foxinmy.weixin4j.xml.ListsuffixResult;
diff --git a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/payment/v3/PrePay.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/payment/mch/PrePay.java
similarity index 95%
rename from weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/payment/v3/PrePay.java
rename to weixin4j-base/src/main/java/com/foxinmy/weixin4j/payment/mch/PrePay.java
index 729a228f..f6fe462f 100644
--- a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/payment/v3/PrePay.java
+++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/payment/mch/PrePay.java
@@ -1,11 +1,11 @@
-package com.foxinmy.weixin4j.mp.payment.v3;
+package com.foxinmy.weixin4j.payment.mch;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
-import com.foxinmy.weixin4j.mp.type.TradeType;
+import com.foxinmy.weixin4j.type.TradeType;
/**
* V3预订单信息
diff --git a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/payment/v3/Redpacket.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/payment/mch/Redpacket.java
similarity index 99%
rename from weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/payment/v3/Redpacket.java
rename to weixin4j-base/src/main/java/com/foxinmy/weixin4j/payment/mch/Redpacket.java
index c267aeeb..ef50e1b3 100644
--- a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/payment/v3/Redpacket.java
+++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/payment/mch/Redpacket.java
@@ -1,4 +1,4 @@
-package com.foxinmy.weixin4j.mp.payment.v3;
+package com.foxinmy.weixin4j.payment.mch;
import java.io.Serializable;
diff --git a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/payment/v3/RedpacketRecord.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/payment/mch/RedpacketRecord.java
similarity index 96%
rename from weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/payment/v3/RedpacketRecord.java
rename to weixin4j-base/src/main/java/com/foxinmy/weixin4j/payment/mch/RedpacketRecord.java
index ea207ddb..6349ec67 100644
--- a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/payment/v3/RedpacketRecord.java
+++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/payment/mch/RedpacketRecord.java
@@ -1,4 +1,4 @@
-package com.foxinmy.weixin4j.mp.payment.v3;
+package com.foxinmy.weixin4j.payment.mch;
import java.util.Date;
import java.util.List;
@@ -11,9 +11,9 @@ import javax.xml.bind.annotation.XmlRootElement;
import com.alibaba.fastjson.annotation.JSONField;
import com.foxinmy.weixin4j.http.weixin.XmlResult;
-import com.foxinmy.weixin4j.mp.type.RedpacketSendType;
-import com.foxinmy.weixin4j.mp.type.RedpacketStatus;
-import com.foxinmy.weixin4j.mp.type.RedpacketType;
+import com.foxinmy.weixin4j.type.RedpacketSendType;
+import com.foxinmy.weixin4j.type.RedpacketStatus;
+import com.foxinmy.weixin4j.type.RedpacketType;
import com.foxinmy.weixin4j.util.DateUtil;
import com.foxinmy.weixin4j.util.StringUtil;
diff --git a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/payment/v3/RedpacketSendResult.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/payment/mch/RedpacketSendResult.java
similarity index 98%
rename from weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/payment/v3/RedpacketSendResult.java
rename to weixin4j-base/src/main/java/com/foxinmy/weixin4j/payment/mch/RedpacketSendResult.java
index b22e0a9d..9ae12cea 100644
--- a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/payment/v3/RedpacketSendResult.java
+++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/payment/mch/RedpacketSendResult.java
@@ -1,4 +1,4 @@
-package com.foxinmy.weixin4j.mp.payment.v3;
+package com.foxinmy.weixin4j.payment.mch;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
diff --git a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/payment/v3/RefundDetail.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/payment/mch/RefundDetail.java
similarity index 95%
rename from weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/payment/v3/RefundDetail.java
rename to weixin4j-base/src/main/java/com/foxinmy/weixin4j/payment/mch/RefundDetail.java
index d5cb0457..35b4997e 100644
--- a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/payment/v3/RefundDetail.java
+++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/payment/mch/RefundDetail.java
@@ -1,4 +1,4 @@
-package com.foxinmy.weixin4j.mp.payment.v3;
+package com.foxinmy.weixin4j.payment.mch;
import java.util.List;
@@ -8,10 +8,10 @@ import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import com.alibaba.fastjson.annotation.JSONField;
-import com.foxinmy.weixin4j.mp.payment.coupon.CouponInfo;
-import com.foxinmy.weixin4j.mp.type.CurrencyType;
-import com.foxinmy.weixin4j.mp.type.RefundChannel;
-import com.foxinmy.weixin4j.mp.type.RefundStatus;
+import com.foxinmy.weixin4j.payment.coupon.CouponInfo;
+import com.foxinmy.weixin4j.type.CurrencyType;
+import com.foxinmy.weixin4j.type.RefundChannel;
+import com.foxinmy.weixin4j.type.RefundStatus;
import com.foxinmy.weixin4j.util.StringUtil;
import com.foxinmy.weixin4j.xml.ListsuffixResult;
@@ -127,7 +127,7 @@ public class RefundDetail extends ApiResult {
/**
* 代金券信息
*
- * @see com.foxinmy.weixin4j.mp.payment.coupon.CouponInfo
+ * @see com.foxinmy.weixin4j.payment.coupon.CouponInfo
*/
@ListsuffixResult
private List couponList;
diff --git a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/payment/v3/RefundRecord.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/payment/mch/RefundRecord.java
similarity index 96%
rename from weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/payment/v3/RefundRecord.java
rename to weixin4j-base/src/main/java/com/foxinmy/weixin4j/payment/mch/RefundRecord.java
index 0386e77d..c34e2320 100644
--- a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/payment/v3/RefundRecord.java
+++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/payment/mch/RefundRecord.java
@@ -1,4 +1,4 @@
-package com.foxinmy.weixin4j.mp.payment.v3;
+package com.foxinmy.weixin4j.payment.mch;
import java.util.List;
@@ -8,7 +8,7 @@ import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import com.alibaba.fastjson.annotation.JSONField;
-import com.foxinmy.weixin4j.mp.type.CurrencyType;
+import com.foxinmy.weixin4j.type.CurrencyType;
import com.foxinmy.weixin4j.xml.ListsuffixResult;
/**
@@ -86,7 +86,7 @@ public class RefundRecord extends ApiResult {
/**
* 退款详情
*
- * @see com.foxinmy.weixin4j.mp.payment.v3.RefundDetail
+ * @see com.foxinmy.weixin4j.payment.mch.RefundDetail
*/
@ListsuffixResult({ "^out_refund_no(_\\d)$", "^refund_.*(_\\d)$" })
private List refundList;
diff --git a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/payment/v3/RefundResult.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/payment/mch/RefundResult.java
similarity index 96%
rename from weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/payment/v3/RefundResult.java
rename to weixin4j-base/src/main/java/com/foxinmy/weixin4j/payment/mch/RefundResult.java
index cb7007c7..39e76696 100644
--- a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/payment/v3/RefundResult.java
+++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/payment/mch/RefundResult.java
@@ -1,4 +1,4 @@
-package com.foxinmy.weixin4j.mp.payment.v3;
+package com.foxinmy.weixin4j.payment.mch;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
diff --git a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/type/BillType.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/type/BillType.java
similarity index 90%
rename from weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/type/BillType.java
rename to weixin4j-base/src/main/java/com/foxinmy/weixin4j/type/BillType.java
index a1e482b7..f0bde796 100644
--- a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/type/BillType.java
+++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/type/BillType.java
@@ -1,4 +1,4 @@
-package com.foxinmy.weixin4j.mp.type;
+package com.foxinmy.weixin4j.type;
/**
* 对账单类型
diff --git a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/type/CouponStatus.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/type/CouponStatus.java
similarity index 90%
rename from weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/type/CouponStatus.java
rename to weixin4j-base/src/main/java/com/foxinmy/weixin4j/type/CouponStatus.java
index 92ddf025..3a80c163 100644
--- a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/type/CouponStatus.java
+++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/type/CouponStatus.java
@@ -1,4 +1,4 @@
-package com.foxinmy.weixin4j.mp.type;
+package com.foxinmy.weixin4j.type;
/**
* 代金券状态
diff --git a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/type/CouponStockStatus.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/type/CouponStockStatus.java
similarity index 92%
rename from weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/type/CouponStockStatus.java
rename to weixin4j-base/src/main/java/com/foxinmy/weixin4j/type/CouponStockStatus.java
index 70bee7cb..de3dedbb 100644
--- a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/type/CouponStockStatus.java
+++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/type/CouponStockStatus.java
@@ -1,4 +1,4 @@
-package com.foxinmy.weixin4j.mp.type;
+package com.foxinmy.weixin4j.type;
/**
* 代金券批次状态
diff --git a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/type/CouponStockType.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/type/CouponStockType.java
similarity index 90%
rename from weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/type/CouponStockType.java
rename to weixin4j-base/src/main/java/com/foxinmy/weixin4j/type/CouponStockType.java
index a6d86a0c..b618049d 100644
--- a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/type/CouponStockType.java
+++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/type/CouponStockType.java
@@ -1,4 +1,4 @@
-package com.foxinmy.weixin4j.mp.type;
+package com.foxinmy.weixin4j.type;
/**
* 代金券批次类型
diff --git a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/type/CouponType.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/type/CouponType.java
similarity index 91%
rename from weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/type/CouponType.java
rename to weixin4j-base/src/main/java/com/foxinmy/weixin4j/type/CouponType.java
index 0022ae6b..14745ad9 100644
--- a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/type/CouponType.java
+++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/type/CouponType.java
@@ -1,4 +1,4 @@
-package com.foxinmy.weixin4j.mp.type;
+package com.foxinmy.weixin4j.type;
/**
* 代金券类型
diff --git a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/type/CurrencyType.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/type/CurrencyType.java
similarity index 90%
rename from weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/type/CurrencyType.java
rename to weixin4j-base/src/main/java/com/foxinmy/weixin4j/type/CurrencyType.java
index 3b55b1aa..3390c883 100644
--- a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/type/CurrencyType.java
+++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/type/CurrencyType.java
@@ -1,4 +1,4 @@
-package com.foxinmy.weixin4j.mp.type;
+package com.foxinmy.weixin4j.type;
/**
* 币种
diff --git a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/type/IdQuery.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/type/IdQuery.java
similarity index 95%
rename from weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/type/IdQuery.java
rename to weixin4j-base/src/main/java/com/foxinmy/weixin4j/type/IdQuery.java
index f086b5e4..dbec1406 100644
--- a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/type/IdQuery.java
+++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/type/IdQuery.java
@@ -1,4 +1,4 @@
-package com.foxinmy.weixin4j.mp.type;
+package com.foxinmy.weixin4j.type;
import java.io.Serializable;
diff --git a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/type/IdType.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/type/IdType.java
similarity index 92%
rename from weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/type/IdType.java
rename to weixin4j-base/src/main/java/com/foxinmy/weixin4j/type/IdType.java
index 11b25ad1..978eb3fd 100644
--- a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/type/IdType.java
+++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/type/IdType.java
@@ -1,4 +1,4 @@
-package com.foxinmy.weixin4j.mp.type;
+package com.foxinmy.weixin4j.type;
/**
* ID类型
diff --git a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/type/MPPaymentCheckNameType.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/type/MPPaymentCheckNameType.java
similarity index 92%
rename from weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/type/MPPaymentCheckNameType.java
rename to weixin4j-base/src/main/java/com/foxinmy/weixin4j/type/MPPaymentCheckNameType.java
index fba73c2b..828cec39 100644
--- a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/type/MPPaymentCheckNameType.java
+++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/type/MPPaymentCheckNameType.java
@@ -1,4 +1,4 @@
-package com.foxinmy.weixin4j.mp.type;
+package com.foxinmy.weixin4j.type;
/**
* 企业付款检查收款人姓名的策略
diff --git a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/type/QRType.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/type/QRType.java
similarity index 90%
rename from weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/type/QRType.java
rename to weixin4j-base/src/main/java/com/foxinmy/weixin4j/type/QRType.java
index b215379d..d4a4a181 100644
--- a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/type/QRType.java
+++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/type/QRType.java
@@ -1,4 +1,4 @@
-package com.foxinmy.weixin4j.mp.type;
+package com.foxinmy.weixin4j.type;
/**
* 二维码类型
diff --git a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/type/RedpacketSendType.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/type/RedpacketSendType.java
similarity index 89%
rename from weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/type/RedpacketSendType.java
rename to weixin4j-base/src/main/java/com/foxinmy/weixin4j/type/RedpacketSendType.java
index f0b563e3..defbce30 100644
--- a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/type/RedpacketSendType.java
+++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/type/RedpacketSendType.java
@@ -1,4 +1,4 @@
-package com.foxinmy.weixin4j.mp.type;
+package com.foxinmy.weixin4j.type;
/**
* 红包发放类型
diff --git a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/type/RedpacketStatus.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/type/RedpacketStatus.java
similarity index 89%
rename from weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/type/RedpacketStatus.java
rename to weixin4j-base/src/main/java/com/foxinmy/weixin4j/type/RedpacketStatus.java
index dd839f4b..3da3a739 100644
--- a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/type/RedpacketStatus.java
+++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/type/RedpacketStatus.java
@@ -1,4 +1,4 @@
-package com.foxinmy.weixin4j.mp.type;
+package com.foxinmy.weixin4j.type;
/**
* 红包状态
diff --git a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/type/RedpacketType.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/type/RedpacketType.java
similarity index 85%
rename from weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/type/RedpacketType.java
rename to weixin4j-base/src/main/java/com/foxinmy/weixin4j/type/RedpacketType.java
index fe76f1f3..9a7ca7e3 100644
--- a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/type/RedpacketType.java
+++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/type/RedpacketType.java
@@ -1,4 +1,4 @@
-package com.foxinmy.weixin4j.mp.type;
+package com.foxinmy.weixin4j.type;
/**
* 红包类型
diff --git a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/type/RefundChannel.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/type/RefundChannel.java
similarity index 88%
rename from weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/type/RefundChannel.java
rename to weixin4j-base/src/main/java/com/foxinmy/weixin4j/type/RefundChannel.java
index 13597277..11c1a136 100644
--- a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/type/RefundChannel.java
+++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/type/RefundChannel.java
@@ -1,4 +1,4 @@
-package com.foxinmy.weixin4j.mp.type;
+package com.foxinmy.weixin4j.type;
/**
* 退款渠道
diff --git a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/type/RefundStatus.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/type/RefundStatus.java
similarity index 93%
rename from weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/type/RefundStatus.java
rename to weixin4j-base/src/main/java/com/foxinmy/weixin4j/type/RefundStatus.java
index 28f8d0ae..3b2ec8e9 100644
--- a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/type/RefundStatus.java
+++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/type/RefundStatus.java
@@ -1,4 +1,4 @@
-package com.foxinmy.weixin4j.mp.type;
+package com.foxinmy.weixin4j.type;
/**
* 退款状态
diff --git a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/type/RefundType.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/type/RefundType.java
similarity index 93%
rename from weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/type/RefundType.java
rename to weixin4j-base/src/main/java/com/foxinmy/weixin4j/type/RefundType.java
index 3fff6da4..78308095 100644
--- a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/type/RefundType.java
+++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/type/RefundType.java
@@ -1,4 +1,4 @@
-package com.foxinmy.weixin4j.mp.type;
+package com.foxinmy.weixin4j.type;
/**
* 退款类型
diff --git a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/type/SignType.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/type/SignType.java
similarity index 79%
rename from weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/type/SignType.java
rename to weixin4j-base/src/main/java/com/foxinmy/weixin4j/type/SignType.java
index e61b3f05..49cb9ad3 100644
--- a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/type/SignType.java
+++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/type/SignType.java
@@ -1,4 +1,4 @@
-package com.foxinmy.weixin4j.mp.type;
+package com.foxinmy.weixin4j.type;
/**
* 签名类型
diff --git a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/type/TradeState.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/type/TradeState.java
similarity index 93%
rename from weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/type/TradeState.java
rename to weixin4j-base/src/main/java/com/foxinmy/weixin4j/type/TradeState.java
index 74130481..655cbbab 100644
--- a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/type/TradeState.java
+++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/type/TradeState.java
@@ -1,4 +1,4 @@
-package com.foxinmy.weixin4j.mp.type;
+package com.foxinmy.weixin4j.type;
/**
* 交易状态
diff --git a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/type/TradeType.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/type/TradeType.java
similarity index 88%
rename from weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/type/TradeType.java
rename to weixin4j-base/src/main/java/com/foxinmy/weixin4j/type/TradeType.java
index 5ae599f6..9a642993 100644
--- a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/type/TradeType.java
+++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/type/TradeType.java
@@ -1,4 +1,4 @@
-package com.foxinmy.weixin4j.mp.type;
+package com.foxinmy.weixin4j.type;
/**
* 微信支付类型
diff --git a/weixin4j-mp/README.md b/weixin4j-mp/README.md
index 08f18819..01bf4eb6 100644
--- a/weixin4j-mp/README.md
+++ b/weixin4j-mp/README.md
@@ -29,7 +29,7 @@ weixin4j-mp
* Pay2Api `V2支付API`
-* Pay3Api `V3支付API`
+* Pay3Api `V3(商户平台)支付API`
* CouponApi `代金券API`
@@ -39,7 +39,7 @@ weixin4j-mp
* CashApi `现金API`
-* PayUtil [微信支付工具类](./src/main/java/com/foxinmy/weixin4j/mp/payment/PayUtil.java)
+* PayUtil [微信支付工具类](https://github.com/foxinmy/weixin4j/tree/master/weixin4j-base/src/main/java/com/foxinmy/weixin4j/payment/PayUtil.java)
如何使用
--------
diff --git a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/api/MpApi.java b/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/api/MpApi.java
index 8801e67c..db8ec7f2 100644
--- a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/api/MpApi.java
+++ b/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/api/MpApi.java
@@ -2,10 +2,7 @@ package com.foxinmy.weixin4j.mp.api;
import java.util.ResourceBundle;
-import com.alibaba.fastjson.JSON;
import com.foxinmy.weixin4j.api.BaseApi;
-import com.foxinmy.weixin4j.mp.model.WeixinMpAccount;
-import com.foxinmy.weixin4j.util.ConfigUtil;
/**
* 微信公众平台API
@@ -20,16 +17,10 @@ import com.foxinmy.weixin4j.util.ConfigUtil;
public class MpApi extends BaseApi {
private final static ResourceBundle WEIXIN_BUNDLE;
- /**
- * 默认使用weixin4j.properties文件中的公众号信息
- */
- public final static WeixinMpAccount DEFAULT_WEIXIN_ACCOUNT;
static {
WEIXIN_BUNDLE = ResourceBundle
.getBundle("com/foxinmy/weixin4j/mp/api/weixin");
- DEFAULT_WEIXIN_ACCOUNT = JSON.parseObject(
- ConfigUtil.getValue("account"), WeixinMpAccount.class);
}
@Override
diff --git a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/api/Pay2Api.java b/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/api/Pay2Api.java
index 1599caf0..b6aa00ac 100644
--- a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/api/Pay2Api.java
+++ b/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/api/Pay2Api.java
@@ -28,21 +28,24 @@ import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.TypeReference;
import com.alibaba.fastjson.parser.Feature;
import com.foxinmy.weixin4j.exception.WeixinException;
+import com.foxinmy.weixin4j.http.weixin.JsonResult;
import com.foxinmy.weixin4j.http.weixin.SSLHttpClinet;
import com.foxinmy.weixin4j.http.weixin.WeixinResponse;
import com.foxinmy.weixin4j.model.Consts;
import com.foxinmy.weixin4j.model.Token;
-import com.foxinmy.weixin4j.mp.model.WeixinMpAccount;
-import com.foxinmy.weixin4j.mp.payment.PayUtil;
-import com.foxinmy.weixin4j.mp.payment.v2.Order;
-import com.foxinmy.weixin4j.mp.payment.v2.RefundRecord;
-import com.foxinmy.weixin4j.mp.payment.v2.RefundResult;
-import com.foxinmy.weixin4j.mp.payment.v3.ApiResult;
-import com.foxinmy.weixin4j.mp.type.BillType;
-import com.foxinmy.weixin4j.mp.type.IdQuery;
-import com.foxinmy.weixin4j.mp.type.RefundType;
-import com.foxinmy.weixin4j.mp.type.SignType;
+import com.foxinmy.weixin4j.model.WeixinPayAccount;
+import com.foxinmy.weixin4j.mp.payment.v2.OrderV2;
+import com.foxinmy.weixin4j.mp.payment.v2.PayUtil2;
+import com.foxinmy.weixin4j.mp.payment.v2.RefundRecordV2;
+import com.foxinmy.weixin4j.mp.payment.v2.RefundResultV2;
+import com.foxinmy.weixin4j.mp.token.WeixinTokenCreator;
+import com.foxinmy.weixin4j.payment.PayUtil;
import com.foxinmy.weixin4j.token.TokenHolder;
+import com.foxinmy.weixin4j.token.TokenStorager;
+import com.foxinmy.weixin4j.type.BillType;
+import com.foxinmy.weixin4j.type.IdQuery;
+import com.foxinmy.weixin4j.type.RefundType;
+import com.foxinmy.weixin4j.type.SignType;
import com.foxinmy.weixin4j.util.ConfigUtil;
import com.foxinmy.weixin4j.util.DateUtil;
import com.foxinmy.weixin4j.util.DigestUtil;
@@ -59,13 +62,25 @@ import com.foxinmy.weixin4j.xml.ListsuffixResultDeserializer;
* @since JDK 1.7
* @see
*/
-public class Pay2Api extends PayApi {
+public class Pay2Api extends MpApi {
- private final HelperApi helperApi;
+ private final WeixinPayAccount weixinAccount;
+ private final TokenHolder tokenHolder;
- public Pay2Api(WeixinMpAccount weixinAccount, TokenHolder tokenHolder) {
- super(weixinAccount, tokenHolder);
- this.helperApi = new HelperApi(tokenHolder);
+ public Pay2Api() {
+ this(JSON.parseObject(ConfigUtil.getValue("account"),
+ WeixinPayAccount.class));
+ }
+
+ public Pay2Api(WeixinPayAccount weixinAccount) {
+ this(weixinAccount, DEFAULT_TOKEN_STORAGER);
+ }
+
+ public Pay2Api(WeixinPayAccount weixinAccount, TokenStorager tokenStorager) {
+ this.weixinAccount = weixinAccount;
+ this.tokenHolder = new TokenHolder(new WeixinTokenCreator(
+ weixinAccount.getId(), weixinAccount.getSecret()),
+ tokenStorager);
}
/**
@@ -74,12 +89,12 @@ public class Pay2Api extends PayApi {
* @param idQuery
* 订单号
* @return 订单信息
- * @see com.foxinmy.weixin4j.mp.payment.v2.Order
+ * @see com.foxinmy.weixin4j.mp.payment.v2.OrderV2
* @since V2
* @throws WeixinException
*/
- public Order orderQuery(IdQuery idQuery) throws WeixinException {
- String orderquery_uri = getRequestUri("orderquery_uri");
+ public OrderV2 orderQuery(IdQuery idQuery) throws WeixinException {
+ String orderquery_uri = getRequestUri("orderquery_v2_uri");
Token token = tokenHolder.getToken();
StringBuilder sb = new StringBuilder();
sb.append(idQuery.getType().getName()).append("=")
@@ -97,7 +112,7 @@ public class Pay2Api extends PayApi {
obj.put("appkey", weixinAccount.getPaySignKey());
obj.put("package", sb.toString());
obj.put("timestamp", timestamp);
- String signature = PayUtil.paysignSha(obj);
+ String signature = PayUtil2.paysignSha(obj);
obj.clear();
obj.put("appid", weixinAccount.getId());
@@ -111,7 +126,7 @@ public class Pay2Api extends PayApi {
obj.toJSONString());
String order_info = response.getAsJson().getString("order_info");
- Order order = JSON.parseObject(order_info, Order.class,
+ OrderV2 order = JSON.parseObject(order_info, OrderV2.class,
Feature.IgnoreNotMatch);
if (order.getRetCode() != 0) {
throw new WeixinException(Integer.toString(order.getRetCode()),
@@ -144,15 +159,14 @@ public class Pay2Api extends PayApi {
* 如 opUserPasswd
*
* @return 退款申请结果
- * @see com.foxinmy.weixin4j.mp.payment.v2.RefundResult
+ * @see com.foxinmy.weixin4j.mp.payment.v2.RefundResultV2
* @since V2
* @throws WeixinException
*/
- @Override
- protected RefundResult refund(File caFile, IdQuery idQuery,
+ protected RefundResultV2 refundApply(File caFile, IdQuery idQuery,
String outRefundNo, double totalFee, double refundFee,
String opUserId, Map mopara) throws WeixinException {
- String refund_uri = getRequestUri("refund_v2_uri");
+ String refund_uri = getRequestUri("refundapply_v2_uri");
WeixinResponse response = null;
InputStream ca = null;
try {
@@ -189,7 +203,7 @@ public class Pay2Api extends PayApi {
CertificateFactory cf = CertificateFactory
.getInstance(com.foxinmy.weixin4j.model.Consts.X509);
java.security.cert.Certificate cert = cf
- .generateCertificate(PayUtil.class
+ .generateCertificate(Pay2Api.class
.getResourceAsStream("cacert.pem"));
ks = KeyStore
.getInstance(com.foxinmy.weixin4j.model.Consts.JKS);
@@ -229,7 +243,7 @@ public class Pay2Api extends PayApi {
}
}
}
- return response.getAsObject(new TypeReference() {
+ return response.getAsObject(new TypeReference() {
});
}
@@ -251,14 +265,14 @@ public class Pay2Api extends PayApi {
* 操作员帐号, 默认为商户号
* @param opUserPasswd
* 操作员密码,默认为商户后台登录密码
- * @see {@link com.foxinmy.weixin4j.mp.api.Pay2Api#refund(File, IdQuery, String, double, double, String, Map)}
+ * @see {@link com.foxinmy.weixin4j.mp.api.Pay2Api#refundApply(File, IdQuery, String, double, double, String, Map)}
*/
- public RefundResult refund(File caFile, IdQuery idQuery,
+ public RefundResultV2 refundApply(File caFile, IdQuery idQuery,
String outRefundNo, double totalFee, double refundFee,
String opUserId, String opUserPasswd) throws WeixinException {
Map mopara = new HashMap();
mopara.put("op_user_passwd", DigestUtil.MD5(opUserPasswd));
- return refund(caFile, idQuery, outRefundNo, totalFee, refundFee,
+ return refundApply(caFile, idQuery, outRefundNo, totalFee, refundFee,
opUserId, mopara);
}
@@ -289,10 +303,10 @@ public class Pay2Api extends PayApi {
* @param refundType
* 为空或者填 1:商户号余额退款;2:现金帐号 退款;3:优先商户号退款,若商户号余额不足, 再做现金帐号退款。使用 2 或
* 3 时,需联系财 付通开通此功能
- * @see {@link com.foxinmy.weixin4j.mp.api.Pay2Api#refund(File, IdQuery, String, double, double, String, Map)}
+ * @see {@link com.foxinmy.weixin4j.mp.api.Pay2Api#refundApply(File, IdQuery, String, double, double, String, Map)}
* @return 退款结果
*/
- public RefundResult refund(File caFile, IdQuery idQuery,
+ public RefundResultV2 refundApply(File caFile, IdQuery idQuery,
String outRefundNo, double totalFee, double refundFee,
String opUserId, String opUserPasswd, String recvUserId,
String reccvUserName, RefundType refundType) throws WeixinException {
@@ -307,41 +321,10 @@ public class Pay2Api extends PayApi {
if (refundType != null) {
mopara.put("refund_type", Integer.toString(refundType.getVal()));
}
- return refund(caFile, idQuery, outRefundNo, totalFee, refundFee,
+ return refundApply(caFile, idQuery, outRefundNo, totalFee, refundFee,
opUserId, mopara);
}
- /**
- * 冲正订单(需要证书)V2暂不支持
- *
- * @param caFile
- * 证书文件(V2版本后缀为*.pfx)
- * @param idQuery
- * 商户系统内部的订单号, transaction_id 、 out_trade_no 二选一,如果同时存在优先级:
- * transaction_id> out_trade_no
- * @since V2
- * @return 撤销结果
- * @throws WeixinException
- */
- public ApiResult reverse(File caFile, IdQuery idQuery)
- throws WeixinException {
- throw new WeixinException("V2 unsupport reverse api");
- }
-
- /**
- * 关闭订单 当订单支付失败,调用关单接口后用新订单号重新发起支付,如果关单失败,返回已完
- * 成支付请按正常支付处理。如果出现银行掉单,调用关单成功后,微信后台会主动发起退款。
- *
- * @param outTradeNo
- * 商户系统内部的订单号
- * @return 处理结果
- * @since V2
- * @throws WeixinException
- */
- public ApiResult closeOrder(String outTradeNo) throws WeixinException {
- throw new WeixinException("V2 unsupport closeOrder api");
- }
-
/**
* 下载对账单
* 1.微信侧未成功下单的交易不会出现在对账单中。支付成功后撤销的交易会出现在对账 单中,跟原支付单订单号一致,bill_type 为
@@ -428,12 +411,12 @@ public class Pay2Api extends PayApi {
* 四个参数必填一个,优先级为:
* refund_id>out_refund_no>transaction_id>out_trade_no
* @return 退款记录
- * @see com.foxinmy.weixin4j.mp.payment.v2.RefundRecord
- * @see com.foxinmy.weixin4j.mp.payment.v2.RefundDetail
+ * @see com.foxinmy.weixin4j.mp.payment.v2.RefundRecordV2
+ * @see com.foxinmy.weixin4j.mp.payment.v2.RefundDetailV2
* @since V2
* @throws WeixinException
*/
- public RefundRecord refundQuery(IdQuery idQuery) throws WeixinException {
+ public RefundRecordV2 refundQuery(IdQuery idQuery) throws WeixinException {
String refundquery_uri = getRequestUri("refundquery_v2_uri");
Map map = new HashMap();
map.put("input_charset", Consts.UTF_8.name());
@@ -443,11 +426,66 @@ public class Pay2Api extends PayApi {
map.put("sign", sign.toLowerCase());
WeixinResponse response = weixinClient.get(refundquery_uri, map);
return ListsuffixResultDeserializer.deserialize(response.getAsString(),
- RefundRecord.class);
+ RefundRecordV2.class);
}
- @Override
- public String getShorturl(String url) throws WeixinException {
- return helperApi.getShorturl(url);
+ /**
+ * 发货通知
+ *
+ * @param openId
+ * 用户ID
+ * @param transid
+ * 交易单号
+ * @param outTradeNo
+ * 订单号
+ * @param status
+ * 成功|失败
+ * @param statusMsg
+ * status为失败时携带的信息
+ * @return 发货处理结果
+ * @throws WeixinException
+ */
+ public JsonResult deliverNotify(String openId, String transid,
+ String outTradeNo, boolean status, String statusMsg)
+ throws WeixinException {
+ String delivernotify_uri = getRequestUri("delivernotify_uri");
+ Token token = tokenHolder.getToken();
+
+ Map map = new HashMap();
+ map.put("appid", weixinAccount.getId());
+ map.put("appkey", weixinAccount.getPaySignKey());
+ map.put("openid", openId);
+ map.put("transid", transid);
+ map.put("out_trade_no", outTradeNo);
+ map.put("deliver_timestamp", DateUtil.timestamp2string());
+ map.put("deliver_status", status ? "1" : "0");
+ map.put("deliver_msg", statusMsg);
+ map.put("app_signature", PayUtil2.paysignSha(map));
+ map.put("sign_method", SignType.SHA1.name().toLowerCase());
+
+ WeixinResponse response = weixinClient.post(
+ String.format(delivernotify_uri, token.getAccessToken()),
+ JSON.toJSONString(map));
+ return response.getAsJsonResult();
+ }
+
+ /**
+ * 维权处理
+ *
+ * @param openId
+ * 用户ID
+ * @param feedbackId
+ * 维权单号
+ * @return 维权处理结果
+ * @throws WeixinException
+ */
+ public JsonResult updateFeedback(String openId, String feedbackId)
+ throws WeixinException {
+ String payfeedback_update_uri = getRequestUri("payfeedback_update_uri");
+ Token token = tokenHolder.getToken();
+ WeixinResponse response = weixinClient.get(String.format(
+ payfeedback_update_uri, token.getAccessToken(), openId,
+ feedbackId));
+ return response.getAsJsonResult();
}
}
diff --git a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/api/PayApi.java b/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/api/PayApi.java
deleted file mode 100644
index 00ed55e9..00000000
--- a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/api/PayApi.java
+++ /dev/null
@@ -1,221 +0,0 @@
-package com.foxinmy.weixin4j.mp.api;
-
-import java.io.File;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.Map;
-
-import com.alibaba.fastjson.JSON;
-import com.foxinmy.weixin4j.exception.WeixinException;
-import com.foxinmy.weixin4j.http.weixin.JsonResult;
-import com.foxinmy.weixin4j.http.weixin.WeixinResponse;
-import com.foxinmy.weixin4j.model.Token;
-import com.foxinmy.weixin4j.mp.model.WeixinMpAccount;
-import com.foxinmy.weixin4j.mp.payment.PayUtil;
-import com.foxinmy.weixin4j.mp.payment.v3.ApiResult;
-import com.foxinmy.weixin4j.mp.type.BillType;
-import com.foxinmy.weixin4j.mp.type.IdQuery;
-import com.foxinmy.weixin4j.mp.type.SignType;
-import com.foxinmy.weixin4j.token.TokenHolder;
-import com.foxinmy.weixin4j.util.ConfigUtil;
-import com.foxinmy.weixin4j.util.DateUtil;
-
-/**
- * 支付API
- *
- * @className PayApi
- * @author jy
- * @date 2014年10月28日
- * @since JDK 1.7
- * @see com.foxinmy.weixin4j.mp.api.Pay2Api
- * @see com.foxinmy.weixin4j.mp.api.Pay3Api
- */
-public abstract class PayApi extends MpApi {
-
- /**
- * 默认的证书文件
- */
- public final static File DEFAULT_CA_FILE = new File(
- ConfigUtil.getClassPathValue("ca_file"));
-
- protected final WeixinMpAccount weixinAccount;
- protected final TokenHolder tokenHolder;
-
- public PayApi(WeixinMpAccount weixinAccount, TokenHolder tokenHolder) {
- this.weixinAccount = weixinAccount;
- this.tokenHolder = tokenHolder;
- }
-
- /**
- * 发货通知
- *
- * @param openId
- * 用户ID
- * @param transid
- * 交易单号
- * @param outTradeNo
- * 订单号
- * @param status
- * 成功|失败
- * @param statusMsg
- * status为失败时携带的信息
- * @return 发货处理结果
- * @throws WeixinException
- */
- public JsonResult deliverNotify(String openId, String transid,
- String outTradeNo, boolean status, String statusMsg)
- throws WeixinException {
- String delivernotify_uri = getRequestUri("delivernotify_uri");
- Token token = tokenHolder.getToken();
-
- Map map = new HashMap();
- map.put("appid", weixinAccount.getId());
- map.put("appkey", weixinAccount.getPaySignKey());
- map.put("openid", openId);
- map.put("transid", transid);
- map.put("out_trade_no", outTradeNo);
- map.put("deliver_timestamp", DateUtil.timestamp2string());
- map.put("deliver_status", status ? "1" : "0");
- map.put("deliver_msg", statusMsg);
- map.put("app_signature", PayUtil.paysignSha(map));
- map.put("sign_method", SignType.SHA1.name().toLowerCase());
-
- WeixinResponse response = weixinClient.post(
- String.format(delivernotify_uri, token.getAccessToken()),
- JSON.toJSONString(map));
- return response.getAsJsonResult();
- }
-
- /**
- * 维权处理
- *
- * @param openId
- * 用户ID
- * @param feedbackId
- * 维权单号
- * @return 维权处理结果
- * @throws WeixinException
- */
- public JsonResult updateFeedback(String openId, String feedbackId)
- throws WeixinException {
- String payfeedback_update_uri = getRequestUri("payfeedback_update_uri");
- Token token = tokenHolder.getToken();
- WeixinResponse response = weixinClient.get(String.format(
- payfeedback_update_uri, token.getAccessToken(), openId,
- feedbackId));
- return response.getAsJsonResult();
- }
-
- /**
- * 订单查询
- *
- * @param idQuery
- * 商户系统内部的订单号, transaction_id、out_trade_no 二 选一,如果同时存在优先级:
- * transaction_id> out_trade_no
- * @return 订单信息
- * @see com.foxinmy.weixin4j.mp.payment.v2.Order
- * @see com.foxinmy.weixin4j.mp.payment.v3.Order
- * @throws WeixinException
- */
- public abstract Object orderQuery(IdQuery idQuery) throws WeixinException;
-
- /**
- * 申请退款(请求需要双向证书)
- *
- * 交易时间超过 1 年的订单无法提交退款; 支持部分退款,部分退需要设置相同的订单号和不同的 out_refund_no。一笔退款失
- * 败后重新提交,要采用原来的 out_refund_no。总退款金额不能超过用户实际支付金额。
- *
- *
- * @param caFile
- * 证书文件(V2版本后缀为*.pfx,V3版本后缀为*.p12)
- * @param idQuery
- * 商户系统内部的订单号, transaction_id 、 out_trade_no 二选一,如果同时存在优先级:
- * transaction_id> out_trade_no
- * @param outRefundNo
- * 商户系统内部的退款单号,商 户系统内部唯一,同一退款单号多次请求只退一笔
- * @param totalFee
- * 订单总金额,单位为元
- * @param refundFee
- * 退款总金额,单位为元,可以做部分退款
- * @param opUserId
- * 操作员帐号, 默认为商户号
- * @param mopara
- * 更多参数 如V2版本的opUserPasswd
- *
- * @return 退款申请结果
- * @see com.foxinmy.weixin4j.mp.payment.v2.RefundResult
- * @see com.foxinmy.weixin4j.mp.payment.v3.RefundResult
- * @throws WeixinException
- */
- protected abstract Object refund(File caFile, IdQuery idQuery,
- String outRefundNo, double totalFee, double refundFee,
- String opUserId, Map mopara) throws WeixinException;
-
- /**
- * 退款查询 退款有一定延时,用零钱支付的退款20分钟内到账,银行卡支付的退款 3 个工作日后重新查询退款状态
- *
- * @param idQuery
- * 单号 refund_id、out_refund_no、 out_trade_no 、 transaction_id
- * 四个参数必填一个,优先级为:
- * refund_id>out_refund_no>transaction_id>out_trade_no
- * @return 退款记录
- * @see com.foxinmy.weixin4j.mp.payment.v2.RefundRecord
- * @see com.foxinmy.weixin4j.mp.payment.v3.RefundRecord
- * @throws WeixinException
- */
- public abstract Object refundQuery(IdQuery idQuery) throws WeixinException;
-
- /**
- * 冲正订单(需要证书)
- *
- * @param caFile
- * 证书文件 (V2版本后缀为*.pfx,V3版本后缀为*.p12)
- * @param idQuery
- * 商户系统内部的订单号, transaction_id 、 out_trade_no 二选一,如果同时存在优先级:
- * transaction_id> out_trade_no
- * @return 撤销结果
- * @throws WeixinException
- */
- public abstract ApiResult reverse(File caFile, IdQuery idQuery)
- throws WeixinException;
-
- /**
- * 下载对账单
- * 1.微信侧未成功下单的交易不会出现在对账单中。支付成功后撤销的交易会出现在对账 单中,跟原支付单订单号一致,bill_type 为
- * REVOKED;
- * 2.微信在次日 9 点启动生成前一天的对账单,建议商户 9 点半后再获取;
- * 3.对账单中涉及金额的字段单位为“元”。
- *
- * @param billDate
- * 下载对账单的日期
- * @param billType
- * 下载对账单的类型 ALL,返回当日所有订单信息, 默认值 SUCCESS,返回当日成功支付的订单
- * REFUND,返回当日退款订单
- * @return excel表格
- * @throws WeixinException
- */
- public abstract File downloadbill(Date billDate, BillType billType)
- throws WeixinException;
-
- /**
- * 关闭订单 当订单支付失败,调用关单接口后用新订单号重新发起支付,如果关单失败,返回已完
- * 成支付请按正常支付处理。如果出现银行掉单,调用关单成功后,微信后台会主动发起退款。
- *
- * @param outTradeNo
- * 商户系统内部的订单号
- * @return 处理结果
- * @throws WeixinException
- */
- public abstract ApiResult closeOrder(String outTradeNo)
- throws WeixinException;
-
- /**
- * native支付URL转短链接
- *
- * @param url
- * 具有native标识的支付URL
- * @return 转换后的短链接
- * @throws WeixinException
- */
- public abstract String getShorturl(String url) throws WeixinException;
-}
diff --git a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/payment/cacert.pem b/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/api/cacert.pem
similarity index 100%
rename from weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/payment/cacert.pem
rename to weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/api/cacert.pem
diff --git a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/api/weixin.properties b/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/api/weixin.properties
index a36fb0ac..afef726a 100644
--- a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/api/weixin.properties
+++ b/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/api/weixin.properties
@@ -113,18 +113,18 @@ semantic_uri={api_base_url}/semantic/semproxy/search?access_token=%s
# \u5fae\u4fe1\u670d\u52a1\u5730\u5740
getcallbackip_uri={api_cgi_url}/getcallbackip?access_token=%s
-# \u8ba2\u5355\u67e5\u8be2
-orderquery_uri={api_base_url}/pay/orderquery?access_token=%s
+# v2\u8ba2\u5355\u67e5\u8be2
+orderquery_v2_uri={api_base_url}/pay/orderquery?access_token=%s
# \u53d1\u8d27\u901a\u77e5
delivernotify_uri={api_base_url}/pay/delivernotify?access_token=%s
# \u7ef4\u6743\u5904\u7406
payfeedback_update_uri={api_base_url}/payfeedback/update?access_token=%s&openid=%s&feedbackid=%s
-# \u5bf9\u8d26\u5355\u4e0b\u8f7d
+# v2\u5bf9\u8d26\u5355\u4e0b\u8f7d
downloadbill_v2_uri={tenpay_base_url}/cgi-bin/mchdown_real_new.cgi
-# \u9000\u6b3e\u67e5\u8be2
+# v2\u9000\u6b3e\u67e5\u8be2
refundquery_v2_uri={tenpay_gw_base_url}/gateway/normalrefundquery.xml
-# \u9000\u6b3e\u7533\u8bf7
-refund_v2_uri={tenpay_ssl_base_url}/refundapi/gateway/refund.xml
+# v2\u9000\u6b3e\u7533\u8bf7
+refundapply_v2_uri={tenpay_ssl_base_url}/refundapi/gateway/refund.xml
# \u8ba2\u5355\u67e5\u8be2
orderquery_v3_uri={mch_base_url}/pay/orderquery
diff --git a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/model/QRParameter.java b/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/model/QRParameter.java
index 1babbf44..f63aef04 100644
--- a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/model/QRParameter.java
+++ b/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/model/QRParameter.java
@@ -2,7 +2,7 @@ package com.foxinmy.weixin4j.mp.model;
import java.io.Serializable;
-import com.foxinmy.weixin4j.mp.type.QRType;
+import com.foxinmy.weixin4j.type.QRType;
/**
* 二维码参数对象
@@ -28,7 +28,7 @@ public class QRParameter implements Serializable {
/**
* 二维码类型
*
- * @see com.foxinmy.weixin4j.mp.type.QRType
+ * @see com.foxinmy.weixin4j.type.QRType
*/
private QRType qrType;
/**
diff --git a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/payment/PayUtil.java b/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/payment/PayUtil.java
deleted file mode 100644
index 1c211b4c..00000000
--- a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/payment/PayUtil.java
+++ /dev/null
@@ -1,455 +0,0 @@
-package com.foxinmy.weixin4j.mp.payment;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import com.alibaba.fastjson.JSON;
-import com.alibaba.fastjson.TypeReference;
-import com.foxinmy.weixin4j.exception.PayException;
-import com.foxinmy.weixin4j.exception.WeixinException;
-import com.foxinmy.weixin4j.http.weixin.WeixinHttpClient;
-import com.foxinmy.weixin4j.http.weixin.WeixinResponse;
-import com.foxinmy.weixin4j.model.Consts;
-import com.foxinmy.weixin4j.mp.model.WeixinMpAccount;
-import com.foxinmy.weixin4j.mp.payment.v2.JsPayRequestV2;
-import com.foxinmy.weixin4j.mp.payment.v2.NativePayResponseV2;
-import com.foxinmy.weixin4j.mp.payment.v2.PayPackageV2;
-import com.foxinmy.weixin4j.mp.payment.v3.PayPackageV3;
-import com.foxinmy.weixin4j.mp.payment.v3.PayRequestV3;
-import com.foxinmy.weixin4j.mp.payment.v3.PrePay;
-import com.foxinmy.weixin4j.mp.type.SignType;
-import com.foxinmy.weixin4j.mp.type.TradeType;
-import com.foxinmy.weixin4j.mp.type.URLConsts;
-import com.foxinmy.weixin4j.util.ConfigUtil;
-import com.foxinmy.weixin4j.util.DateUtil;
-import com.foxinmy.weixin4j.util.DigestUtil;
-import com.foxinmy.weixin4j.util.MapUtil;
-import com.foxinmy.weixin4j.util.RandomUtil;
-import com.foxinmy.weixin4j.util.StringUtil;
-import com.foxinmy.weixin4j.xml.XmlStream;
-
-/**
- * 支付工具类(JSAPI,NATIVE,MicroPay)
- *
- * @className PayUtil
- * @author jy
- * @date 2014年10月28日
- * @since JDK 1.7
- * @see
- */
-public class PayUtil {
- /**
- * 生成JSAPI字符串
- *
- * @param payPackage
- * 订单信息
- * @param WeixinMpAccount
- * 商户信息
- * @since V2 & V3
- * @return 支付json串
- * @throws PayException
- */
- public static String createPayJsRequestJson(PayPackage payPackage,
- WeixinMpAccount weixinAccount) throws PayException {
- if (payPackage instanceof PayPackageV2) {
- return createPayJsRequestJsonV2((PayPackageV2) payPackage,
- weixinAccount);
- } else if (payPackage instanceof PayPackageV3) {
- return createPayJsRequestJsonV3((PayPackageV3) payPackage,
- weixinAccount);
- } else {
- throw new PayException("unknown pay");
- }
- }
-
- /**
- * 生成V2.x版本JSAPI支付字符串
- *
- * @param payPackage
- * 订单信息
- * @param weixinAccount
- * 商户信息
- * @return 支付json串
- */
- public static String createPayJsRequestJsonV2(PayPackageV2 payPackage,
- WeixinMpAccount weixinAccount) {
- if (StringUtil.isBlank(payPackage.getPartner())) {
- payPackage.setPartner(weixinAccount.getPartnerId());
- }
- JsPayRequestV2 jsPayRequest = new JsPayRequestV2(weixinAccount,
- payPackage);
- jsPayRequest.setPaySign(paysignSha(jsPayRequest,
- weixinAccount.getPaySignKey()));
- jsPayRequest.setSignType(SignType.SHA1);
- return JSON.toJSONString(jsPayRequest);
- }
-
- /**
- * 生成V2.x版本JSAPI支付字符串
- *
- * @param body
- * 支付详情
- * @param orderNo
- * 订单号
- * @param orderFee
- * 订单总额 按实际金额传入即可(元) 构造函数会转换为分
- * @param ip
- * @param weixinAccount
- * 商户信息
- * @return 支付json串
- */
- public static String createPayJsRequestJsonV2(String body, String orderNo,
- double orderFee, String notify_url, String ip,
- WeixinMpAccount weixinAccount) {
- PayPackageV2 payPackage = new PayPackageV2(body, orderNo, orderFee,
- notify_url, ip);
- payPackage.setPartner(weixinAccount.getPartnerId());
- return createPayJsRequestJsonV2(payPackage, weixinAccount);
- }
-
- /**
- * sha签名(一般用于V2.x支付接口)
- *
- * @param obj
- * 签名对象
- * @return
- */
- public static String paysignSha(Object obj) {
- return DigestUtil.SHA1(MapUtil.toJoinString(obj, false, true, null));
- }
-
- /**
- * sha签名(一般用于V2.x支付接口)
- *
- * @param obj
- * 签名对象
- * @param paySignKey
- * 支付API的密钥请注意排序放进去的是put("appKey",
- * paySignKey)
- * @return
- */
- public static String paysignSha(Object obj, String paySignKey) {
- Map extra = new HashMap();
- extra.put("appKey", paySignKey);
- return DigestUtil.SHA1(MapUtil.toJoinString(obj, false, true, extra));
- }
-
- /**
- * md5签名(一般用于V3.x支付接口)
- *
- * @param obj
- * 签名对象
- * @param paySignKey
- * 支付API的密钥
- * @return
- */
- public static String paysignMd5(Object obj, String paySignKey) {
- StringBuilder sb = new StringBuilder();
- // a--->string1
- sb.append(MapUtil.toJoinString(obj, false, false, null));
- // b--->
- // 在 string1 最后拼接上 key=paternerKey 得到 stringSignTemp 字符串,并 对
- // stringSignTemp 进行 md5 运算
- // 再将得到的 字符串所有字符转换为大写 ,得到 sign 值 signValue。
- sb.append("&key=").append(paySignKey);
- return DigestUtil.MD5(sb.toString()).toUpperCase();
- }
-
- /**
- * 生成V3.x版本JSAPI支付字符串
- *
- * @param openId
- * 用户ID
- * @param body
- * 订单描述
- * @param orderNo
- * 订单号
- * @param orderFee
- * 订单总额 按实际金额传入即可(元) 构造函数会转换为分
- * @param notifyUrl
- * 支付通知地址
- * @param ip
- * ip地址
- * @param weixinAccount
- * 商户信息
- * @return 支付json串
- * @throws PayException
- */
- public static String createPayJsRequestJsonV3(String openId, String body,
- String orderNo, double orderFee, String notifyUrl, String ip,
- WeixinMpAccount weixinAccount) throws PayException {
- PayPackageV3 payPackage = new PayPackageV3(weixinAccount, openId, body,
- orderNo, orderFee, ip, TradeType.JSAPI);
- payPackage.setNotifyUrl(notifyUrl);
- return createPayJsRequestJsonV3(payPackage, weixinAccount);
- }
-
- /**
- * 生成V3.x版本JSAPI支付字符串
- *
- * @param payPackage
- * 订单信息
- * @param weixinAccount
- * 商户信息
- * @return 支付json串
- * @throws PayException
- */
- public static String createPayJsRequestJsonV3(PayPackageV3 payPackage,
- WeixinMpAccount weixinAccount) throws PayException {
- String paySignKey = weixinAccount.getPaySignKey();
- payPackage.setSign(paysignMd5(payPackage, paySignKey));
- PrePay prePay = createPrePay(payPackage, paySignKey);
- PayRequestV3 jsPayRequest = new PayRequestV3(prePay);
- jsPayRequest.setSignType(SignType.MD5);
- jsPayRequest.setPaySign(paysignMd5(jsPayRequest, paySignKey));
- return JSON.toJSONString(jsPayRequest);
- }
-
- /**
- * 统一下单接口
- * 除被扫支付场景以外,商户系统先调用该接口在微信支付服务后台生成预支付交易单,返回正确的预支付交易回话标识后再按扫码、JSAPI
- * 、APP等不同场景生成交易串调起支付。
- *
- * @param payPackage
- * 包含订单信息的对象
- * @param paySignKey
- * 如果sign为空 则拿paysignkey进行签名
- * @see com.foxinmy.weixin4j.mp.payment.v3.PayPackageV3
- * @see com.foxinmy.weixin4j.mp.payment.v3.PrePay
- * @see 统一下单接口
- * @return 预支付对象
- */
- private final static WeixinHttpClient httpClient = new WeixinHttpClient();
-
- public static PrePay createPrePay(PayPackageV3 payPackage, String paySignKey)
- throws PayException {
- if (StringUtil.isBlank(payPackage.getSign())) {
- payPackage.setSign(paysignMd5(payPackage, paySignKey));
- }
- String payJsRequestXml = XmlStream.toXML(payPackage);
- try {
- WeixinResponse response = httpClient.post(URLConsts.UNIFIEDORDER,
- payJsRequestXml);
- PrePay prePay = response.getAsObject(new TypeReference() {
- });
- if (!prePay.getReturnCode().equalsIgnoreCase(Consts.SUCCESS)) {
- throw new PayException(prePay.getReturnMsg(),
- prePay.getReturnCode());
- }
- if (!prePay.getResultCode().equalsIgnoreCase(Consts.SUCCESS)) {
- throw new PayException(prePay.getResultCode(),
- prePay.getErrCodeDes());
- }
- return prePay;
- } catch (WeixinException e) {
- throw new PayException(e.getErrorCode(), e.getErrorMsg());
- }
- }
-
- /**
- *
- * 生成编辑地址请求
- *
- *
- * err_msg edit_address:ok获取编辑收货地址成功 edit_address:fail获取编辑收货地址失败
- * userName 收货人姓名 telNumber 收货人电话 addressPostalCode 邮编
- * proviceFirstStageName 国标收货地址第一级地址 addressCitySecondStageName
- * 国标收货地址第二级地址 addressCountiesThirdStageName 国标收货地址第三级地址
- * addressDetailInfo 详细收货地址信息 nationalCode 收货地址国家码
- *
- * @param appId
- * 公众号的ID
- * @param url
- * 当前访问页的URL
- * @param accessToken
- * snsapi_base授权时产生的token
- * @return
- */
- public static String createAddressRequestJson(String appId, String url,
- String accessToken) {
- Map map = new HashMap();
- map.put("appId", appId);
- map.put("timeStamp", DateUtil.timestamp2string());
- map.put("nonceStr", RandomUtil.generateString(16));
- map.put("url", url);
- map.put("accessToken", accessToken);
- String sign = paysignSha(map);
- map.remove("url");
- map.remove("accessToken");
- map.put("scope", "jsapi_address");
- map.put("signType", SignType.SHA1.name().toLowerCase());
- map.put("addrSign", sign);
-
- return JSON.toJSONString(map);
- }
-
- /**
- * 创建V2.x NativePay支付链接
- *
- * @param weixinAccount
- * 商户信息
- * @param productId
- * 与订单ID等价
- * @return 支付链接
- */
- public static String createNativePayRequestURLV2(
- WeixinMpAccount weixinAccount, String productId) {
- Map map = new HashMap();
- String timestamp = DateUtil.timestamp2string();
- String noncestr = RandomUtil.generateString(16);
- map.put("appid", weixinAccount.getId());
- map.put("timestamp", timestamp);
- map.put("noncestr", noncestr);
- map.put("productid", productId);
- map.put("appkey", weixinAccount.getPaySignKey());
- String sign = paysignSha(map);
- return String.format(URLConsts.NATIVEURLV2, sign, weixinAccount.getId(),
- productId, timestamp, noncestr);
- }
-
- /**
- * 创建V3.x NativePay支付(扫码支付)链接
- *
- * @param weixinAccount
- * 支付配置信息
- * @param productId
- * 与订单ID等价
- * @return 支付链接
- * @see 扫码支付
- */
- public static String createNativePayRequestURLV3(
- WeixinMpAccount weixinAccount, String productId) {
- Map map = new HashMap();
- String timestamp = DateUtil.timestamp2string();
- String noncestr = RandomUtil.generateString(16);
- map.put("appid", weixinAccount.getId());
- map.put("mch_id", weixinAccount.getMchId());
- map.put("time_stamp", timestamp);
- map.put("nonce_str", noncestr);
- map.put("product_id", productId);
- String sign = paysignMd5(map, weixinAccount.getPaySignKey());
- return String.format(URLConsts.NATIVEURLV3, sign, weixinAccount.getId(),
- weixinAccount.getMchId(), productId, timestamp, noncestr);
- }
-
- /**
- * 创建V2.x NATIVE回调时的响应字符串
- *
- * @param weixinAccount
- * 商户信息
- * @param payPackage
- * 订单信息
- * @return
- */
- public static String createNativePayResponseV2(
- WeixinMpAccount weixinAccount, PayPackageV2 payPackage) {
- NativePayResponseV2 payRequest = new NativePayResponseV2(weixinAccount,
- payPackage);
- Map map = new HashMap();
- String timestamp = DateUtil.timestamp2string();
- String noncestr = RandomUtil.generateString(16);
- map.put("appid", weixinAccount.getId());
- map.put("appkey", weixinAccount.getPaySignKey());
- map.put("timestamp", timestamp);
- map.put("noncestr", noncestr);
- map.put("package", payRequest.getPackageInfo());
- map.put("retcode", payRequest.getRetCode());
- map.put("reterrmsg", payRequest.getRetMsg());
- payRequest.setPaySign(paysignSha(map));
- return XmlStream.toXML(payRequest);
- }
-
- /**
- * 提交被扫支付
- *
- * @param authCode
- * 扫码支付授权码 ,设备读取用户微信中的条码或者二维码信息
- * @param body
- * 商品描述
- * @param attach
- * 附加数据
- * @param orderNo
- * 商户内部唯一订单号
- * @param orderFee
- * 商品总额 单位元
- * @param ip
- * 订单生成的机器 IP
- * @param weixinAccount
- * 商户信息
- * @return 支付的订单信息
- * @see {@link com.foxinmy.weixin4j.mp.payment.PayUtil#createMicroPay(MicroPayPackage, WeixinMpAccount)}
- * @throws WeixinException
- */
- public static com.foxinmy.weixin4j.mp.payment.v3.Order createMicroPay(
- String authCode, String body, String attach, String orderNo,
- double orderFee, String ip, WeixinMpAccount weixinAccount)
- throws WeixinException {
- MicroPayPackage payPackage = new MicroPayPackage(weixinAccount, body,
- attach, orderNo, orderFee, ip, authCode);
- return createMicroPay(payPackage, weixinAccount);
- }
-
- /**
- * 提交被扫支付:收银员使用扫码设备读取微信用户刷卡授权码以后,二维码或条码信息传送至商户收银台,由商户收银台或者商户后台调用该接口发起支付.
- *
- * @param payPackage
- * 订单信息
- * @param weixinAccount
- * 商户信息
- * @return 支付的订单信息
- * @throws WeixinException
- * @see com.foxinmy.weixin4j.mp.payment.v3.Order
- * @see 提交被扫支付API
- */
- public static com.foxinmy.weixin4j.mp.payment.v3.Order createMicroPay(
- MicroPayPackage payPackage, WeixinMpAccount weixinAccount)
- throws WeixinException {
- String sign = paysignMd5(payPackage, weixinAccount.getPaySignKey());
- payPackage.setSign(sign);
- String para = XmlStream.toXML(payPackage);
- WeixinResponse response = httpClient.post(URLConsts.MICROPAYURL, para);
- return response
- .getAsObject(new TypeReference() {
- });
- }
-
- private static String JSAPIV2() {
- WeixinMpAccount weixinAccount = JSON.parseObject(
- ConfigUtil.getValue("account"), WeixinMpAccount.class);
- return createPayJsRequestJsonV2("支付测试", "JSAPI01", 0.01d, "127.0.0.0",
- "http://127.0.0.1/jsapi/notify", weixinAccount);
- }
-
- private static String NATIVEV2() {
- WeixinMpAccount weixinAccount = JSON.parseObject(
- ConfigUtil.getValue("account"), WeixinMpAccount.class);
- return createNativePayRequestURLV2(weixinAccount, "P1");
- }
-
- private static String JSAPIV3() throws PayException {
- WeixinMpAccount weixinAccount = JSON.parseObject(
- ConfigUtil.getValue("account"), WeixinMpAccount.class);
- return createPayJsRequestJsonV3("oyFLst1bqtuTcxK-ojF8hOGtLQao", "支付测试",
- "JSAPI01", 0.01d, "http://127.0.0.1/jsapi/notify", "127.0.0.0",
- weixinAccount);
- }
-
- private static String NATIVEV3() {
- WeixinMpAccount weixinAccount = JSON.parseObject(
- ConfigUtil.getValue("account"), WeixinMpAccount.class);
- return createNativePayRequestURLV3(weixinAccount, "P1");
- }
-
- public static void main(String[] args) throws PayException {
- // V2版本下的JS支付
- System.out.println(JSAPIV2());
- // V2版本下的原生支付
- System.out.println(NATIVEV2());
- // V3版本下的JS支付
- System.out.println(JSAPIV3());
- // V3版本下的原生支付
- System.out.println(NATIVEV3());
- }
-}
diff --git a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/payment/v2/ApiResult.java b/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/payment/v2/ApiResultV2.java
similarity index 94%
rename from weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/payment/v2/ApiResult.java
rename to weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/payment/v2/ApiResultV2.java
index a347d6fa..bbb4c6d9 100644
--- a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/payment/v2/ApiResult.java
+++ b/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/payment/v2/ApiResultV2.java
@@ -8,12 +8,12 @@ import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import com.alibaba.fastjson.annotation.JSONField;
-import com.foxinmy.weixin4j.mp.type.SignType;
+import com.foxinmy.weixin4j.type.SignType;
/**
* 调用V2.x接口返回的公用字段
*
- * @className ApiResult
+ * @className ApiResultV2
* @author jy
* @date 2014年12月30日
* @since JDK 1.7
@@ -21,7 +21,7 @@ import com.foxinmy.weixin4j.mp.type.SignType;
*/
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
-public class ApiResult implements Serializable {
+public class ApiResultV2 implements Serializable {
private static final long serialVersionUID = -2876899595643466203L;
/**
@@ -63,7 +63,7 @@ public class ApiResult implements Serializable {
@XmlElement(name = "sign_type")
private SignType signType;
- protected ApiResult() {
+ protected ApiResultV2() {
// jaxb required
}
diff --git a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/payment/v2/JsPayRequestV2.java b/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/payment/v2/JsPayRequestV2.java
index 4a3c0885..2f0bcb32 100644
--- a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/payment/v2/JsPayRequestV2.java
+++ b/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/payment/v2/JsPayRequestV2.java
@@ -7,8 +7,8 @@ import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;
import com.alibaba.fastjson.annotation.JSONField;
-import com.foxinmy.weixin4j.mp.model.WeixinMpAccount;
-import com.foxinmy.weixin4j.mp.payment.PayRequest;
+import com.foxinmy.weixin4j.model.WeixinPayAccount;
+import com.foxinmy.weixin4j.payment.PayRequest;
import com.foxinmy.weixin4j.util.DigestUtil;
import com.foxinmy.weixin4j.util.MapUtil;
@@ -37,7 +37,7 @@ public class JsPayRequestV2 extends PayRequest {
// jaxb required
}
- public JsPayRequestV2(WeixinMpAccount weixinAccount, PayPackageV2 payPackage) {
+ public JsPayRequestV2(WeixinPayAccount weixinAccount, PayPackageV2 payPackage) {
this.setAppId(weixinAccount.getId());
this.setPackageInfo(package2string(payPackage,
weixinAccount.getPartnerKey()));
diff --git a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/payment/v2/NativePayNotifyV2.java b/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/payment/v2/NativePayNotifyV2.java
index dab48ea8..b9d918e8 100644
--- a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/payment/v2/NativePayNotifyV2.java
+++ b/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/payment/v2/NativePayNotifyV2.java
@@ -5,7 +5,7 @@ import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
-import com.foxinmy.weixin4j.mp.payment.JsPayNotify;
+import com.foxinmy.weixin4j.payment.JsPayNotify;
/**
* V2 Native支付回调时POST的信息
diff --git a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/payment/v2/NativePayResponseV2.java b/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/payment/v2/NativePayResponseV2.java
index 7461e54e..d15dd871 100644
--- a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/payment/v2/NativePayResponseV2.java
+++ b/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/payment/v2/NativePayResponseV2.java
@@ -5,7 +5,7 @@ import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
-import com.foxinmy.weixin4j.mp.model.WeixinMpAccount;
+import com.foxinmy.weixin4j.model.WeixinPayAccount;
/**
* V2 Native支付时的回调响应
@@ -36,7 +36,7 @@ public class NativePayResponseV2 extends JsPayRequestV2 {
// jaxb required
}
- public NativePayResponseV2(WeixinMpAccount weixinAccount,
+ public NativePayResponseV2(WeixinPayAccount weixinAccount,
PayPackageV2 payPackage) {
super(weixinAccount, payPackage);
this.retCode = "0";
diff --git a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/payment/v2/Order.java b/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/payment/v2/OrderV2.java
similarity index 93%
rename from weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/payment/v2/Order.java
rename to weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/payment/v2/OrderV2.java
index a2ecd570..c73b3c1d 100644
--- a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/payment/v2/Order.java
+++ b/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/payment/v2/OrderV2.java
@@ -3,20 +3,20 @@ package com.foxinmy.weixin4j.mp.payment.v2;
import java.util.Date;
import com.alibaba.fastjson.annotation.JSONField;
-import com.foxinmy.weixin4j.mp.type.CurrencyType;
-import com.foxinmy.weixin4j.mp.type.TradeState;
+import com.foxinmy.weixin4j.type.CurrencyType;
+import com.foxinmy.weixin4j.type.TradeState;
import com.foxinmy.weixin4j.util.DateUtil;
/**
* V2订单信息
*
- * @className Order
+ * @className OrderV2
* @author jy
* @date 2014年11月2日
* @since JDK 1.7
* @see
*/
-public class Order extends ApiResult {
+public class OrderV2 extends ApiResultV2 {
private static final long serialVersionUID = 4543552984506609920L;
diff --git a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/payment/v2/PayFeedback.java b/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/payment/v2/PayFeedback.java
index fd7f3975..b66d4405 100644
--- a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/payment/v2/PayFeedback.java
+++ b/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/payment/v2/PayFeedback.java
@@ -5,7 +5,7 @@ import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
-import com.foxinmy.weixin4j.mp.payment.PayBaseInfo;
+import com.foxinmy.weixin4j.payment.PayBaseInfo;
/**
* V2维权POST的数据
diff --git a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/payment/v2/PayPackageV2.java b/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/payment/v2/PayPackageV2.java
index 6d14ad61..baa99a69 100644
--- a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/payment/v2/PayPackageV2.java
+++ b/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/payment/v2/PayPackageV2.java
@@ -8,7 +8,7 @@ import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import com.alibaba.fastjson.annotation.JSONField;
-import com.foxinmy.weixin4j.mp.payment.PayPackage;
+import com.foxinmy.weixin4j.payment.PayPackage;
import com.foxinmy.weixin4j.util.DateUtil;
/**
diff --git a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/payment/v2/PayUtil2.java b/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/payment/v2/PayUtil2.java
new file mode 100644
index 00000000..835e3fbd
--- /dev/null
+++ b/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/payment/v2/PayUtil2.java
@@ -0,0 +1,172 @@
+package com.foxinmy.weixin4j.mp.payment.v2;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import com.alibaba.fastjson.JSON;
+import com.foxinmy.weixin4j.exception.PayException;
+import com.foxinmy.weixin4j.model.WeixinPayAccount;
+import com.foxinmy.weixin4j.type.SignType;
+import com.foxinmy.weixin4j.util.ConfigUtil;
+import com.foxinmy.weixin4j.util.DateUtil;
+import com.foxinmy.weixin4j.util.DigestUtil;
+import com.foxinmy.weixin4j.util.MapUtil;
+import com.foxinmy.weixin4j.util.RandomUtil;
+import com.foxinmy.weixin4j.util.StringUtil;
+import com.foxinmy.weixin4j.xml.XmlStream;
+
+/**
+ * V2支付工具类(JSAPI,NATIVE)
+ *
+ * @className PayUtil2
+ * @author jy
+ * @date 2014年10月28日
+ * @since JDK 1.7
+ * @see
+ */
+public class PayUtil2 {
+ /**
+ * 生成V2.x版本JSAPI支付字符串
+ *
+ * @param payPackage
+ * 订单信息
+ * @param weixinAccount
+ * 商户信息
+ * @return 支付json串
+ */
+ public static String createPayJsRequestJsonV2(PayPackageV2 payPackage,
+ WeixinPayAccount weixinAccount) {
+ if (StringUtil.isBlank(payPackage.getPartner())) {
+ payPackage.setPartner(weixinAccount.getPartnerId());
+ }
+ JsPayRequestV2 jsPayRequest = new JsPayRequestV2(weixinAccount,
+ payPackage);
+ jsPayRequest.setPaySign(paysignSha(jsPayRequest,
+ weixinAccount.getPaySignKey()));
+ jsPayRequest.setSignType(SignType.SHA1);
+ return JSON.toJSONString(jsPayRequest);
+ }
+
+ /**
+ * 生成V2.x版本JSAPI支付字符串
+ *
+ * @param body
+ * 支付详情
+ * @param orderNo
+ * 订单号
+ * @param orderFee
+ * 订单总额 按实际金额传入即可(元) 构造函数会转换为分
+ * @param ip
+ * @param weixinAccount
+ * 商户信息
+ * @return 支付json串
+ */
+ public static String createPayJsRequestJsonV2(String body, String orderNo,
+ double orderFee, String notify_url, String ip,
+ WeixinPayAccount weixinAccount) {
+ PayPackageV2 payPackage = new PayPackageV2(body, orderNo, orderFee,
+ notify_url, ip);
+ payPackage.setPartner(weixinAccount.getPartnerId());
+ return createPayJsRequestJsonV2(payPackage, weixinAccount);
+ }
+
+ /**
+ * sha签名(一般用于V2.x支付接口)
+ *
+ * @param obj
+ * 签名对象
+ * @return
+ */
+ public static String paysignSha(Object obj) {
+ return DigestUtil.SHA1(MapUtil.toJoinString(obj, false, true, null));
+ }
+
+ /**
+ * sha签名(一般用于V2.x支付接口)
+ *
+ * @param obj
+ * 签名对象
+ * @param paySignKey
+ * 支付API的密钥请注意排序放进去的是put("appKey",
+ * paySignKey)
+ * @return
+ */
+ public static String paysignSha(Object obj, String paySignKey) {
+ Map extra = new HashMap();
+ extra.put("appKey", paySignKey);
+ return DigestUtil.SHA1(MapUtil.toJoinString(obj, false, true, extra));
+ }
+
+ /**
+ * 创建V2.x NativePay支付链接
+ *
+ * @param weixinAccount
+ * 商户信息
+ * @param productId
+ * 与订单ID等价
+ * @return 支付链接
+ */
+ public static String createNativePayRequestURLV2(
+ WeixinPayAccount weixinAccount, String productId) {
+ Map map = new HashMap();
+ String timestamp = DateUtil.timestamp2string();
+ String noncestr = RandomUtil.generateString(16);
+ map.put("appid", weixinAccount.getId());
+ map.put("timestamp", timestamp);
+ map.put("noncestr", noncestr);
+ map.put("productid", productId);
+ map.put("appkey", weixinAccount.getPaySignKey());
+ String sign = paysignSha(map);
+ return String
+ .format("weixin://wxpay/bizpayurl?sign=%s&appid=%s&productid=%s×tamp=%s&nocestr=%s",
+ sign, weixinAccount.getId(), productId, timestamp,
+ noncestr);
+ }
+
+ /**
+ * 创建V2.x NATIVE回调时的响应字符串
+ *
+ * @param weixinAccount
+ * 商户信息
+ * @param payPackage
+ * 订单信息
+ * @return
+ */
+ public static String createNativePayResponseV2(
+ WeixinPayAccount weixinAccount, PayPackageV2 payPackage) {
+ NativePayResponseV2 payRequest = new NativePayResponseV2(weixinAccount,
+ payPackage);
+ Map map = new HashMap();
+ String timestamp = DateUtil.timestamp2string();
+ String noncestr = RandomUtil.generateString(16);
+ map.put("appid", weixinAccount.getId());
+ map.put("appkey", weixinAccount.getPaySignKey());
+ map.put("timestamp", timestamp);
+ map.put("noncestr", noncestr);
+ map.put("package", payRequest.getPackageInfo());
+ map.put("retcode", payRequest.getRetCode());
+ map.put("reterrmsg", payRequest.getRetMsg());
+ payRequest.setPaySign(paysignSha(map));
+ return XmlStream.toXML(payRequest);
+ }
+
+ private static String JSAPIV2() {
+ WeixinPayAccount weixinAccount = JSON.parseObject(
+ ConfigUtil.getValue("account"), WeixinPayAccount.class);
+ return createPayJsRequestJsonV2("支付测试", "JSAPI01", 0.01d, "127.0.0.0",
+ "http://127.0.0.1/jsapi/notify", weixinAccount);
+ }
+
+ private static String NATIVEV2() {
+ WeixinPayAccount weixinAccount = JSON.parseObject(
+ ConfigUtil.getValue("account"), WeixinPayAccount.class);
+ return createNativePayRequestURLV2(weixinAccount, "P1");
+ }
+
+ public static void main(String[] args) throws PayException {
+ // V2版本下的JS支付
+ System.out.println(JSAPIV2());
+ // V2版本下的原生支付
+ System.out.println(NATIVEV2());
+ }
+}
diff --git a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/payment/v2/PayWarn.java b/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/payment/v2/PayWarn.java
index 5b566b81..1f1bcd5f 100644
--- a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/payment/v2/PayWarn.java
+++ b/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/payment/v2/PayWarn.java
@@ -5,7 +5,7 @@ import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
-import com.foxinmy.weixin4j.mp.payment.PayBaseInfo;
+import com.foxinmy.weixin4j.payment.PayBaseInfo;
/**
* V2告警通知
diff --git a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/payment/v2/RefundDetail.java b/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/payment/v2/RefundDetailV2.java
similarity index 94%
rename from weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/payment/v2/RefundDetail.java
rename to weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/payment/v2/RefundDetailV2.java
index 517538d9..aa2acc0f 100644
--- a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/payment/v2/RefundDetail.java
+++ b/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/payment/v2/RefundDetailV2.java
@@ -6,14 +6,14 @@ import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import com.alibaba.fastjson.annotation.JSONField;
-import com.foxinmy.weixin4j.mp.type.RefundChannel;
-import com.foxinmy.weixin4j.mp.type.RefundStatus;
+import com.foxinmy.weixin4j.type.RefundChannel;
+import com.foxinmy.weixin4j.type.RefundStatus;
import com.foxinmy.weixin4j.util.StringUtil;
/**
* V2退款详细
*
- * @className RefundDetail
+ * @className RefundDetailV2
* @author jy
* @date 2014年11月6日
* @since JDK 1.7
@@ -21,7 +21,7 @@ import com.foxinmy.weixin4j.util.StringUtil;
*/
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
-public class RefundDetail extends ApiResult {
+public class RefundDetailV2 extends ApiResultV2 {
private static final long serialVersionUID = -3687863914168618620L;
@@ -68,7 +68,7 @@ public class RefundDetail extends ApiResult {
@JSONField(name = "reccv_user_name")
private String reccvUserName;
- protected RefundDetail() {
+ protected RefundDetailV2() {
// jaxb required
}
diff --git a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/payment/v2/RefundRecord.java b/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/payment/v2/RefundRecordV2.java
similarity index 82%
rename from weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/payment/v2/RefundRecord.java
rename to weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/payment/v2/RefundRecordV2.java
index 33eb9672..6bdda372 100644
--- a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/payment/v2/RefundRecord.java
+++ b/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/payment/v2/RefundRecordV2.java
@@ -13,15 +13,15 @@ import com.foxinmy.weixin4j.xml.ListsuffixResult;
/**
* V2退款记录
*
- * @className RefundRecord
+ * @className RefundRecordV2
* @author jy
* @date 2014年11月1日
* @since JDK 1.7
- * @see com.foxinmy.weixin4j.mp.payment.v2.RefundDetail
+ * @see com.foxinmy.weixin4j.mp.payment.v2.RefundDetailV2
*/
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
-public class RefundRecord extends ApiResult {
+public class RefundRecordV2 extends ApiResultV2 {
private static final long serialVersionUID = -2971132874939642721L;
@@ -47,9 +47,9 @@ public class RefundRecord extends ApiResult {
* 退款详情
*/
@ListsuffixResult
- private List refundList;
+ private List refundList;
- protected RefundRecord() {
+ protected RefundRecordV2() {
// jaxb required
}
@@ -65,11 +65,11 @@ public class RefundRecord extends ApiResult {
return refundCount;
}
- public List getRefundList() {
+ public List getRefundList() {
return refundList;
}
- public void setRefundList(List refundList) {
+ public void setRefundList(List refundList) {
this.refundList = refundList;
}
diff --git a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/payment/v2/RefundResult.java b/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/payment/v2/RefundResultV2.java
similarity index 90%
rename from weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/payment/v2/RefundResult.java
rename to weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/payment/v2/RefundResultV2.java
index 27f235bd..deb8647d 100644
--- a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/payment/v2/RefundResult.java
+++ b/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/payment/v2/RefundResultV2.java
@@ -10,7 +10,7 @@ import com.alibaba.fastjson.annotation.JSONField;
/**
* V2退款申请结果
*
- * @className RefundResult
+ * @className RefundResultV2
* @author jy
* @date 2014年11月6日
* @since JDK 1.7
@@ -18,7 +18,7 @@ import com.alibaba.fastjson.annotation.JSONField;
*/
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
-public class RefundResult extends RefundDetail {
+public class RefundResultV2 extends RefundDetailV2 {
private static final long serialVersionUID = -3687863914168618620L;
@@ -35,7 +35,7 @@ public class RefundResult extends RefundDetail {
@JSONField(name = "out_trade_no")
private String outTradeNo;
- protected RefundResult() {
+ protected RefundResultV2() {
// jaxb required
}
diff --git a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/type/URLConsts.java b/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/type/URLConsts.java
index 767e3d57..a73e758d 100644
--- a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/type/URLConsts.java
+++ b/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/type/URLConsts.java
@@ -19,20 +19,4 @@ public final class URLConsts {
* 公众平台jssdk获取token的url
*/
public static final String JS_TICKET_URL = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=%s&type=jsapi";
- /**
- * 商户平台下统一订单生成的url
- */
- public static final String UNIFIEDORDER = "https://api.mch.weixin.qq.com/pay/unifiedorder";
- /**
- * 商户平台下刷卡支付的url
- */
- public static final String MICROPAYURL = "https://api.mch.weixin.qq.com/pay/micropay";
- /**
- * V2支付下natvie支付的url
- */
- public static final String NATIVEURLV2 = "weixin://wxpay/bizpayurl?sign=%s&appid=%s&productid=%s×tamp=%s&noncestr=%s";
- /**
- * 商户平台(V3)下native支付的url
- */
- public static final String NATIVEURLV3 = "weixin://wxpay/bizpayurl?sign=%s&appid=%s&mch_id=%s&product_id=%s&time_stamp=%s&nonce_str=%s";
}
diff --git a/weixin4j-mp/src/test/java/com/foxinmy/weixin4j/mp/test/CashTest.java b/weixin4j-mp/src/test/java/com/foxinmy/weixin4j/mp/test/CashTest.java
index a908c046..00f3f4e4 100644
--- a/weixin4j-mp/src/test/java/com/foxinmy/weixin4j/mp/test/CashTest.java
+++ b/weixin4j-mp/src/test/java/com/foxinmy/weixin4j/mp/test/CashTest.java
@@ -3,12 +3,12 @@ package com.foxinmy.weixin4j.mp.test;
import org.junit.Test;
import com.foxinmy.weixin4j.exception.WeixinException;
-import com.foxinmy.weixin4j.mp.payment.v3.MPPayment;
-import com.foxinmy.weixin4j.mp.payment.v3.MPPaymentResult;
-import com.foxinmy.weixin4j.mp.payment.v3.Redpacket;
-import com.foxinmy.weixin4j.mp.payment.v3.RedpacketRecord;
-import com.foxinmy.weixin4j.mp.payment.v3.RedpacketSendResult;
-import com.foxinmy.weixin4j.mp.type.MPPaymentCheckNameType;
+import com.foxinmy.weixin4j.payment.mch.MPPayment;
+import com.foxinmy.weixin4j.payment.mch.MPPaymentResult;
+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.type.MPPaymentCheckNameType;
/**
* 现金发放测试
diff --git a/weixin4j-mp/src/test/java/com/foxinmy/weixin4j/mp/test/CouponTest.java b/weixin4j-mp/src/test/java/com/foxinmy/weixin4j/mp/test/CouponTest.java
index 4e2caa6d..7232c019 100644
--- a/weixin4j-mp/src/test/java/com/foxinmy/weixin4j/mp/test/CouponTest.java
+++ b/weixin4j-mp/src/test/java/com/foxinmy/weixin4j/mp/test/CouponTest.java
@@ -8,12 +8,11 @@ import org.junit.Test;
import com.foxinmy.weixin4j.exception.WeixinException;
import com.foxinmy.weixin4j.model.Consts;
-import com.foxinmy.weixin4j.mp.WeixinPayProxy;
-import com.foxinmy.weixin4j.mp.model.WeixinMpAccount;
-import com.foxinmy.weixin4j.mp.payment.coupon.CouponDetail;
-import com.foxinmy.weixin4j.mp.payment.coupon.CouponResult;
-import com.foxinmy.weixin4j.mp.payment.coupon.CouponStock;
-import com.foxinmy.weixin4j.token.FileTokenStorager;
+import com.foxinmy.weixin4j.model.WeixinPayAccount;
+import com.foxinmy.weixin4j.payment.WeixinPayProxy;
+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.util.DateUtil;
/**
@@ -27,12 +26,10 @@ import com.foxinmy.weixin4j.util.DateUtil;
*/
public class CouponTest {
protected final static WeixinPayProxy WEIXINPAY;
- protected final static WeixinMpAccount ACCOUNT;
+ protected final static WeixinPayAccount ACCOUNT;
static {
- ACCOUNT = new WeixinMpAccount("appid",
- "appsecret",
- "paysign", "mchid");
- WEIXINPAY = new WeixinPayProxy(ACCOUNT, new FileTokenStorager());
+ ACCOUNT = new WeixinPayAccount("appid", "appsecret", "paysign", "mchid");
+ WEIXINPAY = new WeixinPayProxy(ACCOUNT);
}
protected final File caFile = new File("证书文件路径(*.p12)");
diff --git a/weixin4j-mp/src/test/java/com/foxinmy/weixin4j/mp/test/PayTest.java b/weixin4j-mp/src/test/java/com/foxinmy/weixin4j/mp/test/PayTest.java
index ebc1f227..16790caa 100644
--- a/weixin4j-mp/src/test/java/com/foxinmy/weixin4j/mp/test/PayTest.java
+++ b/weixin4j-mp/src/test/java/com/foxinmy/weixin4j/mp/test/PayTest.java
@@ -10,48 +10,50 @@ import org.junit.Test;
import com.foxinmy.weixin4j.exception.PayException;
import com.foxinmy.weixin4j.exception.WeixinException;
import com.foxinmy.weixin4j.http.weixin.XmlResult;
-import com.foxinmy.weixin4j.mp.WeixinPayProxy;
-import com.foxinmy.weixin4j.mp.model.WeixinMpAccount;
-import com.foxinmy.weixin4j.mp.payment.PayUtil;
-import com.foxinmy.weixin4j.mp.payment.v3.ApiResult;
-import com.foxinmy.weixin4j.mp.payment.v3.Order;
-import com.foxinmy.weixin4j.mp.payment.v3.PayPackageV3;
-import com.foxinmy.weixin4j.mp.payment.v3.PrePay;
-import com.foxinmy.weixin4j.mp.type.IdQuery;
-import com.foxinmy.weixin4j.mp.type.IdType;
-import com.foxinmy.weixin4j.mp.type.TradeType;
+import com.foxinmy.weixin4j.model.WeixinPayAccount;
+import com.foxinmy.weixin4j.mp.api.Pay2Api;
+import com.foxinmy.weixin4j.payment.PayUtil;
+import com.foxinmy.weixin4j.payment.WeixinPayProxy;
+import com.foxinmy.weixin4j.payment.mch.ApiResult;
+import com.foxinmy.weixin4j.payment.mch.MchPayPackage;
+import com.foxinmy.weixin4j.payment.mch.Order;
+import com.foxinmy.weixin4j.payment.mch.PrePay;
import com.foxinmy.weixin4j.token.FileTokenStorager;
+import com.foxinmy.weixin4j.type.IdQuery;
+import com.foxinmy.weixin4j.type.IdType;
+import com.foxinmy.weixin4j.type.TradeType;
public class PayTest {
- private final static WeixinPayProxy PAY2;
+ private final static Pay2Api PAY2;
private final static WeixinPayProxy PAY3;
- private final static WeixinMpAccount ACCOUNT2;
- private final static WeixinMpAccount ACCOUNT3;
+ private final static WeixinPayAccount ACCOUNT2;
+ private final static WeixinPayAccount ACCOUNT3;
static {
- ACCOUNT2 = new WeixinMpAccount("请填入v2版本的appid", "请填入v2版本的appSecret",
+ ACCOUNT2 = new WeixinPayAccount("请填入v2版本的appid", "请填入v2版本的appSecret",
"请填入v3版本的paysignkey", "请填入v2版本的partnerId", "请填入v2版本的partnerKey");
- PAY2 = new WeixinPayProxy(ACCOUNT2, new FileTokenStorager());
- ACCOUNT3 = new WeixinMpAccount("请填入v3版本的appid", "请填入v3版本的appSecret",
+ PAY2 = new Pay2Api(ACCOUNT2, new FileTokenStorager());
+ ACCOUNT3 = new WeixinPayAccount("请填入v3版本的appid", "请填入v3版本的appSecret",
"请填入v3版本的paysignkey", "请填入v3版本的mchid");
- PAY3 = new WeixinPayProxy(ACCOUNT3, new FileTokenStorager());
+ PAY3 = new WeixinPayProxy(ACCOUNT3);
}
@Test
public void orderQueryV2() throws WeixinException {
- System.err.println(PAY2.orderQueryV2("D14110500021"));
+ System.err.println(PAY2.orderQuery(new IdQuery("D14110500021",
+ IdType.REFUNDNO)));
}
@Test
public void refundV2() throws WeixinException {
File caFile = new File("签名文件,如12333.pfx");
IdQuery idQuery = new IdQuery("D15020300005", IdType.TRADENO);
- System.err.println(PAY2.refundV2(caFile, idQuery, "1422925555037", 16d,
- 16d, "1221928801", "111111", null, null, null));
+ System.err.println(PAY2.refundApply(caFile, idQuery, "1422925555037",
+ 16d, 16d, "1221928801", "111111", null, null, null));
}
@Test
public void refundQueryV2() throws WeixinException {
- System.err.println(PAY2.refundQueryV2(new IdQuery("D14123000004",
+ System.err.println(PAY2.refundQuery(new IdQuery("D14123000004",
IdType.TRADENO)));
refundQueryV3();
}
@@ -68,7 +70,7 @@ public class PayTest {
@Test
public void orderQueryV3() throws WeixinException {
- Order order = PAY3.orderQueryV3(new IdQuery("T0002", IdType.TRADENO));
+ Order order = PAY3.orderQuery(new IdQuery("T0002", IdType.TRADENO));
System.err.println(order);
String sign = order.getSign();
order.setSign(null);
@@ -80,7 +82,7 @@ public class PayTest {
@Test
public void refundQueryV3() throws WeixinException {
- com.foxinmy.weixin4j.mp.payment.v3.RefundRecord record = PAY3
+ com.foxinmy.weixin4j.payment.mch.RefundRecord record = PAY3
.refundQueryV3(new IdQuery("TT_1427183696238", IdType.TRADENO));
System.err.println(record);
// 这里的验证签名需要把details循环拼接
@@ -108,9 +110,10 @@ public class PayTest {
public void refundV3() throws WeixinException {
File caFile = new File("签名文件如123.p12");
IdQuery idQuery = new IdQuery("TT_1427183696238", IdType.TRADENO);
- com.foxinmy.weixin4j.mp.payment.v3.RefundResult result = PAY3.refundV3(
- caFile, idQuery, "TT_R" + System.currentTimeMillis(), 0.01d,
- 0.01d, null, "10020674");
+ com.foxinmy.weixin4j.payment.mch.RefundResult result = PAY3
+ .refundApply(caFile, idQuery,
+ "TT_R" + System.currentTimeMillis(), 0.01d, 0.01d,
+ null, "10020674");
System.err.println(result);
String sign = result.getSign();
result.setSign(null);
@@ -122,7 +125,7 @@ public class PayTest {
@Test
public void nativeV3() throws WeixinException {
- PayPackageV3 payPackageV3 = new PayPackageV3(ACCOUNT3,
+ MchPayPackage payPackageV3 = new MchPayPackage(ACCOUNT3,
"oyFLst1bqtuTcxK-ojF8hOGtLQao", "native测试", "T0001", 0.1d,
"127.0.0.1", TradeType.NATIVE);
payPackageV3.setProductId("0001");
diff --git a/weixin4j-mp/src/test/java/com/foxinmy/weixin4j/mp/test/XmlstreamTest.java b/weixin4j-mp/src/test/java/com/foxinmy/weixin4j/mp/test/XmlstreamTest.java
index 0e1bca42..80079b97 100644
--- a/weixin4j-mp/src/test/java/com/foxinmy/weixin4j/mp/test/XmlstreamTest.java
+++ b/weixin4j-mp/src/test/java/com/foxinmy/weixin4j/mp/test/XmlstreamTest.java
@@ -6,8 +6,8 @@ import java.util.HashMap;
import java.util.Map;
import com.foxinmy.weixin4j.model.Token;
-import com.foxinmy.weixin4j.mp.payment.v2.RefundRecord;
-import com.foxinmy.weixin4j.mp.payment.v3.Order;
+import com.foxinmy.weixin4j.mp.payment.v2.RefundRecordV2;
+import com.foxinmy.weixin4j.payment.mch.Order;
import com.foxinmy.weixin4j.xml.ListsuffixResultDeserializer;
import com.foxinmy.weixin4j.xml.XmlStream;
@@ -64,7 +64,7 @@ public class XmlstreamTest {
sb.toString(), Order.class));
}
- public static RefundRecord xml2refundRecordV2() throws Exception {
+ public static RefundRecordV2 xml2refundRecordV2() throws Exception {
StringBuffer sb = new StringBuffer();
try {
BufferedReader br = new BufferedReader(new FileReader(
@@ -78,7 +78,7 @@ public class XmlstreamTest {
}
return ListsuffixResultDeserializer.deserialize(sb.toString(),
- RefundRecord.class);
+ RefundRecordV2.class);
}
public static void xml2refundRecordV3() throws Exception {
@@ -96,7 +96,7 @@ public class XmlstreamTest {
}
System.err.println(ListsuffixResultDeserializer.deserialize(
sb.toString(),
- com.foxinmy.weixin4j.mp.payment.v3.RefundRecord.class));
+ com.foxinmy.weixin4j.payment.mch.RefundRecord.class));
}
public static void main(String[] args) throws Exception {
diff --git a/weixin4j-qy/README.md b/weixin4j-qy/README.md
index 883da992..14eeac8e 100644
--- a/weixin4j-qy/README.md
+++ b/weixin4j-qy/README.md
@@ -26,6 +26,12 @@ weixin4j-qy
* OauthApi `oauth授权登陆API`
* SuiteApi `第三方应用API`
+
+ * Pay3Api `商户平台支付API`
+
+ * CouponApi `代金券API`
+
+ * CashApi `现金API`
如何使用
--------