增加注释,帮助文档

This commit is contained in:
egzosn
2017-03-12 15:22:26 +08:00
parent 4daef9bdaa
commit e6740d8b6d
16 changed files with 434 additions and 61 deletions

View File

@@ -8,6 +8,7 @@ import in.egan.pay.common.bean.*;
import in.egan.pay.common.util.str.StringUtils;
import in.egan.pay.demo.entity.ApyAccount;
import in.egan.pay.demo.entity.PayType;
import in.egan.pay.demo.request.QueryOrder;
import in.egan.pay.demo.service.ApyAccountService;
import in.egan.pay.demo.service.PayResponse;
import in.egan.pay.common.api.PayConfigStorage;
@@ -149,27 +150,73 @@ public class PayController{
/**
* 查询
* @param payId
* @param order 订单的请求体
* @return
*/
@RequestMapping("query")
public Map<String, Object> query(Integer payId) {
PayResponse payResponse = service.getPayResponse(payId);
return payResponse.getService().query("4009922001201703072549284850", "8a2950f95a8e17e1015aa7a6eb872ccb");
public Map<String, Object> query(QueryOrder order) {
PayResponse payResponse = service.getPayResponse(order.getPayId());
return payResponse.getService().query(order.getTradeNo(), order.getOutTradeNo());
}
/**
* 交易关闭接口
* @param order 订单的请求体
* @return
*/
@RequestMapping("close")
public Map<String, Object> close(QueryOrder order) {
PayResponse payResponse = service.getPayResponse(order.getPayId());
return payResponse.getService().close(order.getTradeNo(), order.getOutTradeNo());
}
/**
* 通用接口,根据 TransactionType 类型进行实现
* @param payId
* 申请退款接口
* @param order 订单的请求体
* @return
*/
@RequestMapping("refund")
public Map<String, Object> refund(QueryOrder order) {
PayResponse payResponse = service.getPayResponse(order.getPayId());
return payResponse.getService().refund(order.getTradeNo(), order.getOutTradeNo(), order.getRefundAmount(), order.getTotalAmount());
}
/**
* 查询退款
* @param order 订单的请求体
* @return
*/
@RequestMapping("refundquery")
public Map<String, Object> refundquery(QueryOrder order) {
PayResponse payResponse = service.getPayResponse(order.getPayId());
return payResponse.getService().refundquery(order.getTradeNo(), order.getOutTradeNo());
}
/**
* 下载对账单
* @param order 订单的请求体
* @return
*/
@RequestMapping("downloadbill")
public Object downloadbill(QueryOrder order) {
PayResponse payResponse = service.getPayResponse(order.getPayId());
return payResponse.getService().downloadbill(order.getBillDate(), order.getBillType());
}
/**
* 通用查询接口,根据 TransactionType 类型进行实现,此接口不包括退款
* @param order 订单的请求体
*
* @return
*/
@RequestMapping("secondaryInterface")
public Map<String, Object> secondaryInterface(Integer payId, String transactionType) {
PayResponse payResponse = service.getPayResponse(payId);
TransactionType type = PayType.valueOf(payResponse.getStorage().getPayType()).getTransactionType(transactionType);
return payResponse.getService().secondaryInterface("2017012921001004530273937216", "8a2950f959cf08740159ea0666fc04bd", type, new Callback<Map<String, Object>>() {
public Map<String, Object> secondaryInterface(QueryOrder order) {
PayResponse payResponse = service.getPayResponse(order.getPayId());
TransactionType type = PayType.valueOf(payResponse.getStorage().getPayType()).getTransactionType(order.getTransactionType());
return payResponse.getService().secondaryInterface(order.getTradeNoOrBillDate(), order.getOutTradeNoBillType(), type, new Callback<Map<String, Object>>() {
@Override
public Map<String, Object> perform(Map<String, Object> map) {
return map;

View File

@@ -29,15 +29,16 @@ public class ApyAccountRepository {
{
ApyAccount apyAccount1 = new ApyAccount();
apyAccount1.setPayId(1);
apyAccount1.setPartner("2088****78307");
apyAccount1.setAppid("20160****2728");
apyAccount1.setPartner("2088102169916436");
apyAccount1.setAppid("2016080400165436");
// TODO 2017/2/9 16:20 author: egan sign_type只有单一key时public_key与private_key相等比如sign_type=MD5的情况
apyAccount1.setPublicKey("MIGfMA0GCSqGSIb3DQE************LCUYuLkxpLQIDAQAB");
apyAccount1.setPrivateKey("MIICdwIBADANBg************ZBBpE/RtR9Mty8CQFqhVygF3FIiz5Sc38sz12RqOT7kUQK3R0FiATOtXkKHLzb/QyolOXi/avhLp/gIl7+IqZg51Vx8BvyypnIfKgw=");
apyAccount1.setPublicKey("MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDIgHnOn7LLILlKETd6BFRJ0GqgS2Y3mn1wMQmyh9zEyWlz5p1zrahRahbXAfCfSqshSNfqOmAQzSHRVjCqjsAw1jyqrXaPdKBmr90DIpIxmIyKXv4GGAkPyJ/6FTFY99uhpiq0qadD/uSzQsefWo0aTvP/65zi3eof7TcZ32oWpwIDAQAB");
apyAccount1.setPrivateKey("MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAKroe/8h5vC4L6T+B2WdXiVwGsMvUKgb2XsKix6VY3m2wcf6tyzpNRDCNykbIwGtaeo7FshN+qZxdXHLiIam9goYncBit/8ojfLGy2gLxO/PXfzGxYGs0KsDZ+ryVPPmE34ZZ8jiJpR0ygzCFl8pN3QJPJRGTJn5+FTT9EF/9zyZAgMBAAECgYAktngcYC35u7cQXDk+jMVyiVhWYU2ULxdSpPspgLGzrZyG1saOcTIi/XVX8Spd6+B6nmLQeF/FbU3rOeuD8U2clzul2Z2YMbJ0FYay9oVZFfp5gTEFpFRTVfzqUaZQBIjJe/xHL9kQVqc5xHlE/LVA27/Kx3dbC35Y7B4EVBDYAQJBAOhsX8ZreWLKPhXiXHTyLmNKhOHJc+0tFH7Ktise/0rNspojU7o9prOatKpNylp9v6kux7migcMRdVUWWiVe+4ECQQC8PqsuEz7B0yqirQchRg1DbHjh64bw9Kj82EN1/NzOUd53tP9tg+SO97EzsibK1F7tOcuwqsa7n2aY48mQ+y0ZAkBndA2xcRcnvOOjtAz5VO8G7R12rse181HjGfG6AeMadbKg30aeaGCyIxN1loiSfNR5xsPJwibGIBg81mUrqzqBAkB+K6rkaPXJR9XtzvdWb/N3235yPkDlw7Z4MiOVM3RzvR/VMDV7m8lXoeDde2zQyeMOMYy6ztwA6WgE1bhGOnQRAkEAouUBv1sVdSBlsexX15qphOmAevzYrpufKgJIRLFWQxroXMS7FTesj+f+FmGrpPCxIde1dqJ8lqYLTyJmbzMPYw==\n");
apyAccount1.setNotifyUrl("http://pay.egan.in/payBack2.json");
// 无需同步回调可不填
apyAccount1.setReturnUrl("");
// apyAccount1.setReturnUrl("");
apyAccount1.setInputCharset("UTF-8");
apyAccount1.setSeller("2088102169916436");
apyAccount1.setSignType(SignUtils.RSA.name());
apyAccount1.setPayType(PayType.aliPay);
apyAccount1.setMsgType(MsgType.text);

View File

@@ -54,7 +54,8 @@ public class ApyAccount {
// @Enumerated(EnumType.STRING)
// @Column(name = "msg_type")
private MsgType msgType;
//是否为测试环境
private boolean isTest = false;
public Integer getPayId() {
return payId;
}
@@ -151,6 +152,14 @@ public class ApyAccount {
this.inputCharset = inputCharset;
}
public boolean isTest() {
return isTest;
}
public void setTest(boolean test) {
isTest = test;
}
@Override
public String toString() {
return "ApyAccount{" +

View File

@@ -43,6 +43,7 @@ public enum PayType implements BasePayType {
aliPayConfigStorage.setPayType(apyAccount.getPayType().toString());
aliPayConfigStorage.setMsgType(apyAccount.getMsgType());
aliPayConfigStorage.setInputCharset(apyAccount.getInputCharset());
aliPayConfigStorage.setTest(apyAccount.isTest());
return new AliPayService(aliPayConfigStorage);
}
@@ -67,6 +68,7 @@ public enum PayType implements BasePayType {
wxPayConfigStorage.setPayType(apyAccount.getPayType().toString());
wxPayConfigStorage.setMsgType(apyAccount.getMsgType());
wxPayConfigStorage.setInputCharset(apyAccount.getInputCharset());
wxPayConfigStorage.setTest(apyAccount.isTest());
return new WxPayService(wxPayConfigStorage);
}
@@ -95,6 +97,7 @@ public enum PayType implements BasePayType {
wxPayConfigStorage.setMsgType(apyAccount.getMsgType());
wxPayConfigStorage.setSeller(apyAccount.getSeller());
wxPayConfigStorage.setInputCharset(apyAccount.getInputCharset());
wxPayConfigStorage.setTest(apyAccount.isTest());
return new WxYouDianPayService(wxPayConfigStorage);
}

View File

@@ -0,0 +1,116 @@
package in.egan.pay.demo.request;
import in.egan.pay.common.bean.TransactionType;
import java.math.BigDecimal;
import java.util.Date;
/**
* 订单辅助接口
* @author: egan
* @email egzosn@gmail.com
* @date 2017/3/12 14:50
*/
public class QueryOrder {
private Integer payId;
// 支付平台订单号
private String tradeNo;
// 商户单号
private String outTradeNo;
// 退款金额
private BigDecimal refundAmount;
// 总金额
private BigDecimal totalAmount;
// 账单时间:具体请查看对应支付平台
private Date billDate;
// 账单时间:具体请查看对应支付平台
private String billType;
// 支付平台订单号或者账单日期
private Object tradeNoOrBillDate;
// 商户单号或者 账单类型
private String outTradeNoBillType;
// 交易类型
private String transactionType;
public Integer getPayId() {
return payId;
}
public void setPayId(Integer payId) {
this.payId = payId;
}
public String getTradeNo() {
return tradeNo;
}
public void setTradeNo(String tradeNo) {
this.tradeNo = tradeNo;
}
public String getOutTradeNo() {
return outTradeNo;
}
public void setOutTradeNo(String outTradeNo) {
this.outTradeNo = outTradeNo;
}
public BigDecimal getRefundAmount() {
return refundAmount;
}
public void setRefundAmount(BigDecimal refundAmount) {
this.refundAmount = refundAmount;
}
public BigDecimal getTotalAmount() {
return totalAmount;
}
public void setTotalAmount(BigDecimal totalAmount) {
this.totalAmount = totalAmount;
}
public Date getBillDate() {
return billDate;
}
public void setBillDate(Date billDate) {
this.billDate = billDate;
}
public String getBillType() {
return billType;
}
public void setBillType(String billType) {
this.billType = billType;
}
public Object getTradeNoOrBillDate() {
return tradeNoOrBillDate;
}
public void setTradeNoOrBillDate(Object tradeNoOrBillDate) {
this.tradeNoOrBillDate = tradeNoOrBillDate;
}
public String getOutTradeNoBillType() {
return outTradeNoBillType;
}
public void setOutTradeNoBillType(String outTradeNoBillType) {
this.outTradeNoBillType = outTradeNoBillType;
}
public String getTransactionType() {
return transactionType;
}
public void setTransactionType(String transactionType) {
this.transactionType = transactionType;
}
}

View File

@@ -7,6 +7,7 @@
<body>
账户信息添加用于下面测试
<div>
<form id="form">
@@ -31,7 +32,7 @@
<option>RSA</option>
</select>
<br>
编码类型(建议UTF-8)<input type="text" name="inputCharset">
编码类型(建议UTF-8)<input type="text" name="inputCharset" value="UTF-8">
<br>
支付账户类型 <select name="payType">
<option value="aliPay">aliPay</option>
@@ -44,6 +45,11 @@
<option>xml</option>
<option>json</option>
</select>
<br>
是否为沙箱环境<select type="text" name="isTest">
<option value="true"></option>
<option value="false"></option>
</select>
<br>
</form>
<button id="submit">提交</button>
@@ -51,7 +57,8 @@
<br/>
<div>各个支付对应的<b>交易类型</b>可自行查看对应的官方文档,本项目已实现几种交易类型,对应各个支付类型的<code>in.egan.pay.common.bean.TransactionType</code>具体实现</div>
<div>支付宝(<code>in.egan.pay.ali.bean.AliTransactionType</code>) 即时付款=DIRECT 移动支付=APP 手机网站支付=WAP</div>
<div>旧版支付宝(<code>in.egan.pay.ali.before.bean.AliTransactionType</code>) 即时付款=DIRECT 移动支付=APP 手机网站支付=WAP</div>
<div>新版支付宝(<code>in.egan.pay.ali.bean.AliTransactionType</code>) app支付=APP 手机网站支付=WAP , 扫码付=SWEEPPAY, 条码付=BAR_CODE, 声波付=WAVE_CODE </div>
<div>微信(<code>in.egan.pay.wx.bean.WxTransactionType</code>) 公众号支付=JSAPI 移动支付=APP 扫码付=NATIVE</div>
<div>友店微信(<code>in.egan.pay.wx.youdian.bean.YoudianTransactionType</code>) 扫码付=NATIVE</div>
@@ -92,6 +99,80 @@ APP提交(返回对应的json具体实现app端demo暂时未实现)
<br>
<input type="submit" value="提交">
</form>
<br>
查询账单
<form action="query" target="_blank">
账户id<input type="text" name="payId">
<br>
支付平台订单号<input type="text" name="tradeNo">
<br>
商户单号<input type="text" name="outTradeNo">
<br>
<input type="submit" value="提交">
</form>
<br/>
交易关闭接口
<form action="close" target="_blank">
账户id<input type="text" name="payId">
<br>
支付平台订单号<input type="text" name="tradeNo">
<br>
商户单号<input type="text" name="outTradeNo">
<br>
<input type="submit" value="提交">
</form>
<br/>
申请退款接口
<form action="refund" target="_blank">
账户id<input type="text" name="payId">
<br>
支付平台订单号<input type="text" name="tradeNo">
<br>
商户单号<input type="text" name="outTradeNo">
<br>
退款金额<input type="text" name="refundAmount">
<br>
总金额(微信必填)<input type="text" name="totalAmount">
<br>
<input type="submit" value="提交">
</form>
<br/>
查询退款
<form action="refundquery" target="_blank">
账户id<input type="text" name="payId">
<br>
支付平台订单号<input type="text" name="tradeNo">
<br>
商户单号<input type="text" name="outTradeNo">
<br>
<input type="submit" value="提交">
</form>
<br>
下载对账单(日期,不支持月份)
<form action="downloadbill" target="_blank">
账户id<input type="text" name="payId">
<br>
账单时间:具体请查看对应支付平台<input type="text" name="billDate">
<br>
账单类型 <input type="text" name="billType">
<br>
<input type="submit" value="提交">
</form>
<br>
通用查询接口,根据 交易类型TransactionType 进行实现,此接口不包括退款
<form action="secondaryInterface" target="_blank">
账户id<input type="text" name="payId">
<br>
支付平台订单号或者账单日期<input type="text" name="tradeNoOrBillDate">
<br>
商户单号或者 账单类型<input type="text" name="outTradeNoBillType">
<br>
交易类型<input type="text" name="transactionType">
<br>
<input type="submit" value="提交">
</form>
<script src="jquery-3.1.1.min.js"></script>
<script>
$(function ($) {