mirror of
https://gitee.com/egzosn/pay-java-parent.git
synced 2026-06-20 06:22:27 +08:00
分账功能实现
This commit is contained in:
@@ -0,0 +1,36 @@
|
||||
package com.egzosn.pay.wx.v3.api;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
import com.egzosn.pay.common.bean.PayOrder;
|
||||
|
||||
/**
|
||||
* 分账服务
|
||||
* @author Egan
|
||||
* <pre>
|
||||
* email egan@egzosn.com
|
||||
* date 2021/10/6
|
||||
* </pre>
|
||||
*/
|
||||
public interface ProfitSharingService {
|
||||
|
||||
/**
|
||||
* 添加分账接收方
|
||||
* @param order 添加分账
|
||||
* @return 结果
|
||||
*/
|
||||
Map<String, Object> add(PayOrder order);
|
||||
/**
|
||||
* 删除分账接收方
|
||||
* @param order 删除分账
|
||||
* @return 结果
|
||||
*/
|
||||
Map<String, Object> delete(PayOrder order);
|
||||
/**
|
||||
* 解冻剩余资金
|
||||
* @param order 解冻
|
||||
* @return 结果
|
||||
*/
|
||||
Map<String, Object> unfreeze(PayOrder order);
|
||||
|
||||
}
|
||||
@@ -6,7 +6,7 @@ import java.util.Map;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.alibaba.fastjson.serializer.SerializerFeature;
|
||||
import com.egzosn.pay.common.bean.CloseOrder;
|
||||
import com.egzosn.pay.common.bean.AssistOrder;
|
||||
import com.egzosn.pay.common.bean.Order;
|
||||
import com.egzosn.pay.common.bean.OrderParaStructure;
|
||||
import com.egzosn.pay.common.bean.PayMessage;
|
||||
@@ -26,8 +26,8 @@ import com.egzosn.pay.wx.v3.utils.WxConst;
|
||||
*
|
||||
* @author egan
|
||||
* <pre>
|
||||
* email egzosn@gmail.com
|
||||
* date 2016-5-18 14:09:01
|
||||
* email egan@egzosn.com
|
||||
* date 2021/10/6
|
||||
* </pre>
|
||||
*/
|
||||
public class WxCombinePayService extends WxPayService {
|
||||
@@ -114,9 +114,18 @@ public class WxCombinePayService extends WxPayService {
|
||||
*/
|
||||
@Override
|
||||
public Map<String, Object> query(String transactionId, String outTradeNo) {
|
||||
return getAssistService().doExecute("", WxTransactionType.COMBINE_TRANSACTION, outTradeNo);
|
||||
return query(new AssistOrder(outTradeNo));
|
||||
}
|
||||
/**
|
||||
* 交易查询接口
|
||||
*
|
||||
* @param assistOrder 查询条件
|
||||
* @return 返回查询回来的结果集,支付方原值返回
|
||||
*/
|
||||
@Override
|
||||
public Map<String, Object> query(AssistOrder assistOrder) {
|
||||
return getAssistService().doExecute("", WxTransactionType.COMBINE_TRANSACTION, assistOrder.getOutTradeNo());
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 交易关闭接口
|
||||
@@ -133,16 +142,16 @@ public class WxCombinePayService extends WxPayService {
|
||||
/**
|
||||
* 交易关闭接口
|
||||
*
|
||||
* @param closeOrder 关闭订单
|
||||
* @param assistOrder 关闭订单
|
||||
* @return 返回支付方交易关闭后的结果
|
||||
*/
|
||||
@Override
|
||||
public Map<String, Object> close(CloseOrder closeOrder) {
|
||||
public Map<String, Object> close(AssistOrder assistOrder) {
|
||||
Map<String, Object> parameters = new MapGen<String, Object>(WxConst.COMBINE_APPID, payConfigStorage.getAppId())
|
||||
.keyValue(WxConst.SUB_ORDERS, closeOrder.getAttr(WxConst.SUB_ORDERS))
|
||||
.keyValue(WxConst.SUB_ORDERS, assistOrder.getAttr(WxConst.SUB_ORDERS))
|
||||
.getAttr();
|
||||
String requestBody = JSON.toJSONString(parameters, SerializerFeature.WriteMapNullValue);
|
||||
return getAssistService().doExecute(requestBody, WxTransactionType.COMBINE_CLOSE, closeOrder.getOutTradeNo());
|
||||
return getAssistService().doExecute(requestBody, WxTransactionType.COMBINE_CLOSE, assistOrder.getOutTradeNo());
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -3,8 +3,6 @@ package com.egzosn.pay.wx.v3.api;
|
||||
import java.util.HashMap;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.Map;
|
||||
import java.util.TreeMap;
|
||||
|
||||
|
||||
import com.egzosn.pay.common.bean.Order;
|
||||
import com.egzosn.pay.common.bean.OrderParaStructure;
|
||||
@@ -56,7 +54,7 @@ public class WxParameterStructure {
|
||||
public void loadSettleInfo(Map<String, Object> parameters, PayOrder order) {
|
||||
Object profitSharing = order.getAttr("profit_sharing");
|
||||
if (null != profitSharing) {
|
||||
Map<String, Object> settleInfo = new MapGen<String, Object>("profit_sharing", profitSharing).getAttr();
|
||||
Map<String, Object> settleInfo = new MapGen<>("profit_sharing", profitSharing).getAttr();
|
||||
parameters.put("settle_info", settleInfo);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -21,8 +21,9 @@ import static com.egzosn.pay.wx.v3.utils.WxConst.FAILURE;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.egzosn.pay.common.api.BasePayService;
|
||||
import com.egzosn.pay.common.bean.AssistOrder;
|
||||
import com.egzosn.pay.common.bean.BillType;
|
||||
import com.egzosn.pay.common.bean.CloseOrder;
|
||||
|
||||
import com.egzosn.pay.common.bean.CurType;
|
||||
import com.egzosn.pay.common.bean.MethodType;
|
||||
import com.egzosn.pay.common.bean.NoticeParams;
|
||||
@@ -32,6 +33,7 @@ import com.egzosn.pay.common.bean.PayMessage;
|
||||
import com.egzosn.pay.common.bean.PayOrder;
|
||||
import com.egzosn.pay.common.bean.PayOutMessage;
|
||||
import com.egzosn.pay.common.bean.RefundOrder;
|
||||
import com.egzosn.pay.common.bean.RefundResult;
|
||||
import com.egzosn.pay.common.bean.TransactionType;
|
||||
import com.egzosn.pay.common.bean.TransferOrder;
|
||||
import com.egzosn.pay.common.bean.result.PayException;
|
||||
@@ -66,8 +68,8 @@ import com.egzosn.pay.wx.v3.utils.WxConst;
|
||||
*
|
||||
* @author egan
|
||||
* <pre>
|
||||
* email egzosn@gmail.com
|
||||
* date 2016-5-18 14:09:01
|
||||
* email egan@egzosn.com
|
||||
* date 2021/10/6
|
||||
* </pre>
|
||||
*/
|
||||
public class WxPayService extends BasePayService<WxPayConfigStorage> {
|
||||
@@ -111,6 +113,7 @@ public class WxPayService extends BasePayService<WxPayConfigStorage> {
|
||||
|
||||
/**
|
||||
* 辅助api
|
||||
*
|
||||
* @return 辅助api
|
||||
*/
|
||||
public WxPayAssistService getAssistService() {
|
||||
@@ -126,7 +129,18 @@ public class WxPayService extends BasePayService<WxPayConfigStorage> {
|
||||
this.assistService = assistService;
|
||||
}
|
||||
|
||||
/**
|
||||
* 初始化之后执行
|
||||
*/
|
||||
@Override
|
||||
protected void initAfter() {
|
||||
new Thread(() -> {
|
||||
payConfigStorage.loadCertEnvironment();
|
||||
wxParameterStructure = new WxParameterStructure(payConfigStorage);
|
||||
getAssistService();
|
||||
}).start();
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置api服务器地址
|
||||
@@ -223,8 +237,8 @@ public class WxPayService extends BasePayService<WxPayConfigStorage> {
|
||||
Map<String, Object> parameters = wxParameterStructure.getPublicParameters();
|
||||
wxParameterStructure.initPartner(parameters);
|
||||
// 商品描述
|
||||
OrderParaStructure.loadParameters(parameters, "description", order.getSubject());
|
||||
OrderParaStructure.loadParameters(parameters, "description", order.getBody());
|
||||
OrderParaStructure.loadParameters(parameters, WxConst.DESCRIPTION, order.getSubject());
|
||||
OrderParaStructure.loadParameters(parameters, WxConst.DESCRIPTION, order.getBody());
|
||||
// 订单号
|
||||
parameters.put(WxConst.OUT_TRADE_NO, order.getOutTradeNo());
|
||||
//交易结束时间
|
||||
@@ -430,7 +444,19 @@ public class WxPayService extends BasePayService<WxPayConfigStorage> {
|
||||
*/
|
||||
@Override
|
||||
public Map<String, Object> query(String transactionId, String outTradeNo) {
|
||||
return query(new AssistOrder(transactionId, outTradeNo));
|
||||
}
|
||||
|
||||
/**
|
||||
* 交易查询接口
|
||||
*
|
||||
* @param assistOrder 查询条件
|
||||
* @return 返回查询回来的结果集,支付方原值返回
|
||||
*/
|
||||
@Override
|
||||
public Map<String, Object> query(AssistOrder assistOrder) {
|
||||
String transactionId = assistOrder.getTradeNo();
|
||||
String outTradeNo = assistOrder.getOutTradeNo();
|
||||
String parameters = wxParameterStructure.getSpParameters();
|
||||
WxTransactionType transactionType = WxTransactionType.QUERY_TRANSACTION_ID;
|
||||
String uriVariable = transactionId;
|
||||
@@ -438,7 +464,9 @@ public class WxPayService extends BasePayService<WxPayConfigStorage> {
|
||||
transactionType = WxTransactionType.QUERY_OUT_TRADE_NO;
|
||||
uriVariable = outTradeNo;
|
||||
}
|
||||
|
||||
return getAssistService().doExecute(parameters, transactionType, uriVariable);
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -451,22 +479,22 @@ public class WxPayService extends BasePayService<WxPayConfigStorage> {
|
||||
*/
|
||||
@Override
|
||||
public Map<String, Object> close(String transactionId, String outTradeNo) {
|
||||
return close(new CloseOrder(outTradeNo));
|
||||
return close(new AssistOrder(outTradeNo));
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 交易关闭接口
|
||||
*
|
||||
* @param closeOrder 关闭订单
|
||||
* @param assistOrder 关闭订单
|
||||
* @return 返回支付方交易关闭后的结果
|
||||
*/
|
||||
@Override
|
||||
public Map<String, Object> close(CloseOrder closeOrder) {
|
||||
public Map<String, Object> close(AssistOrder assistOrder) {
|
||||
String parameters = wxParameterStructure.getSpParameters();
|
||||
return getAssistService().doExecute(parameters, WxTransactionType.CLOSE, closeOrder.getOutTradeNo());
|
||||
return getAssistService().doExecute(parameters, WxTransactionType.CLOSE, assistOrder.getOutTradeNo());
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 申请退款接口
|
||||
*
|
||||
@@ -474,7 +502,7 @@ public class WxPayService extends BasePayService<WxPayConfigStorage> {
|
||||
* @return 返回支付方申请退款后的结果
|
||||
*/
|
||||
@Override
|
||||
public WxRefundResult refund(RefundOrder refundOrder) {
|
||||
public RefundResult refund(RefundOrder refundOrder) {
|
||||
//获取公共参数
|
||||
Map<String, Object> parameters = wxParameterStructure.initSubMchId(null);
|
||||
|
||||
@@ -538,7 +566,7 @@ public class WxPayService extends BasePayService<WxPayConfigStorage> {
|
||||
Map<String, Object> parameters = new HashMap<>(5);
|
||||
|
||||
//目前只支持日账单
|
||||
parameters.put("bill_date", DateUtils.formatDate(billDate, DateUtils.YYYYMMDD));
|
||||
parameters.put(WxConst.BILL_DATE, DateUtils.formatDate(billDate, DateUtils.YYYY_MM_DD));
|
||||
String fileType = billType.getFileType();
|
||||
OrderParaStructure.loadParameters(parameters, "tar_type", fileType);
|
||||
if (billType instanceof WxAccountType) {
|
||||
@@ -567,7 +595,7 @@ public class WxPayService extends BasePayService<WxPayConfigStorage> {
|
||||
}
|
||||
Map<String, Object> data = new HashMap<>();
|
||||
data.put("file", inputStream);
|
||||
return result;
|
||||
return data;
|
||||
}
|
||||
|
||||
|
||||
@@ -579,7 +607,7 @@ public class WxPayService extends BasePayService<WxPayConfigStorage> {
|
||||
*/
|
||||
@Override
|
||||
public Map<String, Object> transfer(TransferOrder order) {
|
||||
throw new PayErrorException(new WxPayError("", "等待作者实现"));
|
||||
throw new PayErrorException(new WxPayError("", "V3不支持转账"));
|
||||
}
|
||||
|
||||
|
||||
@@ -596,7 +624,7 @@ public class WxPayService extends BasePayService<WxPayConfigStorage> {
|
||||
*/
|
||||
@Override
|
||||
public Map<String, Object> transferQuery(String outNo, String wxTransferType) {
|
||||
throw new PayErrorException(new WxPayError("", "等待作者实现"));
|
||||
throw new PayErrorException(new WxPayError("", "V3不支持转账查询"));
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,499 @@
|
||||
package com.egzosn.pay.wx.v3.api;
|
||||
|
||||
import java.io.InputStream;
|
||||
import java.security.PrivateKey;
|
||||
import java.util.Date;
|
||||
import java.util.Map;
|
||||
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.egzosn.pay.common.bean.AssistOrder;
|
||||
import com.egzosn.pay.common.bean.BillType;
|
||||
import com.egzosn.pay.common.bean.MethodType;
|
||||
import com.egzosn.pay.common.bean.NoticeParams;
|
||||
import com.egzosn.pay.common.bean.NoticeRequest;
|
||||
import com.egzosn.pay.common.bean.OrderParaStructure;
|
||||
import com.egzosn.pay.common.bean.PayMessage;
|
||||
import com.egzosn.pay.common.bean.PayOrder;
|
||||
import com.egzosn.pay.common.bean.PayOutMessage;
|
||||
import com.egzosn.pay.common.bean.RefundOrder;
|
||||
import com.egzosn.pay.common.bean.RefundResult;
|
||||
import com.egzosn.pay.common.bean.TransferOrder;
|
||||
import com.egzosn.pay.common.bean.result.PayException;
|
||||
import com.egzosn.pay.common.exception.PayErrorException;
|
||||
import com.egzosn.pay.common.http.HttpConfigStorage;
|
||||
import com.egzosn.pay.common.http.UriVariables;
|
||||
import com.egzosn.pay.common.util.DateUtils;
|
||||
import com.egzosn.pay.common.util.MapGen;
|
||||
import com.egzosn.pay.common.util.sign.encrypt.RSA2;
|
||||
import com.egzosn.pay.wx.bean.WxPayError;
|
||||
import com.egzosn.pay.wx.bean.WxTransferType;
|
||||
import com.egzosn.pay.wx.v3.bean.WxProfitSharingTransactionType;
|
||||
import com.egzosn.pay.wx.v3.bean.sharing.ProfitSharingBillType;
|
||||
import com.egzosn.pay.wx.v3.bean.sharing.ProfitSharingPayMessage;
|
||||
import com.egzosn.pay.wx.v3.bean.sharing.WxProfitSharingReturnResult;
|
||||
import com.egzosn.pay.wx.v3.utils.WxConst;
|
||||
|
||||
/**
|
||||
* 微信分账API服务
|
||||
*
|
||||
* @author egan
|
||||
* <pre>
|
||||
* email egan@egzosn.com
|
||||
* date 2021/10/6
|
||||
* </pre>
|
||||
*/
|
||||
public class WxProfitSharingService extends WxPayService implements ProfitSharingService {
|
||||
|
||||
/**
|
||||
* 创建支付服务
|
||||
*
|
||||
* @param payConfigStorage 微信对应的支付配置
|
||||
*/
|
||||
public WxProfitSharingService(WxPayConfigStorage payConfigStorage) {
|
||||
super(payConfigStorage);
|
||||
}
|
||||
|
||||
/**
|
||||
* 创建支付服务
|
||||
*
|
||||
* @param payConfigStorage 微信对应的支付配置
|
||||
* @param configStorage 微信对应的网络配置,包含代理配置、ssl证书配置
|
||||
*/
|
||||
public WxProfitSharingService(WxPayConfigStorage payConfigStorage, HttpConfigStorage configStorage) {
|
||||
super(payConfigStorage, configStorage);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 初始化之后执行
|
||||
*/
|
||||
@Override
|
||||
protected void initAfter() {
|
||||
new Thread(() -> {
|
||||
payConfigStorage.loadCertEnvironment();
|
||||
getAssistService();
|
||||
}).start();
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 回调校验
|
||||
*
|
||||
* @param params 回调回来的参数集
|
||||
* @return 签名校验 true通过
|
||||
*/
|
||||
@Override
|
||||
public boolean verify(Map<String, Object> params) {
|
||||
throw new PayErrorException(new WxPayError("", "分账不支持方式"));
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 验签,使用微信平台证书.
|
||||
*
|
||||
* @param noticeParams 通知参数
|
||||
* @return the boolean
|
||||
*/
|
||||
public boolean verify(NoticeParams noticeParams) {
|
||||
throw new PayErrorException(new WxPayError("", "分账不支持方式"));
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 微信统一下单接口
|
||||
*
|
||||
* @param order 支付订单集
|
||||
* @return 下单结果
|
||||
*/
|
||||
public JSONObject unifiedOrder(PayOrder order) {
|
||||
|
||||
Map<String, Object> parameters = new MapGen<String, Object>(WxConst.APPID, payConfigStorage.getAppId())
|
||||
.keyValue(WxConst.TRANSACTION_ID, order.getTradeNo())
|
||||
.keyValue(WxConst.OUT_ORDER_NO, order.getOutTradeNo())
|
||||
.keyValue(WxConst.RECEIVERS, order.getAttr(WxConst.RECEIVERS))
|
||||
.keyValue(WxConst.UNFREEZE_UNSPLIT, order.getAttr(WxConst.UNFREEZE_UNSPLIT))
|
||||
.getAttr();
|
||||
//以下服务商模式必填
|
||||
OrderParaStructure.loadParameters(parameters, WxConst.SUB_MCH_ID, order);
|
||||
OrderParaStructure.loadParameters(parameters, WxConst.SUB_APPID, order);
|
||||
return getAssistService().doExecute(parameters, order);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 返回创建的订单信息
|
||||
*
|
||||
* @param order 支付订单
|
||||
* @return 订单信息
|
||||
* @see PayOrder 支付订单信息
|
||||
*/
|
||||
@Override
|
||||
public Map<String, Object> orderInfo(PayOrder order) {
|
||||
|
||||
if (null == order.getTransactionType()) {
|
||||
order.setTransactionType(WxProfitSharingTransactionType.ORDERS);
|
||||
}
|
||||
switch ((WxProfitSharingTransactionType) order.getTransactionType()) {
|
||||
case ORDERS_UNFREEZE:
|
||||
return unfreeze(order);
|
||||
case RECEIVERS_ADD:
|
||||
return add(order);
|
||||
case RECEIVERS_DELETE:
|
||||
return delete(order);
|
||||
default:
|
||||
return unifiedOrder(order);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 签名
|
||||
*
|
||||
* @param content 需要签名的内容 不包含key
|
||||
* @param characterEncoding 字符编码
|
||||
* @return 签名结果
|
||||
*/
|
||||
@Override
|
||||
public String createSign(String content, String characterEncoding) {
|
||||
PrivateKey privateKey = payConfigStorage.getCertEnvironment().getPrivateKey();
|
||||
return RSA2.sign(content, privateKey, characterEncoding);
|
||||
}
|
||||
|
||||
/**
|
||||
* 将请求参数或者请求流转化为 Map
|
||||
*
|
||||
* @param parameterMap 请求参数
|
||||
* @param is 请求流
|
||||
* @return 获得回调的请求参数
|
||||
*/
|
||||
@Deprecated
|
||||
@Override
|
||||
public Map<String, Object> getParameter2Map(Map<String, String[]> parameterMap, InputStream is) {
|
||||
throw new PayErrorException(new WxPayError("", "分账不支持方式"));
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 将请求参数或者请求流转化为 Map
|
||||
*
|
||||
* @param request 通知请求
|
||||
* @return 获得回调的请求参数
|
||||
*/
|
||||
@Override
|
||||
public NoticeParams getNoticeParams(NoticeRequest request) {
|
||||
throw new PayErrorException(new WxPayError("", "分账不支持方式"));
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取输出消息,用户返回给支付端
|
||||
*
|
||||
* @param code 状态
|
||||
* @param message 消息
|
||||
* @return 返回输出消息
|
||||
*/
|
||||
@Override
|
||||
public PayOutMessage getPayOutMessage(String code, String message) {
|
||||
return PayOutMessage.JSON().content("code", code).content("message", message).build();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 获取成功输出消息,用户返回给支付端
|
||||
* 主要用于拦截器中返回
|
||||
*
|
||||
* @param payMessage 支付回调消息
|
||||
* @return 返回输出消息
|
||||
*/
|
||||
@Override
|
||||
public PayOutMessage successPayOutMessage(PayMessage payMessage) {
|
||||
return getPayOutMessage("SUCCESS", "成功");
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 获取输出消息,用户返回给支付端, 针对于web端
|
||||
*
|
||||
* @param orderInfo 发起支付的订单信息
|
||||
* @param method 请求方式 "post" "get",
|
||||
* @return 获取输出消息,用户返回给支付端, 针对于web端
|
||||
* @see MethodType 请求类型
|
||||
*/
|
||||
@Override
|
||||
public String buildRequest(Map<String, Object> orderInfo, MethodType method) {
|
||||
throw new PayErrorException(new WxPayError("", "分账不支持方式"));
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取输出二维码信息,
|
||||
*
|
||||
* @param order 发起支付的订单信息
|
||||
* @return 返回二维码信息,,支付时需要的
|
||||
*/
|
||||
@Override
|
||||
public String getQrPay(PayOrder order) {
|
||||
throw new PayErrorException(new WxPayError("", "分账不支持方式"));
|
||||
}
|
||||
|
||||
/**
|
||||
* 刷卡付,pos主动扫码付款
|
||||
*
|
||||
* @param order 发起支付的订单信息
|
||||
* @return 返回支付结果
|
||||
*/
|
||||
@Override
|
||||
public Map<String, Object> microPay(PayOrder order) {
|
||||
throw new PayErrorException(new WxPayError("", "分账不支持方式"));
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询分账结果API
|
||||
* 非服务商模式使用
|
||||
*
|
||||
* @param transactionId 微信支付平台订单号
|
||||
* @param outTradeNo 商户单号
|
||||
* @return 返回查询回来的结果集,支付方原值返回
|
||||
*/
|
||||
@Deprecated
|
||||
@Override
|
||||
public Map<String, Object> query(String transactionId, String outTradeNo) {
|
||||
return query(new AssistOrder(transactionId, outTradeNo));
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询分账结果API
|
||||
* <p>
|
||||
* 发起分账请求后,可调用此接口查询分账结果
|
||||
* <p>
|
||||
* 注意: 发起解冻剩余资金请求后,可调用此接口查询解冻剩余资金的结果
|
||||
*
|
||||
* @param assistOrder 查询条件
|
||||
* @return 返回查询回来的结果集,支付方原值返回
|
||||
*/
|
||||
@Override
|
||||
public Map<String, Object> query(AssistOrder assistOrder) {
|
||||
if (null == assistOrder.getTransactionType()) {
|
||||
assistOrder.setTransactionType(WxProfitSharingTransactionType.ORDERS_RESULT);
|
||||
}
|
||||
switch ((WxProfitSharingTransactionType) assistOrder.getTransactionType()) {
|
||||
case AMOUNTS:
|
||||
return getAssistService().doExecute("", assistOrder.getTransactionType(), assistOrder.getTradeNo());
|
||||
case MCH_CONFIG:
|
||||
return getAssistService().doExecute("", assistOrder.getTransactionType(), assistOrder.getAttr(WxConst.SUB_MCH_ID));
|
||||
default:
|
||||
Map<String, Object> parameters = new MapGen<String, Object>(WxConst.TRANSACTION_ID, assistOrder.getTradeNo()).getAttr();
|
||||
//服务商模式使用
|
||||
OrderParaStructure.loadParameters(parameters, WxConst.SUB_MCH_ID, assistOrder);
|
||||
return getAssistService().doExecute(UriVariables.getMapToParameters(parameters), assistOrder.getTransactionType(), assistOrder.getOutTradeNo());
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 交易关闭接口
|
||||
*
|
||||
* @param transactionId 支付平台订单号
|
||||
* @param outTradeNo 商户单号
|
||||
* @return 返回支付方交易关闭后的结果
|
||||
*/
|
||||
@Override
|
||||
public Map<String, Object> close(String transactionId, String outTradeNo) {
|
||||
return close(new AssistOrder(outTradeNo));
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 交易关闭接口
|
||||
*
|
||||
* @param assistOrder 关闭订单
|
||||
* @return 返回支付方交易关闭后的结果
|
||||
*/
|
||||
@Override
|
||||
public Map<String, Object> close(AssistOrder assistOrder) {
|
||||
throw new PayErrorException(new PayException("failure", "V3暂时没有提供此功能,请查看V2版本功能"));
|
||||
}
|
||||
|
||||
/**
|
||||
* 申请退款接口
|
||||
*
|
||||
* @param refundOrder 退款订单信息
|
||||
* @return 返回支付方申请退款后的结果
|
||||
*/
|
||||
@Override
|
||||
public RefundResult refund(RefundOrder refundOrder) {
|
||||
|
||||
Map<String, Object> parameters = new MapGen<String, Object>("return_mchid", payConfigStorage.getMchId())
|
||||
.keyValue("out_return_no", refundOrder.getRefundNo())
|
||||
.keyValue("amount", refundOrder.getRefundAmount().intValue())
|
||||
.keyValue(WxConst.DESCRIPTION, refundOrder.getDescription())
|
||||
.getAttr();
|
||||
//服务商模式使用
|
||||
OrderParaStructure.loadParameters(parameters, WxConst.SUB_MCH_ID, refundOrder);
|
||||
OrderParaStructure.loadParameters(parameters, "order_id", refundOrder.getTradeNo());
|
||||
OrderParaStructure.loadParameters(parameters, "out_order_no", refundOrder.getOutTradeNo());
|
||||
return WxProfitSharingReturnResult.create(getAssistService().doExecute(parameters, WxProfitSharingTransactionType.RETURN_ORDERS));
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 查询退款
|
||||
*
|
||||
* @param refundOrder 退款订单单号信息
|
||||
* @return 返回支付方查询退款后的结果
|
||||
*/
|
||||
@Override
|
||||
public Map<String, Object> refundquery(RefundOrder refundOrder) {
|
||||
|
||||
Map<String, Object> parameters = new MapGen<String, Object>(WxConst.OUT_ORDER_NO, refundOrder.getOutTradeNo()).getAttr();
|
||||
//服务商模式使用
|
||||
OrderParaStructure.loadParameters(parameters, WxConst.SUB_MCH_ID, refundOrder);
|
||||
String requestBody = UriVariables.getMapToParameters(parameters);
|
||||
return getAssistService().doExecute(requestBody, WxProfitSharingTransactionType.RETURN_ORDERS_RESULT, refundOrder.getRefundNo());
|
||||
}
|
||||
|
||||
/**
|
||||
* 下载对账单
|
||||
*
|
||||
* @param billDate 账单时间:日账单格式为yyyy-MM-dd,月账单格式为yyyy-MM。
|
||||
* @param billType 账单类型 内部自动转化 {@link BillType}
|
||||
* @return 返回支付方下载对账单的结果
|
||||
*/
|
||||
@Override
|
||||
public Map<String, Object> downloadBill(Date billDate, String billType) {
|
||||
BillType wxBillType = ProfitSharingBillType.valueOf(billType);
|
||||
return downloadBill(billDate, wxBillType);
|
||||
}
|
||||
|
||||
/**
|
||||
* 申请分账账单
|
||||
* <b>目前不支持指定子商户号查询</b>
|
||||
*
|
||||
* @param billDate 下载对账单的日期
|
||||
* @param billType 账单类型 {@link ProfitSharingBillType}
|
||||
* @return 返回支付方下载对账单的结果, 如果【账单类型】为gzip的话则返回值中key为data值为gzip的输入流
|
||||
*/
|
||||
public Map<String, Object> downloadBill(Date billDate, BillType billType) {
|
||||
|
||||
Map<String, Object> parameters = new MapGen<String, Object>(WxConst.BILL_DATE, DateUtils.formatDate(billDate, DateUtils.YYYY_MM_DD))
|
||||
.getAttr();
|
||||
OrderParaStructure.loadParameters(parameters, WxConst.TAR_TYPE, billType.getType());
|
||||
|
||||
return getAssistService().doExecute(UriVariables.getMapToParameters(parameters), WxProfitSharingTransactionType.BILLS);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 转账
|
||||
*
|
||||
* @param order 转账订单
|
||||
* @return 对应的转账结果
|
||||
*/
|
||||
@Override
|
||||
public Map<String, Object> transfer(TransferOrder order) {
|
||||
throw new PayErrorException(new WxPayError("", "分账不支持方式"));
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 转账查询
|
||||
*
|
||||
* @param outNo 商户转账订单号
|
||||
* @param wxTransferType 微信转账类型,.....这里没办法了只能这样写(┬_┬),请见谅 {@link WxTransferType}
|
||||
* <p>
|
||||
* <a href="https://pay.weixin.qq.com/wiki/doc/api/tools/mch_pay.php?chapter=14_3">企业付款到零钱</a>
|
||||
* <a href="https://pay.weixin.qq.com/wiki/doc/api/tools/mch_pay.php?chapter=24_3">商户企业付款到银行卡</a>
|
||||
* </p>
|
||||
* @return 对应的转账订单
|
||||
*/
|
||||
@Override
|
||||
public Map<String, Object> transferQuery(String outNo, String wxTransferType) {
|
||||
throw new PayErrorException(new WxPayError("", "分账不支持方式"));
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 创建消息
|
||||
*
|
||||
* @param message 支付平台返回的消息
|
||||
* @return 支付消息对象
|
||||
*/
|
||||
@Override
|
||||
public PayMessage createMessage(Map<String, Object> message) {
|
||||
return ProfitSharingPayMessage.create(message);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 添加分账接收方
|
||||
*
|
||||
* @param order 添加分账
|
||||
* @return 结果
|
||||
*/
|
||||
@Override
|
||||
public Map<String, Object> add(PayOrder order) {
|
||||
if (null == order.getTransactionType()) {
|
||||
order.setTransactionType(WxProfitSharingTransactionType.RECEIVERS_ADD);
|
||||
}
|
||||
Map<String, Object> parameters = new MapGen<String, Object>(WxConst.APPID, payConfigStorage.getAppId())
|
||||
.getAttr();
|
||||
|
||||
OrderParaStructure.loadParameters(parameters, WxConst.TYPE, order);
|
||||
OrderParaStructure.loadParameters(parameters, WxConst.ACCOUNT, order);
|
||||
OrderParaStructure.loadParameters(parameters, WxConst.NAME, order);
|
||||
OrderParaStructure.loadParameters(parameters, WxConst.RELATION_TYPE, order);
|
||||
OrderParaStructure.loadParameters(parameters, WxConst.CUSTOM_RELATION, order);
|
||||
//以下服务商模式必填
|
||||
OrderParaStructure.loadParameters(parameters, WxConst.SUB_MCH_ID, order);
|
||||
OrderParaStructure.loadParameters(parameters, WxConst.SUB_APPID, order);
|
||||
|
||||
return getAssistService().doExecute(parameters, order);
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除分账接收方
|
||||
*
|
||||
* @param order 删除分账
|
||||
* @return 结果
|
||||
*/
|
||||
@Override
|
||||
public Map<String, Object> delete(PayOrder order) {
|
||||
if (null == order.getTransactionType()) {
|
||||
order.setTransactionType(WxProfitSharingTransactionType.RECEIVERS_DELETE);
|
||||
}
|
||||
Map<String, Object> parameters = new MapGen<String, Object>(WxConst.APPID, payConfigStorage.getAppId())
|
||||
.getAttr();
|
||||
|
||||
OrderParaStructure.loadParameters(parameters, WxConst.TYPE, order);
|
||||
OrderParaStructure.loadParameters(parameters, WxConst.ACCOUNT, order);
|
||||
//以下服务商模式必填
|
||||
OrderParaStructure.loadParameters(parameters, WxConst.SUB_MCH_ID, order);
|
||||
OrderParaStructure.loadParameters(parameters, WxConst.SUB_APPID, order);
|
||||
|
||||
return getAssistService().doExecute(parameters, order);
|
||||
}
|
||||
|
||||
/**
|
||||
* 解冻剩余资金
|
||||
*
|
||||
* @param order 解冻
|
||||
* @return 结果
|
||||
*/
|
||||
@Override
|
||||
public Map<String, Object> unfreeze(PayOrder order) {
|
||||
if (null == order.getTransactionType()) {
|
||||
order.setTransactionType(WxProfitSharingTransactionType.ORDERS_UNFREEZE);
|
||||
}
|
||||
Map<String, Object> parameters = new MapGen<String, Object>(WxConst.TRANSACTION_ID, order.getTradeNo())
|
||||
.keyValue(WxConst.OUT_ORDER_NO, order.getOutTradeNo())
|
||||
.getAttr();
|
||||
// 商品描述
|
||||
OrderParaStructure.loadParameters(parameters, WxConst.DESCRIPTION, order.getSubject());
|
||||
OrderParaStructure.loadParameters(parameters, WxConst.DESCRIPTION, order.getBody());
|
||||
OrderParaStructure.loadParameters(parameters, WxConst.DESCRIPTION, order);
|
||||
|
||||
//以下服务商模式必填
|
||||
OrderParaStructure.loadParameters(parameters, WxConst.SUB_MCH_ID, order);
|
||||
return getAssistService().doExecute(parameters, order);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,79 @@
|
||||
package com.egzosn.pay.wx.v3.bean;
|
||||
|
||||
import com.egzosn.pay.common.bean.MethodType;
|
||||
import com.egzosn.pay.common.bean.TransactionType;
|
||||
|
||||
/**
|
||||
* 微信V3分账交易类型
|
||||
*
|
||||
* @author egan
|
||||
* <pre>
|
||||
* email egan@egzosn.com
|
||||
* date 2021/10/6
|
||||
* </pre>
|
||||
*/
|
||||
public enum WxProfitSharingTransactionType implements TransactionType {
|
||||
/**
|
||||
* 请求分账
|
||||
*/
|
||||
ORDERS("/v3/profitsharing/orders ", MethodType.POST),
|
||||
/**
|
||||
* 查询分账结果
|
||||
*/
|
||||
ORDERS_RESULT("/v3/profitsharing/orders/{out_order_no} ", MethodType.POST),
|
||||
/**
|
||||
* 请求分账回退
|
||||
*/
|
||||
RETURN_ORDERS("/v3/profitsharing/return-orders ", MethodType.POST),
|
||||
/**
|
||||
* 查询分账回退结果
|
||||
*/
|
||||
RETURN_ORDERS_RESULT("/v3/profitsharing/return-orders/{out_return_no}", MethodType.GET),
|
||||
/**
|
||||
* 解冻剩余资金
|
||||
*/
|
||||
ORDERS_UNFREEZE("/v3/profitsharing/orders/unfreeze ", MethodType.POST),
|
||||
/**
|
||||
* 查询剩余待分金额
|
||||
*/
|
||||
AMOUNTS("/v3/profitsharing/transactions/{transaction_id}/amounts ", MethodType.GET),
|
||||
/**
|
||||
* 服务商专用-查询最大分账比例
|
||||
*/
|
||||
MCH_CONFIG("/v3/profitsharing/merchant-configs/{sub_mchid} ", MethodType.GET),
|
||||
/**
|
||||
* 添加分账接收方
|
||||
*/
|
||||
RECEIVERS_ADD("/v3/profitsharing/receivers/add ", MethodType.POST),
|
||||
/**
|
||||
* 删除分账接收方
|
||||
*/
|
||||
RECEIVERS_DELETE("/v3/profitsharing/receivers/add", MethodType.POST),
|
||||
|
||||
BILLS("/v3/profitsharing/bills", MethodType.GET),
|
||||
|
||||
;
|
||||
|
||||
|
||||
|
||||
WxProfitSharingTransactionType(String type, MethodType method) {
|
||||
this.type = type;
|
||||
this.method = method;
|
||||
}
|
||||
|
||||
private String type;
|
||||
private MethodType method;
|
||||
|
||||
|
||||
|
||||
@Override
|
||||
public String getType() {
|
||||
return type;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getMethod() {
|
||||
return this.method.name();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -17,9 +17,10 @@ import com.egzosn.pay.wx.v3.utils.WxConst;
|
||||
* 微信V3交易类型
|
||||
*
|
||||
* @author egan
|
||||
* <p>
|
||||
* email egzosn@gmail.com
|
||||
* <pre>
|
||||
* email egan@egzosn.com
|
||||
* date 2016/10/19 22:58
|
||||
* </pre>
|
||||
*/
|
||||
public enum WxTransactionType implements TransactionType {
|
||||
/**
|
||||
@@ -127,7 +128,7 @@ public enum WxTransactionType implements TransactionType {
|
||||
//-----------------------------------------------------------------
|
||||
//以下为合并支付
|
||||
/**
|
||||
* 合单下单-APP支付API.
|
||||
* 合单下单-APP支付
|
||||
*/
|
||||
COMBINE_APP("/v3/combine-transactions/app", MethodType.POST),
|
||||
|
||||
@@ -136,20 +137,20 @@ public enum WxTransactionType implements TransactionType {
|
||||
*/
|
||||
COMBINE_JSAPI("/v3/combine-transactions/jsapi", MethodType.POST),
|
||||
/**
|
||||
* 合单下单-H5支付API.
|
||||
* 合单下单-H5支付
|
||||
*/
|
||||
COMBINE_H5("/v3/combine-transactions/h5", MethodType.POST, true),
|
||||
/**
|
||||
* 合单下单-Native支付API.
|
||||
* 合单下单-Native支付
|
||||
*/
|
||||
COMBINE_NATIVE("/v3/combine-transactions/native", MethodType.POST, true),
|
||||
/**
|
||||
* 合单查询订单API.
|
||||
* 合单查询订单
|
||||
*/
|
||||
COMBINE_TRANSACTION("/v3/combine-transactions/out-trade-no/{combine_out_trade_no}", MethodType.GET),
|
||||
|
||||
/**
|
||||
* 合单关闭订单API.
|
||||
* 合单关闭订单
|
||||
*/
|
||||
COMBINE_CLOSE("/v3/combine-transactions/out-trade-no/{combine_out_trade_no}/close", MethodType.POST),
|
||||
;
|
||||
|
||||
@@ -2,7 +2,8 @@ package com.egzosn.pay.wx.v3.bean.combine;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import com.egzosn.pay.common.bean.CloseOrder;
|
||||
import com.egzosn.pay.common.bean.AssistOrder;
|
||||
|
||||
import com.egzosn.pay.wx.v3.utils.WxConst;
|
||||
|
||||
/**
|
||||
@@ -13,7 +14,7 @@ import com.egzosn.pay.wx.v3.utils.WxConst;
|
||||
* date 2021/10/6
|
||||
* </pre>
|
||||
*/
|
||||
public class CombineCloseOrder extends CloseOrder {
|
||||
public class CombineCloseOrder extends AssistOrder {
|
||||
|
||||
/**
|
||||
* 子单信息,必填,最多50单
|
||||
|
||||
@@ -361,7 +361,7 @@ public class WxPayMessage extends PayMessage {
|
||||
this.userReceivedAccount = userReceivedAccount;
|
||||
}
|
||||
|
||||
public static final WxPayMessage create(Map<String, Object> message) {
|
||||
public static WxPayMessage create(Map<String, Object> message) {
|
||||
WxPayMessage payMessage = new JSONObject(message).toJavaObject(WxPayMessage.class);
|
||||
// payMessage.setPayType("");
|
||||
payMessage.setPayMessage(message);
|
||||
|
||||
@@ -48,4 +48,13 @@ public enum TradeState {
|
||||
* 已接收,等待扣款
|
||||
*/
|
||||
ACCEPT,
|
||||
/**
|
||||
* 如果请求返回为处理中,则商户可以通过调用回退结果查询接口获取请求的最终处理结果。如果查询到回退结果在处理中,请勿变更商户回退单号,使用相同的参数再次发起分账回退,否则会出现资金风险。在处理中状态的回退单如果5天没有成功,会因为超时被设置为已失败。
|
||||
* 处理中
|
||||
*/
|
||||
PROCESSING,
|
||||
/**
|
||||
* 失败
|
||||
*/
|
||||
FAILED;
|
||||
}
|
||||
@@ -0,0 +1,73 @@
|
||||
package com.egzosn.pay.wx.v3.bean.sharing;
|
||||
|
||||
import com.egzosn.pay.common.bean.BillType;
|
||||
|
||||
/**
|
||||
* 分账账单类型
|
||||
*
|
||||
* @author Egan
|
||||
* <pre>
|
||||
* email egan@egzosn.com
|
||||
* date 2021/10/6
|
||||
* </pre>
|
||||
*/
|
||||
public enum ProfitSharingBillType implements BillType {
|
||||
|
||||
/**
|
||||
* 数据流
|
||||
*/
|
||||
STREAM,
|
||||
/**
|
||||
* 返回格式为.gzip的压缩包账单
|
||||
*/
|
||||
GZIP("GZIP");
|
||||
|
||||
ProfitSharingBillType() {
|
||||
}
|
||||
|
||||
ProfitSharingBillType(String type) {
|
||||
this.type = type;
|
||||
}
|
||||
|
||||
private String type;
|
||||
|
||||
/**
|
||||
* 获取类型名称
|
||||
*
|
||||
* @return 类型
|
||||
*/
|
||||
@Override
|
||||
public String getType() {
|
||||
return type;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取类型对应的日期格式化表达式
|
||||
*
|
||||
* @return 日期格式化表达式
|
||||
*/
|
||||
@Override
|
||||
public String getDatePattern() {
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取文件类型
|
||||
*
|
||||
* @return 文件类型
|
||||
*/
|
||||
@Override
|
||||
public String getFileType() {
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* 自定义属性
|
||||
*
|
||||
* @return 自定义属性
|
||||
*/
|
||||
@Override
|
||||
public String getCustom() {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,106 @@
|
||||
package com.egzosn.pay.wx.v3.bean.sharing;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import com.egzosn.pay.common.bean.PayOrder;
|
||||
import com.egzosn.pay.wx.v3.utils.WxConst;
|
||||
|
||||
/**
|
||||
* 服务商请求分账订单
|
||||
* @author Egan
|
||||
* <pre>
|
||||
* email egan@egzosn.com
|
||||
* date 2021/10/6
|
||||
* </pre>
|
||||
*/
|
||||
public class ProfitSharingOrder extends PayOrder {
|
||||
|
||||
/**
|
||||
* 子商户号,选填,服务商必填
|
||||
*/
|
||||
private String subMchid;
|
||||
|
||||
/**
|
||||
* 子商户应用ID,选填
|
||||
* <p>
|
||||
* 分账接收方类型包含{@code PERSONAL_SUB_OPENID}时必填
|
||||
*/
|
||||
private String subAppid;
|
||||
|
||||
/**
|
||||
* 分账接收方列表,选填
|
||||
* <p>
|
||||
* 可以设置出资商户作为分账接受方,最多可有50个分账接收方
|
||||
*/
|
||||
private List<Receiver> receivers;
|
||||
/**
|
||||
* 是否解冻剩余未分资金,必填
|
||||
* <ol>
|
||||
* <li>如果为{@code true},该笔订单剩余未分账的金额会解冻回分账方商户;</li>
|
||||
* <li>如果为{@code false},该笔订单剩余未分账的金额不会解冻回分账方商户,可以对该笔订单再次进行分账。</li>
|
||||
* </ol>
|
||||
*/
|
||||
private Boolean unfreezeUnsplit;
|
||||
|
||||
public String getSubMchid() {
|
||||
return subMchid;
|
||||
}
|
||||
|
||||
public void setSubMchid(String subMchid) {
|
||||
this.subMchid = subMchid;
|
||||
addAttr(WxConst.SUB_MCH_ID, subMchid);
|
||||
}
|
||||
|
||||
public String getSubAppid() {
|
||||
return subAppid;
|
||||
}
|
||||
|
||||
public void setSubAppid(String subAppid) {
|
||||
this.subAppid = subAppid;
|
||||
addAttr(WxConst.SUB_APPID, subAppid);
|
||||
}
|
||||
|
||||
/**
|
||||
* 微信支付订单号
|
||||
* @return 微信支付订单号
|
||||
*/
|
||||
public String getTransactionId() {
|
||||
return getTradeNo();
|
||||
}
|
||||
|
||||
public void setTransactionId(String transactionId) {
|
||||
setTradeNo(transactionId);
|
||||
}
|
||||
/**
|
||||
* 商户分账单号,必填
|
||||
* <p>
|
||||
* 商户系统内部的分账单号,在商户系统内部唯一,同一分账单号多次请求等同一次。
|
||||
* 只能是数字、大小写字母_-|*@
|
||||
* @return 商户分账单号,必填
|
||||
*/
|
||||
public String getOutOrderNo() {
|
||||
return getOutTradeNo();
|
||||
}
|
||||
|
||||
public void setOutOrderNo(String outOrderNo) {
|
||||
setOutTradeNo(outOrderNo);
|
||||
}
|
||||
|
||||
public List<Receiver> getReceivers() {
|
||||
return receivers;
|
||||
}
|
||||
|
||||
public void setReceivers(List<Receiver> receivers) {
|
||||
this.receivers = receivers;
|
||||
addAttr(WxConst.RECEIVERS, receivers);
|
||||
}
|
||||
|
||||
public Boolean getUnfreezeUnsplit() {
|
||||
return unfreezeUnsplit;
|
||||
}
|
||||
|
||||
public void setUnfreezeUnsplit(Boolean unfreezeUnsplit) {
|
||||
this.unfreezeUnsplit = unfreezeUnsplit;
|
||||
addAttr(WxConst.UNFREEZE_UNSPLIT, receivers);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,119 @@
|
||||
package com.egzosn.pay.wx.v3.bean.sharing;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.alibaba.fastjson.annotation.JSONField;
|
||||
import com.egzosn.pay.common.bean.PayMessage;
|
||||
|
||||
/**
|
||||
* 分账动账通知
|
||||
* @author Egan
|
||||
* <pre>
|
||||
* email egan@egzosn.com
|
||||
* date 2021/10/4
|
||||
* </pre>
|
||||
*/
|
||||
public class ProfitSharingPayMessage extends PayMessage {
|
||||
|
||||
/**
|
||||
* 直连商户号.
|
||||
* <p>
|
||||
* 直连模式分账发起和出资商户
|
||||
*/
|
||||
private String mchid;
|
||||
|
||||
/**
|
||||
* 微信支付订单号
|
||||
*/
|
||||
@JSONField(name = "transaction_id")
|
||||
private String transactionId;
|
||||
|
||||
/**
|
||||
* 微信分账/回退单号.
|
||||
*/
|
||||
@JSONField(name = "order_id")
|
||||
private String orderId;
|
||||
|
||||
/**
|
||||
* 商户分账/回退单号.
|
||||
* 分账方系统内部的分账/回退单号
|
||||
*/
|
||||
@JSONField(name = "out_order_no")
|
||||
private String outOrderNo;
|
||||
|
||||
/**
|
||||
* 分账接收方.
|
||||
* <p>
|
||||
* 分账接收方对象
|
||||
*/
|
||||
private List<Receiver> receivers;
|
||||
|
||||
/**
|
||||
* 成功时间.
|
||||
* <p>
|
||||
* Rfc3339标准
|
||||
*/
|
||||
@JSONField(name = "success_time", format = "yyyy-MM-dd'T'HH:mm:ssXXX")
|
||||
private Date successTime;
|
||||
|
||||
|
||||
public String getMchid() {
|
||||
return mchid;
|
||||
}
|
||||
|
||||
public void setMchid(String mchid) {
|
||||
this.mchid = mchid;
|
||||
}
|
||||
|
||||
public String getTransactionId() {
|
||||
return transactionId;
|
||||
}
|
||||
|
||||
public void setTransactionId(String transactionId) {
|
||||
this.transactionId = transactionId;
|
||||
}
|
||||
|
||||
public String getOrderId() {
|
||||
return orderId;
|
||||
}
|
||||
|
||||
public void setOrderId(String orderId) {
|
||||
this.orderId = orderId;
|
||||
}
|
||||
|
||||
public String getOutOrderNo() {
|
||||
return outOrderNo;
|
||||
}
|
||||
|
||||
public void setOutOrderNo(String outOrderNo) {
|
||||
this.outOrderNo = outOrderNo;
|
||||
}
|
||||
|
||||
public List<Receiver> getReceivers() {
|
||||
return receivers;
|
||||
}
|
||||
|
||||
public void setReceivers(List<Receiver> receivers) {
|
||||
this.receivers = receivers;
|
||||
}
|
||||
|
||||
public Date getSuccessTime() {
|
||||
return successTime;
|
||||
}
|
||||
|
||||
public void setSuccessTime(Date successTime) {
|
||||
this.successTime = successTime;
|
||||
}
|
||||
|
||||
public static ProfitSharingPayMessage create(Map<String, Object> message) {
|
||||
ProfitSharingPayMessage payMessage = new JSONObject(message).toJavaObject(ProfitSharingPayMessage.class);
|
||||
// payMessage.setPayType("");
|
||||
payMessage.setPayMessage(message);
|
||||
return payMessage;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
package com.egzosn.pay.wx.v3.bean.sharing;
|
||||
|
||||
import com.egzosn.pay.common.bean.RefundOrder;
|
||||
import com.egzosn.pay.wx.v3.utils.WxConst;
|
||||
|
||||
/**
|
||||
* 分账回退订单
|
||||
* @author Egan
|
||||
* <pre>
|
||||
* email egan@egzosn.com
|
||||
* date 2021/10/6
|
||||
* </pre>
|
||||
*/
|
||||
public class ProfitSharingReturnOrder extends RefundOrder {
|
||||
|
||||
/**
|
||||
* 子商户号,选填,服务商必填
|
||||
*/
|
||||
private String subMchid;
|
||||
|
||||
public String getSubMchid() {
|
||||
return subMchid;
|
||||
}
|
||||
|
||||
public void setSubMchid(String subMchid) {
|
||||
this.subMchid = subMchid;
|
||||
addAttr(WxConst.SUB_MCH_ID, subMchid);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,84 @@
|
||||
package com.egzosn.pay.wx.v3.bean.sharing;
|
||||
|
||||
/**
|
||||
* 分账接收方信息
|
||||
*
|
||||
* @author Egan
|
||||
* <pre>
|
||||
* email egan@egzosn.com
|
||||
* date 2021/10/6
|
||||
* </pre>
|
||||
*/
|
||||
|
||||
public class Receiver {
|
||||
/**
|
||||
* 分账接收方类型,必填
|
||||
*/
|
||||
private ReceiverType type;
|
||||
/**
|
||||
* 分账接收方帐号,必填
|
||||
*/
|
||||
private String account;
|
||||
/**
|
||||
* 分账个人接收方姓名,选填
|
||||
* <p>
|
||||
* 在接收方类型为个人的时可选填,若有值,会检查与 name 是否实名匹配,不匹配会拒绝分账请求
|
||||
* <ol>
|
||||
* <li>分账接收方类型是{@code PERSONAL_OPENID},是个人姓名的密文(选传,传则校验) 此字段的加密方法详见:敏感信息加密说明</li>
|
||||
* <li>使用微信支付平台证书中的公钥</li>
|
||||
* <li>使用RSAES-OAEP算法进行加密</li>
|
||||
* <li>将请求中HTTP头部的Wechatpay-Serial设置为证书序列号</li>
|
||||
* </ol>
|
||||
*/
|
||||
private String name;
|
||||
/**
|
||||
* 分账金额,必填
|
||||
* <p>
|
||||
* 单位为分,只能为整数,不能超过原订单支付金额及最大分账比例金额
|
||||
*/
|
||||
private Integer amount;
|
||||
/**
|
||||
* 分账的原因描述,必填。分账账单中需要体现
|
||||
*/
|
||||
private String description;
|
||||
|
||||
public ReceiverType getType() {
|
||||
return type;
|
||||
}
|
||||
|
||||
public void setType(ReceiverType type) {
|
||||
this.type = type;
|
||||
}
|
||||
|
||||
public String getAccount() {
|
||||
return account;
|
||||
}
|
||||
|
||||
public void setAccount(String account) {
|
||||
this.account = account;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public void setName(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public Integer getAmount() {
|
||||
return amount;
|
||||
}
|
||||
|
||||
public void setAmount(Integer amount) {
|
||||
this.amount = amount;
|
||||
}
|
||||
|
||||
public String getDescription() {
|
||||
return description;
|
||||
}
|
||||
|
||||
public void setDescription(String description) {
|
||||
this.description = description;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
package com.egzosn.pay.wx.v3.bean.sharing;
|
||||
|
||||
|
||||
/**
|
||||
* 分账接收方类型
|
||||
*
|
||||
* @author Egan
|
||||
* <pre>
|
||||
* email egan@egzosn.com
|
||||
* date 2021/10/6
|
||||
* </pre>
|
||||
*/
|
||||
public enum ReceiverType {
|
||||
/**
|
||||
* 商户号
|
||||
*/
|
||||
MERCHANT_ID,
|
||||
/**
|
||||
* 个人openid(由父商户APPID转换得到)
|
||||
*/
|
||||
PERSONAL_OPENID,
|
||||
/**
|
||||
* 个人sub_openid(由子商户APPID转换得到),服务商模式
|
||||
*/
|
||||
PERSONAL_SUB_OPENID
|
||||
}
|
||||
@@ -0,0 +1,120 @@
|
||||
package com.egzosn.pay.wx.v3.bean.sharing;
|
||||
|
||||
import com.egzosn.pay.common.bean.PayOrder;
|
||||
import com.egzosn.pay.wx.v3.utils.WxConst;
|
||||
|
||||
/**
|
||||
* 添加分账接收方
|
||||
*
|
||||
* @author Egan
|
||||
* <pre>
|
||||
* email egan@egzosn.com
|
||||
* date 2021/10/6
|
||||
* </pre>
|
||||
*/
|
||||
public class ReceiversOrder extends PayOrder {
|
||||
|
||||
/**
|
||||
* 子商户号,选填
|
||||
*/
|
||||
private String subMchid;
|
||||
/**
|
||||
* 子商户应用ID,选填
|
||||
* <p>
|
||||
* 分账接收方类型包含{@code PERSONAL_SUB_OPENID}时必填
|
||||
*/
|
||||
private String subAppid;
|
||||
/**
|
||||
* 分账接收方类型,必填
|
||||
*/
|
||||
private ReceiverType type;
|
||||
/**
|
||||
* 分账接收方帐号,必填
|
||||
*/
|
||||
private String account;
|
||||
/**
|
||||
* 分账个人接收方姓名,选填
|
||||
* <p>
|
||||
* 分账接收方类型是{@code MERCHANT_ID}时,是商户全称(必传),当商户是小微商户或个体户时,是开户人姓名 分账接收方类型是{@code PERSONAL_OPENID}时,是个人姓名(选传,传则校验)
|
||||
* <ol>
|
||||
* <li>分账接收方类型是{@code PERSONAL_OPENID},是个人姓名的密文(选传,传则校验) 此字段的加密方法详见:敏感信息加密说明</li>
|
||||
* <li>使用微信支付平台证书中的公钥</li>
|
||||
* <li>使用RSAES-OAEP算法进行加密</li>
|
||||
* <li>将请求中HTTP头部的Wechatpay-Serial设置为证书序列号</li>
|
||||
* </ol>
|
||||
*/
|
||||
private String name;
|
||||
/**
|
||||
* 与分账方的关系类型,必填
|
||||
*/
|
||||
private RelationType relationType;
|
||||
/**
|
||||
* 自定义的分账关系,选填
|
||||
*/
|
||||
private String customRelation;
|
||||
|
||||
public String getSubMchid() {
|
||||
return subMchid;
|
||||
}
|
||||
|
||||
public void setSubMchid(String subMchid) {
|
||||
this.subMchid = subMchid;
|
||||
addAttr(WxConst.SUB_MCH_ID, subMchid);
|
||||
}
|
||||
|
||||
public String getSubAppid() {
|
||||
return subAppid;
|
||||
}
|
||||
|
||||
public void setSubAppid(String subAppid) {
|
||||
this.subAppid = subAppid;
|
||||
addAttr(WxConst.SUB_APPID, subAppid);
|
||||
}
|
||||
|
||||
public ReceiverType getType() {
|
||||
return type;
|
||||
}
|
||||
|
||||
public void setType(ReceiverType type) {
|
||||
this.type = type;
|
||||
addAttr(WxConst.TYPE, type);
|
||||
}
|
||||
|
||||
public String getAccount() {
|
||||
return account;
|
||||
}
|
||||
|
||||
public void setAccount(String account) {
|
||||
this.account = account;
|
||||
addAttr(WxConst.ACCOUNT, account);
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public void setName(String name) {
|
||||
this.name = name;
|
||||
addAttr(WxConst.NAME, name);
|
||||
}
|
||||
|
||||
public RelationType getRelationType() {
|
||||
return relationType;
|
||||
}
|
||||
|
||||
public void setRelationType(RelationType relationType) {
|
||||
this.relationType = relationType;
|
||||
addAttr(WxConst.RELATION_TYPE, relationType);
|
||||
}
|
||||
|
||||
public String getCustomRelation() {
|
||||
return customRelation;
|
||||
}
|
||||
|
||||
public void setCustomRelation(String customRelation) {
|
||||
this.customRelation = customRelation;
|
||||
addAttr(WxConst.CUSTOM_RELATION, customRelation);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,53 @@
|
||||
package com.egzosn.pay.wx.v3.bean.sharing;
|
||||
|
||||
/**
|
||||
* 子商户与接收方的关系
|
||||
*
|
||||
* @author Egan
|
||||
* <pre>
|
||||
* email egan@egzosn.com
|
||||
* date 2021/10/6
|
||||
* </pre>
|
||||
*/
|
||||
public enum RelationType {
|
||||
/**
|
||||
* 门店.
|
||||
*/
|
||||
STORE,
|
||||
/**
|
||||
* 员工.
|
||||
*/
|
||||
STAFF,
|
||||
/**
|
||||
* 店主.
|
||||
*/
|
||||
STORE_OWNER,
|
||||
/**
|
||||
* 合作伙伴.
|
||||
*/
|
||||
PARTNER,
|
||||
/**
|
||||
* 总部.
|
||||
*/
|
||||
HEADQUARTER,
|
||||
/**
|
||||
* 品牌方.
|
||||
*/
|
||||
BRAND,
|
||||
/**
|
||||
* 分销商.
|
||||
*/
|
||||
DISTRIBUTOR,
|
||||
/**
|
||||
* 用户.
|
||||
*/
|
||||
USER,
|
||||
/**
|
||||
* 供应商.
|
||||
*/
|
||||
SUPPLIER,
|
||||
/**
|
||||
* 自定义.
|
||||
*/
|
||||
CUSTOM
|
||||
}
|
||||
@@ -0,0 +1,304 @@
|
||||
package com.egzosn.pay.wx.v3.bean.sharing;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Map;
|
||||
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.alibaba.fastjson.annotation.JSONField;
|
||||
import com.egzosn.pay.common.bean.BaseRefundResult;
|
||||
import com.egzosn.pay.common.bean.CurType;
|
||||
import com.egzosn.pay.wx.v3.bean.response.order.TradeState;
|
||||
import com.egzosn.pay.wx.v3.utils.WxConst;
|
||||
|
||||
/**
|
||||
* 微信退款结果
|
||||
*
|
||||
* @author Egan
|
||||
* <pre>
|
||||
* email egan@egzosn.com
|
||||
* date 2021/10/6
|
||||
* </pre>
|
||||
*/
|
||||
public class WxProfitSharingReturnResult extends BaseRefundResult {
|
||||
|
||||
/**
|
||||
* 分账回退的接收商户,对应原分账出资的分账方商户,填写微信支付分配的商户号
|
||||
* 直连商户不用传二级商户号。
|
||||
*/
|
||||
@JSONField(name = "sub_mchid")
|
||||
private String subMchid;
|
||||
|
||||
/**
|
||||
* 微信分账单号,微信系统返回的唯一标识。
|
||||
* 示例值:3008450740201411110007820472
|
||||
*/
|
||||
@JSONField(name = "order_id")
|
||||
private String orderId;
|
||||
/**
|
||||
* 商户分账单号
|
||||
* 商户系统内部的分账单号,在商户系统内部唯一,同一分账单号多次请求等同一次。 取值范围:[0-9a-zA-Z_*@-]
|
||||
* 示例值:P20150806125346
|
||||
*/
|
||||
@JSONField(name = WxConst.OUT_ORDER_NO)
|
||||
private String outOrderNo;
|
||||
/**
|
||||
* 此回退单号是商户在自己后台生成的一个新的回退单号,在商户后台唯一
|
||||
* 示例值:R20190516001
|
||||
*/
|
||||
@JSONField(name = "out_return_no")
|
||||
private String outReturnNo;
|
||||
/**
|
||||
* 微信分账回退单号,微信系统返回的唯一标识
|
||||
* 示例值:3008450740201411110007820472
|
||||
*/
|
||||
@JSONField(name = "return_id")
|
||||
private String returnId;
|
||||
/**
|
||||
* 回退商户号
|
||||
* 只能对原分账请求中成功分给商户接收方进行回退
|
||||
* 示例值:86693852
|
||||
*/
|
||||
@JSONField(name = "return_mchid")
|
||||
private String returnMchid;
|
||||
|
||||
|
||||
/**
|
||||
* 回退金额
|
||||
* 需要从分账接收方回退的金额,单位为分,只能为整数
|
||||
* 示例值:10
|
||||
*/
|
||||
private Integer amount;
|
||||
|
||||
/**
|
||||
* 分账回退的原因描述
|
||||
* 示例值:用户退款
|
||||
*/
|
||||
private String description;
|
||||
/**
|
||||
如果请求返回为处理中,则商户可以通过调用回退结果查询接口获取请求的最终处理结果。如果查询到回退结果在处理中,请勿变更商户回退单号,使用相同的参数再次发起分账回退,否则会出现资金风险。在处理中状态的回退单如果5天没有成功,会因为超时被设置为已失败。
|
||||
枚举值:
|
||||
PROCESSING:处理中
|
||||
SUCCESS:已成功
|
||||
FAILED:已失败
|
||||
示例值:SUCCESS
|
||||
*/
|
||||
private TradeState result;
|
||||
/**
|
||||
* 失败原因。包含以下枚举值:
|
||||
* ACCOUNT_ABNORMAL : 分账接收方账户异常
|
||||
* TIME_OUT_CLOSED : 超时关单
|
||||
* 示例值:TIME_OUT_CLOSED
|
||||
*/
|
||||
@JSONField(name = "fail_reason")
|
||||
private String failReason;
|
||||
|
||||
/**
|
||||
* 分账回退创建时间,遵循rfc3339标准格式,格式为YYYY-MM-DDTHH:mm:ss.sss+TIMEZONE,YYYY-MM-DD表示年月日,T出现在字符串中,表示time元素的开头,HH:mm:ss.sss表示时分秒毫秒,TIMEZONE表示时区(+08:00表示东八区时间,领先UTC 8小时,即北京时间)。例如:2015-05-20T13:29:35.120+08:00表示,北京时间2015年5月20日 13点29分35秒。
|
||||
* 示例值:2015-05-20T13:29:35.120+08:00
|
||||
*/
|
||||
@JSONField(name = "create_time")
|
||||
private String createTime;
|
||||
|
||||
/**
|
||||
* 分账回退完成时间,遵循rfc3339标准格式,格式为YYYY-MM-DDTHH:mm:ss.sss+TIMEZONE,YYYY-MM-DD表示年月日,T出现在字符串中,表示time元素的开头,HH:mm:ss.sss表示时分秒毫秒,TIMEZONE表示时区(+08:00表示东八区时间,领先UTC 8小时,即北京时间)。例如:2015-05-20T13:29:35.120+08:00表示,北京时间2015年5月20日 13点29分35秒。
|
||||
* 示例值:2015-05-20T13:29:35.120+08:00
|
||||
*/
|
||||
@JSONField(name = "finish_time")
|
||||
private String finishTime;
|
||||
|
||||
|
||||
/**
|
||||
* 获取退款请求结果状态码
|
||||
*
|
||||
* @return 状态码
|
||||
*/
|
||||
@Override
|
||||
public String getCode() {
|
||||
return result.name();
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取退款请求结果状态提示信息
|
||||
*
|
||||
* @return 提示信息
|
||||
*/
|
||||
@Override
|
||||
public String getMsg() {
|
||||
return failReason;
|
||||
}
|
||||
|
||||
/**
|
||||
* 返回业务结果状态码
|
||||
*
|
||||
* @return 业务结果状态码
|
||||
*/
|
||||
@Override
|
||||
public String getResultCode() {
|
||||
return result.name();
|
||||
}
|
||||
|
||||
/**
|
||||
* 返回业务结果状态提示信息
|
||||
*
|
||||
* @return 业务结果状态提示信息
|
||||
*/
|
||||
@Override
|
||||
public String getResultMsg() {
|
||||
return failReason;
|
||||
}
|
||||
|
||||
/**
|
||||
* 退款金额, 金额元
|
||||
*
|
||||
* @return 退款金额
|
||||
*/
|
||||
@Override
|
||||
public BigDecimal getRefundFee() {
|
||||
|
||||
return new BigDecimal(amount);
|
||||
}
|
||||
|
||||
/**
|
||||
* 退款币种信息
|
||||
*
|
||||
* @return 币种信息
|
||||
*/
|
||||
@Override
|
||||
public CurType getRefundCurrency() {
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* 支付平台交易号
|
||||
* 发起支付时 支付平台(如支付宝)返回的交易订单号
|
||||
*
|
||||
* @return 支付平台交易号
|
||||
*/
|
||||
@Override
|
||||
public String getTradeNo() {
|
||||
return orderId;
|
||||
}
|
||||
|
||||
/**
|
||||
* 支付订单号
|
||||
* 发起支付时,用户系统的订单号
|
||||
*
|
||||
* @return 支付订单号
|
||||
*/
|
||||
@Override
|
||||
public String getOutTradeNo() {
|
||||
return outOrderNo;
|
||||
}
|
||||
|
||||
/**
|
||||
* 商户退款单号
|
||||
*
|
||||
* @return 商户退款单号
|
||||
*/
|
||||
@Override
|
||||
public String getRefundNo() {
|
||||
return outReturnNo;
|
||||
}
|
||||
|
||||
public String getSubMchid() {
|
||||
return subMchid;
|
||||
}
|
||||
|
||||
public void setSubMchid(String subMchid) {
|
||||
this.subMchid = subMchid;
|
||||
}
|
||||
|
||||
public String getOrderId() {
|
||||
return orderId;
|
||||
}
|
||||
|
||||
public void setOrderId(String orderId) {
|
||||
this.orderId = orderId;
|
||||
}
|
||||
|
||||
public String getOutOrderNo() {
|
||||
return outOrderNo;
|
||||
}
|
||||
|
||||
public void setOutOrderNo(String outOrderNo) {
|
||||
this.outOrderNo = outOrderNo;
|
||||
}
|
||||
|
||||
public String getOutReturnNo() {
|
||||
return outReturnNo;
|
||||
}
|
||||
|
||||
public void setOutReturnNo(String outReturnNo) {
|
||||
this.outReturnNo = outReturnNo;
|
||||
}
|
||||
|
||||
public String getReturnId() {
|
||||
return returnId;
|
||||
}
|
||||
|
||||
public void setReturnId(String returnId) {
|
||||
this.returnId = returnId;
|
||||
}
|
||||
|
||||
public String getReturnMchid() {
|
||||
return returnMchid;
|
||||
}
|
||||
|
||||
public void setReturnMchid(String returnMchid) {
|
||||
this.returnMchid = returnMchid;
|
||||
}
|
||||
|
||||
public Integer getAmount() {
|
||||
return amount;
|
||||
}
|
||||
|
||||
public void setAmount(Integer amount) {
|
||||
this.amount = amount;
|
||||
}
|
||||
|
||||
public String getDescription() {
|
||||
return description;
|
||||
}
|
||||
|
||||
public void setDescription(String description) {
|
||||
this.description = description;
|
||||
}
|
||||
|
||||
public TradeState getResult() {
|
||||
return result;
|
||||
}
|
||||
|
||||
public void setResult(TradeState result) {
|
||||
this.result = result;
|
||||
}
|
||||
|
||||
public String getFailReason() {
|
||||
return failReason;
|
||||
}
|
||||
|
||||
public void setFailReason(String failReason) {
|
||||
this.failReason = failReason;
|
||||
}
|
||||
|
||||
public String getCreateTime() {
|
||||
return createTime;
|
||||
}
|
||||
|
||||
public void setCreateTime(String createTime) {
|
||||
this.createTime = createTime;
|
||||
}
|
||||
|
||||
public String getFinishTime() {
|
||||
return finishTime;
|
||||
}
|
||||
|
||||
public void setFinishTime(String finishTime) {
|
||||
this.finishTime = finishTime;
|
||||
}
|
||||
|
||||
public static final WxProfitSharingReturnResult create(Map<String, Object> result) {
|
||||
WxProfitSharingReturnResult refundResult = new JSONObject(result).toJavaObject(WxProfitSharingReturnResult.class);
|
||||
refundResult.setAttrs(result);
|
||||
return refundResult;
|
||||
}
|
||||
}
|
||||
@@ -33,6 +33,17 @@ public final class WxConst {
|
||||
public static final String SANDBOXNEW = "sandboxnew/";
|
||||
public static final String COMBINE = "combine_";
|
||||
public static final String APPID = "appid";
|
||||
public static final String SUB_APPID = "sub_appid";
|
||||
public static final String TRANSACTION_ID = "transaction_id";
|
||||
public static final String OUT_ORDER_NO = "out_order_no";
|
||||
public static final String TYPE = "type";
|
||||
public static final String ACCOUNT = "account";
|
||||
public static final String NAME = "name";
|
||||
public static final String RELATION_TYPE = "relationType";
|
||||
public static final String CUSTOM_RELATION = "customRelation";
|
||||
public static final String DESCRIPTION = "description";
|
||||
public static final String BILL_DATE = "bill_date";
|
||||
public static final String TAR_TYPE = "tar_type";
|
||||
|
||||
public static final String COMBINE_APPID = COMBINE + APPID;
|
||||
public static final String MCH_ID = "mchid";
|
||||
@@ -45,6 +56,8 @@ public final class WxConst {
|
||||
public static final String TIME_START = "time_start";
|
||||
public static final String TIME_EXPIRE = "time_expire";
|
||||
public static final String SUB_ORDERS = "sub_orders";
|
||||
public static final String RECEIVERS = "receivers";
|
||||
public static final String UNFREEZE_UNSPLIT = "unfreeze_unsplit";
|
||||
|
||||
public static final String TOKEN_PATTERN = "mchid=\"%s\",nonce_str=\"%s\",timestamp=\"%d\",serial_no=\"%s\",signature=\"%s\"";
|
||||
|
||||
|
||||
Reference in New Issue
Block a user