转账接口完成

This commit is contained in:
egzosn
2018-02-05 16:13:04 +08:00
parent 924c4d7454
commit af4966c47f
3 changed files with 91 additions and 121 deletions

View File

@@ -13,6 +13,7 @@ import com.egzosn.pay.common.http.HttpConfigStorage;
import com.egzosn.pay.common.http.HttpHeader;
import com.egzosn.pay.common.http.HttpStringEntity;
import com.egzosn.pay.payoneer.bean.PayoneerTransactionType;
import org.apache.http.client.utils.DateUtils;
import org.apache.http.entity.ContentType;
import org.apache.http.message.BasicHeader;
import org.apache.http.protocol.HTTP;
@@ -27,9 +28,11 @@ import java.util.Map;
* payoneer业务逻辑
*
* @author Actinia
* @author egan
* <pre>
* email hayesfu@qq.com
* date 2018-01-19
* email: egzosn@gmail.com
* email: hayesfu@qq.com
* create 2018-01-19
* </pre>
*/
public class PayoneerPayService extends BasePayService implements AdvancedPayService {
@@ -51,6 +54,7 @@ public class PayoneerPayService extends BasePayService implements AdvancedPaySer
private final static String OUT_TRADE_NO = "client_reference_id";
public PayoneerPayService(PayConfigStorage payConfigStorage) {
super(payConfigStorage);
}
@@ -70,7 +74,7 @@ public class PayoneerPayService extends BasePayService implements AdvancedPaySer
public String getAuthorizationPage(String payeeId) {
HttpStringEntity entity = new HttpStringEntity("{\"payee_id\":\"" + payeeId + "\"}", ContentType.APPLICATION_JSON);
JSONObject response = getHttpRequestTemplate().postForObject(getReqUrl(PayoneerTransactionType.registration), entity, JSONObject.class);
JSONObject response = getHttpRequestTemplate().postForObject(getReqUrl(PayoneerTransactionType.REGISTRATION), entity, JSONObject.class);
if (response != null && 0 == response.getIntValue(CODE)) {
return response.getString("registration_link");
}
@@ -132,7 +136,7 @@ public class PayoneerPayService extends BasePayService implements AdvancedPaySer
*/
@Override
public Map<String, Object> orderInfo(PayOrder order) {
Map<String, Object> params = new HashMap<>(5);
Map<String, Object> params = new HashMap<>(7);
params.put("payee_id", order.getAuthCode());
params.put("amount", order.getPrice().setScale(2, BigDecimal.ROUND_HALF_UP));
params.put("client_reference_id", order.getOutTradeNo());
@@ -155,7 +159,7 @@ public class PayoneerPayService extends BasePayService implements AdvancedPaySer
*/
@Override
public String createSign(String content, String characterEncoding) {
return null;
throw new UnsupportedOperationException();
}
@@ -196,7 +200,7 @@ public class PayoneerPayService extends BasePayService implements AdvancedPaySer
*/
@Override
public String buildRequest(Map<String, Object> orderInfo, MethodType method) {
return null;
throw new UnsupportedOperationException();
}
/**
@@ -208,7 +212,7 @@ public class PayoneerPayService extends BasePayService implements AdvancedPaySer
*/
@Override
public BufferedImage genQrPay(PayOrder order) {
return null;
throw new UnsupportedOperationException();
}
/**
@@ -221,7 +225,7 @@ public class PayoneerPayService extends BasePayService implements AdvancedPaySer
@Override
public Map<String, Object> microPay(PayOrder order) {
HttpStringEntity entity = new HttpStringEntity(JSON.toJSONString(orderInfo(order)), ContentType.APPLICATION_JSON);
JSONObject response = getHttpRequestTemplate().postForObject(getReqUrl(PayoneerTransactionType.charge), entity, JSONObject.class);
JSONObject response = getHttpRequestTemplate().postForObject(getReqUrl(PayoneerTransactionType.CHARGE), entity, JSONObject.class);
if (response != null) {
return response;
}
@@ -238,26 +242,9 @@ public class PayoneerPayService extends BasePayService implements AdvancedPaySer
*/
@Override
public Map<String, Object> query(String tradeNo, String outTradeNo) {
JSONObject result = getHttpRequestTemplate().getForObject(getReqUrl(PayoneerTransactionType.chargeStatus), JSONObject.class, outTradeNo);
/* if (0 != result.getIntValue(CODE)) {
throw new PayErrorException(new PayException(result.getString(CODE), result.getString("description"), result.toJSONString()));
}*/
return result;
return secondaryInterface(tradeNo, outTradeNo, PayoneerTransactionType.CHARGE_STATUS);
}
/**
* 交易查询接口,带处理器
*
* @param tradeNo 支付平台订单号
* @param outTradeNo 商户单号
* @param callback 处理器
*
* @return 返回查询回来的结果集
*/
@Override
public <T> T query(String tradeNo, String outTradeNo, Callback<T> callback) {
return callback.perform(query(tradeNo, outTradeNo));
}
/**
* 交易关闭接口
@@ -269,27 +256,7 @@ public class PayoneerPayService extends BasePayService implements AdvancedPaySer
*/
@Override
public Map<String, Object> close(String tradeNo, String outTradeNo) {
JSONObject result = getHttpRequestTemplate().getForObject(getReqUrl(PayoneerTransactionType.chargeCancel), JSONObject.class, outTradeNo);
/* if (0 != result.getIntValue(CODE)) {
throw new PayErrorException(new PayException(result.getString(CODE), result.getString("description"), result.toJSONString()));
}*/
return result;
}
/**
* 交易关闭接口
*
* @param tradeNo 支付平台订单号
* @param outTradeNo 商户单号
* @param callback 处理器
*
* @return 返回支付方交易关闭后的结果
*/
@Override
public <T> T close(String tradeNo, String outTradeNo, Callback<T> callback) {
return callback.perform(close(tradeNo, outTradeNo));
return secondaryInterface(tradeNo, outTradeNo, PayoneerTransactionType.CHARGE_CANCEL);
}
/**
@@ -309,23 +276,7 @@ public class PayoneerPayService extends BasePayService implements AdvancedPaySer
return close(tradeNo, outTradeNo);
}
/**
* 申请退款接口
* 废弃
*
* @param tradeNo 支付平台订单号
* @param outTradeNo 商户单号
* @param refundAmount 退款金额
* @param totalAmount 总金额
* @param callback 处理器
*
* @return 返回支付方申请退款后的结果
* @see #refund(RefundOrder, Callback)
*/
@Override
public <T> T refund(String tradeNo, String outTradeNo, BigDecimal refundAmount, BigDecimal totalAmount, Callback<T> callback) {
return callback.perform(close(tradeNo, outTradeNo));
}
/**
* 申请退款接口
@@ -339,19 +290,6 @@ public class PayoneerPayService extends BasePayService implements AdvancedPaySer
return close(refundOrder.getTradeNo(), refundOrder.getOutTradeNo());
}
/**
* 申请退款接口
*
* @param refundOrder 退款订单信息
* @param callback 处理器
*
* @return 返回支付方申请退款后的结果
*/
@Override
public <T> T refund(RefundOrder refundOrder, Callback<T> callback) {
return close(refundOrder.getTradeNo(), refundOrder.getOutTradeNo(), callback);
}
/**
* 查询退款
*
@@ -362,21 +300,7 @@ public class PayoneerPayService extends BasePayService implements AdvancedPaySer
*/
@Override
public Map<String, Object> refundquery(String tradeNo, String outTradeNo) {
return null;
}
/**
* 查询退款
*
* @param tradeNo 支付平台订单号
* @param outTradeNo 商户单号
* @param callback 处理器
*
* @return 返回支付方查询退款后的结果
*/
@Override
public <T> T refundquery(String tradeNo, String outTradeNo, Callback<T> callback) {
return null;
return new HashMap<>(0);
}
/**
@@ -388,38 +312,60 @@ public class PayoneerPayService extends BasePayService implements AdvancedPaySer
* @return 返回支付方下载对账单的结果
*/
@Override
public Object downloadbill(Date billDate, String billType) {
public Map<String, Object> downloadbill(Date billDate, String billType) {
return null;
return new HashMap<>(0);
}
/**
* 下载对账单
*
* @param billDate 账单时间:具体请查看对应支付平台
* @param billType 账单类型,具体请查看对应支付平台
* @param callback 处理器
*
* @return 返回支付方下载对账单的结果
*/
@Override
public <T> T downloadbill(Date billDate, String billType, Callback<T> callback) {
return null;
}
/**
* 通用查询接口
*
* @param tradeNoOrBillDate 支付平台订单号或者账单日期, 具体请 类型为{@link String }或者 {@link Date },类型须强制限制,类型不对应则抛出异常{@link PayErrorException}
* @param tradeNoOrBillDate 支付平台订单号或者账单类型, 具体请
* 类型为{@link String }或者 {@link Date },类型须强制限制,类型不对应则抛出异常{@link PayErrorException}
* @param outTradeNoBillType 商户单号或者 账单类型
* @param transactionType 交易类型
* @param callback 处理器
*
* @return 返回支付方对应接口的结果
*/
@Override
public <T> T secondaryInterface(Object tradeNoOrBillDate, String outTradeNoBillType, TransactionType transactionType, Callback<T> callback) {
return null;
public Map<String, Object> secondaryInterface(Object tradeNoOrBillDate, String outTradeNoBillType, TransactionType transactionType) {
JSONObject result = getHttpRequestTemplate().getForObject(getReqUrl(transactionType), JSONObject.class, outTradeNoBillType);
return result;
}
/**
* 转账
*
* @param order 转账订单
*
* @return 对应的转账结果
*/
@Override
public Map<String, Object> transfer(TransferOrder order) {
PayOrder payOrder = new PayOrder();
payOrder.setCurType(order.getCurType());
payOrder.setAuthCode(order.getPayeeAccount());
payOrder.setSubject(order.getRemark());
payOrder.setPrice(order.getAmount());
payOrder.setOutTradeNo(order.getOutNo());
Map<String, Object> info = orderInfo(payOrder);
info.put("payout_date", DateUtils.formatDate(new Date(), "yyyy-MM-dd"));
info.put("group_id", order.getPayerName());
HttpStringEntity entity = new HttpStringEntity(JSON.toJSONString(info), ContentType.APPLICATION_JSON);
JSONObject response = getHttpRequestTemplate().postForObject(getReqUrl(PayoneerTransactionType.PAYOUTS), entity, JSONObject.class);
return response;
}
/**
* 转账
*
* @param outNo 商户转账订单号
* @param tradeNo 支付平台转账订单号
*
* @return 对应的转账订单
*/
@Override
public Map<String, Object> transferQuery(String outNo, String tradeNo) {
return secondaryInterface(tradeNo, outNo, PayoneerTransactionType.PAYOUT_STATUS);
}
/**

View File

@@ -5,29 +5,40 @@ import com.egzosn.pay.common.bean.TransactionType;
/**
* 支付类型
* @author Actinia
* @email hayesfu@qq.com
* @author egan
*
* <pre>
* create 2017 2017/1/16 0016
* email: egzosn@gmail.com
* email: hayesfu@qq.com
* create 2017/1/16 0016
* </pre>
*/
public enum PayoneerTransactionType implements TransactionType {
/**
* 收款
* 注册授权
*/
registration("payees/registration-link"),
REGISTRATION("payees/registration-link"),
/**
* 收款
*/
charge("charges"),
CHARGE("charges"),
/**
* 取消收款(取消订单与退款)
*/
chargeCancel("charges/{client_reference_id}/cancel"),
CHARGE_CANCEL("charges/{client_reference_id}/cancel"),
/**
* 查询收款订单与订单状态
*/
chargeStatus("charges/{client_reference_id}/status")
CHARGE_STATUS("charges/{client_reference_id}/status"),
/**
* 转账
*/
PAYOUTS("payouts"),
/**
* 转账状态查询
*/
PAYOUT_STATUS("payouts/{client_reference_id}")
;
private String method;