mirror of
https://gitee.com/egzosn/pay-java-parent.git
synced 2026-05-31 04:49:54 +08:00
增加注释,帮助文档
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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{" +
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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 ($) {
|
||||
|
||||
Reference in New Issue
Block a user