mirror of
https://gitee.com/egzosn/pay-java-parent.git
synced 2026-06-09 02:42:20 +08:00
移除已废弃的字段与方法
This commit is contained in:
@@ -2,6 +2,22 @@
|
||||
package com.egzosn.pay.demo.controller;
|
||||
|
||||
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.UUID;
|
||||
|
||||
import javax.annotation.PostConstruct;
|
||||
import javax.annotation.Resource;
|
||||
import javax.imageio.ImageIO;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
|
||||
import org.springframework.beans.factory.config.AutowireCapableBeanFactory;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import com.egzosn.pay.ali.api.AliPayConfigStorage;
|
||||
import com.egzosn.pay.ali.api.AliPayService;
|
||||
import com.egzosn.pay.ali.bean.AliRefundResult;
|
||||
@@ -18,20 +34,6 @@ import com.egzosn.pay.common.util.sign.SignUtils;
|
||||
import com.egzosn.pay.demo.request.QueryOrder;
|
||||
import com.egzosn.pay.demo.service.handler.AliPayMessageHandler;
|
||||
import com.egzosn.pay.demo.service.interceptor.AliPayMessageInterceptor;
|
||||
import org.springframework.beans.factory.config.AutowireCapableBeanFactory;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import javax.annotation.PostConstruct;
|
||||
import javax.annotation.Resource;
|
||||
import javax.imageio.ImageIO;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.UUID;
|
||||
|
||||
|
||||
/**
|
||||
@@ -48,22 +50,24 @@ public class AliPayController {
|
||||
private AliPayService service = null;
|
||||
@Resource
|
||||
private AutowireCapableBeanFactory spring;
|
||||
|
||||
/**
|
||||
* 设置普通公钥的方式
|
||||
* 普通公钥方式与证书公钥方式为两者取其一的方式
|
||||
* @param aliPayConfigStorage 支付宝配置信息
|
||||
*
|
||||
* @param aliPayConfigStorage 支付宝配置信息
|
||||
*/
|
||||
private static void keyPublic(AliPayConfigStorage aliPayConfigStorage){
|
||||
private static void keyPublic(AliPayConfigStorage aliPayConfigStorage) {
|
||||
aliPayConfigStorage.setKeyPublic("MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDIgHnOn7LLILlKETd6BFRJ0GqgS2Y3mn1wMQmyh9zEyWlz5p1zrahRahbXAfCfSqshSNfqOmAQzSHRVjCqjsAw1jyqrXaPdKBmr90DIpIxmIyKXv4GGAkPyJ/6FTFY99uhpiq0qadD/uSzQsefWo0aTvP/65zi3eof7TcZ32oWpwIDAQAB");
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置证书公钥信息
|
||||
* 普通公钥方式与证书公钥方式为两者取其一的方式
|
||||
*
|
||||
* @param aliPayConfigStorage 支付宝配置信息
|
||||
*/
|
||||
private static void certKeyPublic(AliPayConfigStorage aliPayConfigStorage){
|
||||
private static void certKeyPublic(AliPayConfigStorage aliPayConfigStorage) {
|
||||
//设置为证书方式
|
||||
aliPayConfigStorage.setCertSign(true);
|
||||
//设置证书存储方式,这里为路径
|
||||
@@ -79,10 +83,10 @@ public class AliPayController {
|
||||
aliPayConfigStorage.setPid("2088102169916436");
|
||||
aliPayConfigStorage.setAppid("2016080400165436");
|
||||
//普通公钥方式与证书公钥方式为两者取其一的方式
|
||||
// keyPublic(aliPayConfigStorage);
|
||||
certKeyPublic(aliPayConfigStorage);
|
||||
// aliPayConfigStorage.setKeyPrivate("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==");
|
||||
aliPayConfigStorage.setKeyPrivate("MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQCw7MD2Cwv/jnXssFjXnGx3JlGF57gJa2aYbJRV8MnNiPVpX4Ha+8ZjnQDhvkrWH4hHmzcujOr213HqloMpUSYBzCPiXGVRUUvdimejcHHTod7nI4g6nztzzfey/TXNDHmp7vY3pOIcjB0Zn0pkNAz2tKAFkqb4raHOqTB0QA0zD24Cn+26J2UJyYRcgeH0GtSQuUrm7yaGsuKakh+qtgWF6R71n5PMGOTQ5LH3i0WVHfCBkNGgJC6yC96HR4D7cosoyKD0+lp8UB/NVUWl7Tt/KLOgFUwh0GKSYFfv56O/VBV2+xqCGE4PlZESfVuOqz5vjjxzw3xDAUJrV8hSX/AJAgMBAAECggEBAKE0d3U4B4yo/2XUIH8EdgfykCFUSum6RFbpyBauORHfksyaSzV+ZvtomN8XhhSn0oJ8OMFfgM+86nz2+zdwSxMkMCYWTfLUAi4v59KRqAVO3kz4oS3Y3FDeAK3D7XuRvGFL7GgzAhtEx1cLPrsiehVn6s5pG15GxsIIgq/JlL1J88wn1zENLrVHmD6z/JpXvfb/RS1yR+5lyoohp4g0Ph9jJ3bCyUbRpK0QkPEzgAuWL0K2ITCL7PYHNAplI8d2xHHOLF9Qdjyx+ZrQ/RxtqzfyWzhqjsmp2qlgNCxWlt3woS9UhDB+nRvjEoWTJmIOszAMYuj8wGlX+3Ui3ALOdQECgYEA25EqnFPFinUnzgNvB6NYmh5STmZun6s4bUOLqwefKtEvrOtRwTu7sB7NIf37fizG3/MJUWHxiLy2/3ub4d2JxdDNBtJoEqnp6QB12qglCNa4CajdjtJa1dR81F9QvytsqEkmPYXFPPyviB0FcSIDAGMb3IbwvIfzBPY9WY8dJnECgYEAzkg3yKEFBZ8BU0WQ+3hyfKUoAhBEnxouxRSTBcXxwstJRiqaGTVe5aoJGQI+0xS7Z6q07XDtN2t97s6DnRLWbljsX6B64itzNhXRyzjdD3iZDU/KSw7khjhXf8XOZaj9eXmACDiUnkEn1xsM8bLiRGqB8y5f3aMY/RpuACGXnxkCgYEAx/zwT9Vpr1RIfjfYcJ+Su0X0994K0roUukj0tUJK8qf4gcsQ+y1aJe/YLib1ZBaKyj7G9O5+HmqtUAUZld/AdoJZzOXmz2EeYhD+R7wxh1xz4rCBpW3qOKvDS3jJxmZaIOoHv6/RWFxb0WGFrGcrTrX3EaWDLmWxr4pNlP5qsbECgYATllntrBR8/ycyEAX/SuWcHlaZM5BAh0zvm8+GGdCmDYWMqxjs0duL9URd4o+ynWJaKqR5c2KjA4r2tRdcP+Cqo7j2L5fbiAKtnQ7JvEGJaYsm72+nBuf+MrVkRZUepBhFg5r7rNu31zoAO+pTvQetNWvXeozRz93ckrjlPEtYaQKBgQDFwbV92rlRMLjZzlY+o0knoeJBjPQmPdiBTpGNimdy9L4c2Ure7affjcUiYhkKqrK5k5SScJTATgyQ7JF346FdtUtZ/6Kkj1RwJmmprPrDa9CATLoTle7g9OVd4sHT2ITHZMzPaF3ILvzcwJ70AD1xcxCQb+/7sDPmw7Mc8gOA7Q==");
|
||||
keyPublic(aliPayConfigStorage);
|
||||
aliPayConfigStorage.setKeyPrivate("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==");
|
||||
// certKeyPublic(aliPayConfigStorage);
|
||||
// aliPayConfigStorage.setKeyPrivate("MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQCw7MD2Cwv/jnXssFjXnGx3JlGF57gJa2aYbJRV8MnNiPVpX4Ha+8ZjnQDhvkrWH4hHmzcujOr213HqloMpUSYBzCPiXGVRUUvdimejcHHTod7nI4g6nztzzfey/TXNDHmp7vY3pOIcjB0Zn0pkNAz2tKAFkqb4raHOqTB0QA0zD24Cn+26J2UJyYRcgeH0GtSQuUrm7yaGsuKakh+qtgWF6R71n5PMGOTQ5LH3i0WVHfCBkNGgJC6yC96HR4D7cosoyKD0+lp8UB/NVUWl7Tt/KLOgFUwh0GKSYFfv56O/VBV2+xqCGE4PlZESfVuOqz5vjjxzw3xDAUJrV8hSX/AJAgMBAAECggEBAKE0d3U4B4yo/2XUIH8EdgfykCFUSum6RFbpyBauORHfksyaSzV+ZvtomN8XhhSn0oJ8OMFfgM+86nz2+zdwSxMkMCYWTfLUAi4v59KRqAVO3kz4oS3Y3FDeAK3D7XuRvGFL7GgzAhtEx1cLPrsiehVn6s5pG15GxsIIgq/JlL1J88wn1zENLrVHmD6z/JpXvfb/RS1yR+5lyoohp4g0Ph9jJ3bCyUbRpK0QkPEzgAuWL0K2ITCL7PYHNAplI8d2xHHOLF9Qdjyx+ZrQ/RxtqzfyWzhqjsmp2qlgNCxWlt3woS9UhDB+nRvjEoWTJmIOszAMYuj8wGlX+3Ui3ALOdQECgYEA25EqnFPFinUnzgNvB6NYmh5STmZun6s4bUOLqwefKtEvrOtRwTu7sB7NIf37fizG3/MJUWHxiLy2/3ub4d2JxdDNBtJoEqnp6QB12qglCNa4CajdjtJa1dR81F9QvytsqEkmPYXFPPyviB0FcSIDAGMb3IbwvIfzBPY9WY8dJnECgYEAzkg3yKEFBZ8BU0WQ+3hyfKUoAhBEnxouxRSTBcXxwstJRiqaGTVe5aoJGQI+0xS7Z6q07XDtN2t97s6DnRLWbljsX6B64itzNhXRyzjdD3iZDU/KSw7khjhXf8XOZaj9eXmACDiUnkEn1xsM8bLiRGqB8y5f3aMY/RpuACGXnxkCgYEAx/zwT9Vpr1RIfjfYcJ+Su0X0994K0roUukj0tUJK8qf4gcsQ+y1aJe/YLib1ZBaKyj7G9O5+HmqtUAUZld/AdoJZzOXmz2EeYhD+R7wxh1xz4rCBpW3qOKvDS3jJxmZaIOoHv6/RWFxb0WGFrGcrTrX3EaWDLmWxr4pNlP5qsbECgYATllntrBR8/ycyEAX/SuWcHlaZM5BAh0zvm8+GGdCmDYWMqxjs0duL9URd4o+ynWJaKqR5c2KjA4r2tRdcP+Cqo7j2L5fbiAKtnQ7JvEGJaYsm72+nBuf+MrVkRZUepBhFg5r7rNu31zoAO+pTvQetNWvXeozRz93ckrjlPEtYaQKBgQDFwbV92rlRMLjZzlY+o0knoeJBjPQmPdiBTpGNimdy9L4c2Ure7affjcUiYhkKqrK5k5SScJTATgyQ7JF346FdtUtZ/6Kkj1RwJmmprPrDa9CATLoTle7g9OVd4sHT2ITHZMzPaF3ILvzcwJ70AD1xcxCQb+/7sDPmw7Mc8gOA7Q==");
|
||||
aliPayConfigStorage.setNotifyUrl("http://pay.egzosn.com/payBack.json");
|
||||
aliPayConfigStorage.setReturnUrl("http://pay.egzosn.com/payBack.html");
|
||||
aliPayConfigStorage.setSignType(SignUtils.RSA2.name());
|
||||
@@ -97,7 +101,7 @@ public class AliPayController {
|
||||
httpConfigStorage.setMaxTotal(20);
|
||||
//默认的每个路由的最大连接数
|
||||
httpConfigStorage.setDefaultMaxPerRoute(10);
|
||||
service = new AliPayService(aliPayConfigStorage, httpConfigStorage);
|
||||
service = new AliPayService(aliPayConfigStorage, httpConfigStorage);
|
||||
//增加支付回调消息拦截器
|
||||
service.addPayMessageInterceptor(new AliPayMessageInterceptor());
|
||||
//设置回调消息处理
|
||||
@@ -105,16 +109,15 @@ public class AliPayController {
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 跳到支付页面
|
||||
* 针对实时支付,即时付款
|
||||
*
|
||||
* @param price 金额
|
||||
* @param price 金额
|
||||
* @return 跳到支付页面
|
||||
*/
|
||||
@RequestMapping(value = "toPay.html", produces = "text/html;charset=UTF-8")
|
||||
public String toPay( BigDecimal price) {
|
||||
public String toPay(BigDecimal price) {
|
||||
//及时收款
|
||||
PayOrder order = new PayOrder("订单title", "摘要", null == price ? BigDecimal.valueOf(0.01) : price, UUID.randomUUID().toString().replace("-", ""), AliTransactionType.PAGE);
|
||||
//WAP
|
||||
@@ -127,8 +130,6 @@ public class AliPayController {
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 获取支付预订单信息
|
||||
*
|
||||
@@ -148,35 +149,39 @@ public class AliPayController {
|
||||
/**
|
||||
* 获取二维码图像
|
||||
* 二维码支付
|
||||
* @param price 金额
|
||||
*
|
||||
* @param price 金额
|
||||
* @return 二维码图像
|
||||
* @throws IOException IOException
|
||||
*/
|
||||
@RequestMapping(value = "toQrPay.jpg", produces = "image/jpeg;charset=UTF-8")
|
||||
public byte[] toQrPay( BigDecimal price) throws IOException {
|
||||
public byte[] toQrPay(BigDecimal price) throws IOException {
|
||||
//获取对应的支付账户操作工具(可根据账户id)
|
||||
ByteArrayOutputStream baos = new ByteArrayOutputStream();
|
||||
ImageIO.write(service.genQrPay( new PayOrder("订单title", "摘要", null == price ? BigDecimal.valueOf(0.01) : price, System.currentTimeMillis()+"", AliTransactionType.SWEEPPAY)), "JPEG", baos);
|
||||
ImageIO.write(service.genQrPay(new PayOrder("订单title", "摘要", null == price ? BigDecimal.valueOf(0.01) : price, System.currentTimeMillis() + "", AliTransactionType.SWEEPPAY)), "JPEG", baos);
|
||||
return baos.toByteArray();
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取二维码地址
|
||||
* 二维码支付
|
||||
* @param price 金额
|
||||
*
|
||||
* @param price 金额
|
||||
* @return 二维码图像
|
||||
* @throws IOException IOException
|
||||
*/
|
||||
@RequestMapping(value = "getQrPay.json")
|
||||
public String getQrPay(BigDecimal price) throws IOException {
|
||||
//获取对应的支付账户操作工具(可根据账户id)
|
||||
return service.getQrPay( new PayOrder("订单title", "摘要", null == price ? BigDecimal.valueOf(0.01) : price, System.currentTimeMillis()+"", AliTransactionType.SWEEPPAY));
|
||||
return service.getQrPay(new PayOrder("订单title", "摘要", null == price ? BigDecimal.valueOf(0.01) : price, System.currentTimeMillis() + "", AliTransactionType.SWEEPPAY));
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 刷卡付,pos主动扫码付款(条码付)
|
||||
* @param authCode 授权码,条码等
|
||||
* @param price 金额
|
||||
*
|
||||
* @param authCode 授权码,条码等
|
||||
* @param price 金额
|
||||
* @return 支付结果
|
||||
*/
|
||||
@RequestMapping(value = "microPay")
|
||||
@@ -184,7 +189,7 @@ public class AliPayController {
|
||||
//获取对应的支付账户操作工具(可根据账户id)
|
||||
//条码付
|
||||
PayOrder order = new PayOrder("egan order", "egan order", null == price ? BigDecimal.valueOf(0.01) : price, UUID.randomUUID().toString().replace("-", ""), AliTransactionType.BAR_CODE);
|
||||
//声波付
|
||||
//声波付
|
||||
// PayOrder order = new PayOrder("egan order", "egan order", null == price ? BigDecimal.valueOf(0.01) : price, UUID.randomUUID().toString().replace("-", ""), AliTransactionType.WAVE_CODE);
|
||||
//设置授权码,条码等
|
||||
order.setAuthCode(authCode);
|
||||
@@ -204,15 +209,13 @@ public class AliPayController {
|
||||
|
||||
/**
|
||||
* 支付回调地址 方式一
|
||||
*
|
||||
* <p>
|
||||
* 方式二,{@link #payBack(HttpServletRequest)} 是属于简化方式, 试用与简单的业务场景
|
||||
*
|
||||
*
|
||||
* @param request 请求
|
||||
*
|
||||
* @return 返回对应的响应码
|
||||
* @see #payBack(HttpServletRequest)
|
||||
* @throws IOException IOException
|
||||
* @see #payBack(HttpServletRequest)
|
||||
*/
|
||||
@Deprecated
|
||||
@RequestMapping(value = "payBackBefore.json")
|
||||
@@ -233,15 +236,15 @@ public class AliPayController {
|
||||
|
||||
return service.getPayOutMessage("fail", "失败").toMessage();
|
||||
}
|
||||
|
||||
/**
|
||||
* 支付回调地址
|
||||
*
|
||||
* @param request 请求
|
||||
*
|
||||
* @return 返回对应的响应码
|
||||
*
|
||||
* <p>
|
||||
* 业务处理在对应的PayMessageHandler里面处理,在哪里设置PayMessageHandler,详情查看{@link com.egzosn.pay.common.api.PayService#setPayMessageHandler(com.egzosn.pay.common.api.PayMessageHandler)}
|
||||
*
|
||||
* <p>
|
||||
* 如果未设置 {@link com.egzosn.pay.common.api.PayMessageHandler} 那么会使用默认的 {@link com.egzosn.pay.common.api.DefaultPayMessageHandler}
|
||||
* @throws IOException IOException
|
||||
*/
|
||||
@@ -290,6 +293,7 @@ public class AliPayController {
|
||||
public Map<String, Object> close(QueryOrder order) {
|
||||
return service.close(order.getTradeNo(), order.getOutTradeNo());
|
||||
}
|
||||
|
||||
/**
|
||||
* 交易c撤销接口
|
||||
*
|
||||
@@ -339,7 +343,6 @@ public class AliPayController {
|
||||
* 转账
|
||||
*
|
||||
* @param order 转账订单
|
||||
*
|
||||
* @return 对应的转账结果
|
||||
*/
|
||||
@RequestMapping("transfer")
|
||||
@@ -363,7 +366,6 @@ public class AliPayController {
|
||||
*
|
||||
* @param outNo 商户转账订单号
|
||||
* @param tradeNo 支付平台转账订单号
|
||||
*
|
||||
* @return 对应的转账订单
|
||||
*/
|
||||
@RequestMapping("transferQuery")
|
||||
|
||||
@@ -2,13 +2,37 @@
|
||||
package com.egzosn.pay.demo.controller;
|
||||
|
||||
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.UUID;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import javax.imageio.ImageIO;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
|
||||
import org.springframework.web.bind.annotation.PathVariable;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
import org.springframework.web.servlet.ModelAndView;
|
||||
|
||||
import static com.egzosn.pay.demo.dao.ApyAccountRepository.apyAccounts;
|
||||
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.egzosn.pay.ali.api.AliPayService;
|
||||
import com.egzosn.pay.ali.bean.AliTransactionType;
|
||||
import com.egzosn.pay.common.api.PayConfigStorage;
|
||||
import com.egzosn.pay.common.api.PayMessageInterceptor;
|
||||
import com.egzosn.pay.common.api.PayService;
|
||||
import com.egzosn.pay.common.bean.*;
|
||||
import com.egzosn.pay.common.bean.MethodType;
|
||||
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.http.UriVariables;
|
||||
import com.egzosn.pay.common.util.MatrixToImageWriter;
|
||||
import com.egzosn.pay.common.util.str.StringUtils;
|
||||
@@ -18,22 +42,6 @@ import com.egzosn.pay.demo.request.QueryOrder;
|
||||
import com.egzosn.pay.demo.service.ApyAccountService;
|
||||
import com.egzosn.pay.demo.service.PayResponse;
|
||||
import com.egzosn.pay.wx.bean.WxTransactionType;
|
||||
import org.springframework.web.bind.annotation.PathVariable;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
import org.springframework.web.servlet.ModelAndView;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import javax.imageio.ImageIO;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.UUID;
|
||||
|
||||
import static com.egzosn.pay.demo.dao.ApyAccountRepository.apyAccounts;
|
||||
|
||||
/**
|
||||
* 发起支付入口
|
||||
@@ -76,7 +84,7 @@ public class PayController {
|
||||
* 跳到支付页面
|
||||
* 针对实时支付,即时付款
|
||||
*
|
||||
* @param request 请求
|
||||
* @param request 请求
|
||||
* @param payId 账户id
|
||||
* @param transactionType 交易类型, 这个针对于每一个 支付类型的对应的几种交易方式
|
||||
* @param bankType 针对刷卡支付,卡的类型,类型值
|
||||
@@ -115,6 +123,7 @@ public class PayController {
|
||||
/**
|
||||
* 跳到支付页面
|
||||
* 针对实时支付,即时付款
|
||||
*
|
||||
* @param request 请求
|
||||
* @return 跳到支付页面
|
||||
*/
|
||||
@@ -164,7 +173,7 @@ public class PayController {
|
||||
*
|
||||
* @param payId 支付账户id
|
||||
* @param transactionType 交易类型
|
||||
* @param price 金额
|
||||
* @param price 金额
|
||||
* @return 支付预订单信息
|
||||
*/
|
||||
@RequestMapping("app")
|
||||
@@ -188,7 +197,7 @@ public class PayController {
|
||||
* @return 支付结果
|
||||
*/
|
||||
@RequestMapping(value = "microPay")
|
||||
public Map<String, Object> microPay(Integer payId, String transactionType, BigDecimal price, String authCode) {
|
||||
public Map<String, Object> microPay(Integer payId, String transactionType, BigDecimal price, String authCode) {
|
||||
//获取对应的支付账户操作工具(可根据账户id)
|
||||
PayResponse payResponse = service.getPayResponse(payId);
|
||||
|
||||
@@ -200,7 +209,7 @@ public class PayController {
|
||||
PayConfigStorage storage = payResponse.getService().getPayConfigStorage();
|
||||
//校验
|
||||
if (payResponse.getService().verify(params)) {
|
||||
PayMessage message = new PayMessage(params, storage.getPayType(), storage.getMsgType().name());
|
||||
PayMessage message = new PayMessage(params, storage.getPayType());
|
||||
//支付校验通过后的处理
|
||||
payResponse.getRouter().route(message);
|
||||
}
|
||||
@@ -215,7 +224,6 @@ public class PayController {
|
||||
* @param payId 账户id
|
||||
* @param transactionType 交易类型, 这个针对于每一个 支付类型的对应的几种交易方式
|
||||
* @param price 金额
|
||||
*
|
||||
* @return 二维码图像
|
||||
* @throws IOException IOException
|
||||
*/
|
||||
@@ -228,10 +236,12 @@ public class PayController {
|
||||
ImageIO.write(payResponse.getService().genQrPay(new PayOrder("订单title", "摘要", null == price ? BigDecimal.valueOf(0.01) : price, System.currentTimeMillis() + "", PayType.valueOf(payResponse.getStorage().getPayType()).getTransactionType(transactionType))), "JPEG", baos);
|
||||
return baos.toByteArray();
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取二维码地址
|
||||
* 二维码支付
|
||||
* @param price 金额
|
||||
*
|
||||
* @param price 金额
|
||||
* @return 二维码图像
|
||||
* @throws IOException IOException
|
||||
*/
|
||||
@@ -240,8 +250,9 @@ public class PayController {
|
||||
//获取对应的支付账户操作工具(可根据账户id)
|
||||
//获取对应的支付账户操作工具(可根据账户id)
|
||||
PayResponse payResponse = service.getPayResponse(payId);
|
||||
return payResponse.getService().getQrPay( new PayOrder("订单title", "摘要", null == price ? BigDecimal.valueOf(0.01) : price, System.currentTimeMillis() + "", PayType.valueOf(payResponse.getStorage().getPayType()).getTransactionType(transactionType)));
|
||||
return payResponse.getService().getQrPay(new PayOrder("订单title", "摘要", null == price ? BigDecimal.valueOf(0.01) : price, System.currentTimeMillis() + "", PayType.valueOf(payResponse.getStorage().getPayType()).getTransactionType(transactionType)));
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取一码付二维码图像
|
||||
* 二维码支付
|
||||
@@ -249,7 +260,7 @@ public class PayController {
|
||||
* @param wxPayId 微信账户id
|
||||
* @param aliPayId 支付宝id
|
||||
* @param price 金额
|
||||
* @param request 请求
|
||||
* @param request 请求
|
||||
* @return 二维码图像
|
||||
* @throws IOException IOException
|
||||
*/
|
||||
@@ -279,7 +290,7 @@ public class PayController {
|
||||
* @param wxPayId 微信账户id
|
||||
* @param aliPayId 支付宝id
|
||||
* @param price 金额
|
||||
* @param request 请求
|
||||
* @param request 请求
|
||||
* @return 支付宝与微信平台的判断
|
||||
* @throws IOException IOException
|
||||
*/
|
||||
@@ -309,15 +320,13 @@ public class PayController {
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 支付回调地址 方式一
|
||||
* <p>
|
||||
* 方式二,{@link #payBack(HttpServletRequest, Integer)} 是属于简化方式, 试用与简单的业务场景
|
||||
*
|
||||
* @param request 请求
|
||||
* @param payId 账户id
|
||||
* @param payId 账户id
|
||||
* @return 支付是否成功
|
||||
* @throws IOException IOException
|
||||
*/
|
||||
@@ -361,14 +370,14 @@ public class PayController {
|
||||
* 方式二
|
||||
*
|
||||
* @param request 请求
|
||||
* @param payId 账户id
|
||||
* @param payId 账户id
|
||||
* @return 支付是否成功
|
||||
* @throws IOException IOException
|
||||
* 拦截器相关增加, 详情查看{@link com.egzosn.pay.common.api.PayService#addPayMessageInterceptor(PayMessageInterceptor)}
|
||||
* <p>
|
||||
* 业务处理在对应的PayMessageHandler里面处理,在哪里设置PayMessageHandler,详情查看{@link com.egzosn.pay.common.api.PayService#setPayMessageHandler(com.egzosn.pay.common.api.PayMessageHandler)}
|
||||
* </p>
|
||||
* 如果未设置 {@link com.egzosn.pay.common.api.PayMessageHandler} 那么会使用默认的 {@link com.egzosn.pay.common.api.DefaultPayMessageHandler}
|
||||
* 拦截器相关增加, 详情查看{@link com.egzosn.pay.common.api.PayService#addPayMessageInterceptor(PayMessageInterceptor)}
|
||||
* <p>
|
||||
* 业务处理在对应的PayMessageHandler里面处理,在哪里设置PayMessageHandler,详情查看{@link com.egzosn.pay.common.api.PayService#setPayMessageHandler(com.egzosn.pay.common.api.PayMessageHandler)}
|
||||
* </p>
|
||||
* 如果未设置 {@link com.egzosn.pay.common.api.PayMessageHandler} 那么会使用默认的 {@link com.egzosn.pay.common.api.DefaultPayMessageHandler}
|
||||
*/
|
||||
@RequestMapping(value = "payBack{payId}.json")
|
||||
public String payBack(HttpServletRequest request, @PathVariable Integer payId) throws IOException {
|
||||
@@ -417,6 +426,7 @@ public class PayController {
|
||||
|
||||
/**
|
||||
* 申请退款接口
|
||||
*
|
||||
* @param payId 账户id
|
||||
* @param order 订单的请求体
|
||||
* @return 返回支付方申请退款后的结果
|
||||
@@ -426,7 +436,8 @@ public class PayController {
|
||||
PayResponse payResponse = service.getPayResponse(payId);
|
||||
|
||||
// return payResponse.getService().refund(order.getTradeNo(), order.getOutTradeNo(), order.getRefundAmount(), order.getTotalAmount());
|
||||
return payResponse.getService().refund(order);
|
||||
final PayService service = payResponse.getService();
|
||||
return service.refund(order);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -457,22 +468,9 @@ public class PayController {
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 通用查询接口,根据 TransactionType 类型进行实现,此接口不包括退款
|
||||
*
|
||||
* @param order 订单的请求体
|
||||
* @return 返回支付方对应接口的结果
|
||||
*/
|
||||
@RequestMapping("secondaryInterface")
|
||||
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);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 转账
|
||||
*
|
||||
* @param payId 账户id
|
||||
* @param order 转账订单
|
||||
* @return 对应的转账结果
|
||||
@@ -485,7 +483,8 @@ public class PayController {
|
||||
|
||||
/**
|
||||
* 转账查询
|
||||
* @param payId 账户id
|
||||
*
|
||||
* @param payId 账户id
|
||||
* @param outNo 商户转账订单号
|
||||
* @param tradeNo 支付平台转账订单号
|
||||
* @return 对应的转账订单
|
||||
|
||||
@@ -1,6 +1,18 @@
|
||||
package com.egzosn.pay.demo.controller;
|
||||
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.UUID;
|
||||
|
||||
import javax.annotation.PostConstruct;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import com.egzosn.pay.common.api.PayService;
|
||||
import com.egzosn.pay.common.bean.DefaultCurType;
|
||||
import com.egzosn.pay.common.bean.PayOrder;
|
||||
@@ -10,17 +22,6 @@ import com.egzosn.pay.common.http.HttpConfigStorage;
|
||||
import com.egzosn.pay.paypal.api.PayPalConfigStorage;
|
||||
import com.egzosn.pay.paypal.api.PayPalPayService;
|
||||
import com.egzosn.pay.paypal.bean.PayPalTransactionType;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import javax.annotation.PostConstruct;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Map;
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
* 发起支付入口
|
||||
@@ -39,13 +40,13 @@ public class PayPalPayController {
|
||||
@PostConstruct
|
||||
public void init() {
|
||||
PayPalConfigStorage storage = new PayPalConfigStorage();
|
||||
storage.setClientID("AZ7HTcvrEAxYbzYx_iDZAi06GdqbjhqqQzFgPBFLxm2VUMzwlmiNUBk_y_5QNP4zWKblTuM6ZBAmxScd");
|
||||
storage.setClientSecret("EBMIjAag6NiRdXZxteTv0amEsmKN345xJv3bN7f_HRXSqcRJlW7PXhYXjI9sk5I4nKYOHgeqzhXCXKFo");
|
||||
storage.setClientID("AZDS0IhUZvJTO99unlvSDMfbZIP-p-UecYXZdJoweha9LFuqKXKcQIGZgfVaX6oGiAOJAUuJD7JwyTl1");
|
||||
storage.setClientSecret("EK2YaOrw3oLSDWIRzvb9BWGTjiPPhY1fFUu5ylhUsGYLc_h_dlpJ0hr_LDEkbO9MyKP2P83YcywbPaem");
|
||||
storage.setTest(true);
|
||||
//发起付款后的页面转跳地址
|
||||
storage.setReturnUrl("http://www.egzosn.com/payPal/payBack.json");
|
||||
//取消按钮转跳地址,这里用异步通知地址的兼容的做法
|
||||
storage.setNotifyUrl("http://www.egzosn.com/pay/cancel");
|
||||
storage.setCancelUrl("http://www.egzosn.com/pay/cancel");
|
||||
service = new PayPalPayService(storage);
|
||||
|
||||
//请求连接池配置
|
||||
@@ -76,11 +77,12 @@ public class PayPalPayController {
|
||||
String toPayHtml = service.toPay(order);
|
||||
|
||||
//某些支付下单时无法设置单号,通过下单后返回对应单号,如 paypal,友店。
|
||||
String outTradeNo = order.getOutTradeNo();
|
||||
System.out.println("支付订单号:" + outTradeNo + " 这里可以进行回存");
|
||||
String tradeNo = order.getTradeNo();
|
||||
System.out.println("支付订单号:" + tradeNo + " 这里可以进行回存");
|
||||
|
||||
return toPayHtml;
|
||||
}
|
||||
|
||||
/**
|
||||
* 申请退款接口
|
||||
*
|
||||
@@ -98,10 +100,13 @@ public class PayPalPayController {
|
||||
}
|
||||
|
||||
|
||||
/* */
|
||||
|
||||
/**
|
||||
* return url
|
||||
* PayPal确认付款调用的接口
|
||||
* 用户确认付款后,paypal调用的这个方法执行付款
|
||||
*
|
||||
* @param request 请求
|
||||
* @return 付款成功信息
|
||||
* @throws IOException IOException
|
||||
@@ -118,17 +123,17 @@ public class PayPalPayController {
|
||||
return "failure";
|
||||
}
|
||||
|
||||
/* */
|
||||
|
||||
/**
|
||||
* 支付回调地址
|
||||
*
|
||||
* @param request 请求
|
||||
*
|
||||
* @param request 请求
|
||||
* @return 结果
|
||||
* @throws IOException IOException
|
||||
* 业务处理在对应的PayMessageHandler里面处理,在哪里设置PayMessageHandler,详情查看{@link com.egzosn.pay.common.api.PayService#setPayMessageHandler(com.egzosn.pay.common.api.PayMessageHandler)}
|
||||
*
|
||||
* 如果未设置 {@link com.egzosn.pay.common.api.PayMessageHandler} 那么会使用默认的 {@link com.egzosn.pay.common.api.DefaultPayMessageHandler}
|
||||
*
|
||||
* 业务处理在对应的PayMessageHandler里面处理,在哪里设置PayMessageHandler,详情查看{@link com.egzosn.pay.common.api.PayService#setPayMessageHandler(com.egzosn.pay.common.api.PayMessageHandler)}
|
||||
* <p>
|
||||
* 如果未设置 {@link com.egzosn.pay.common.api.PayMessageHandler} 那么会使用默认的 {@link com.egzosn.pay.common.api.DefaultPayMessageHandler}
|
||||
*/
|
||||
@RequestMapping(value = "payBack.json")
|
||||
public String payBack(HttpServletRequest request) throws IOException {
|
||||
|
||||
@@ -1,23 +1,30 @@
|
||||
package com.egzosn.pay.demo.controller;
|
||||
|
||||
import com.egzosn.pay.common.bean.*;
|
||||
import com.egzosn.pay.common.http.HttpConfigStorage;
|
||||
import com.egzosn.pay.demo.request.QueryOrder;
|
||||
import com.egzosn.pay.payoneer.api.PayoneerConfigStorage;
|
||||
import com.egzosn.pay.payoneer.api.PayoneerPayService;
|
||||
import com.egzosn.pay.payoneer.bean.PayoneerTransactionType;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.ResponseBody;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import javax.annotation.PostConstruct;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import java.io.IOException;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.Map;
|
||||
import java.util.UUID;
|
||||
|
||||
import javax.annotation.PostConstruct;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.ResponseBody;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import com.egzosn.pay.common.bean.DefaultCurType;
|
||||
import com.egzosn.pay.common.bean.PayOrder;
|
||||
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.http.HttpConfigStorage;
|
||||
import com.egzosn.pay.demo.request.QueryOrder;
|
||||
import com.egzosn.pay.payoneer.api.PayoneerConfigStorage;
|
||||
import com.egzosn.pay.payoneer.api.PayoneerPayService;
|
||||
import com.egzosn.pay.payoneer.bean.PayoneerTransactionType;
|
||||
|
||||
/**
|
||||
* @author egan
|
||||
* email egzosn@gmail.com
|
||||
@@ -34,7 +41,6 @@ public class PayoneerPayController {
|
||||
public void init() {
|
||||
PayoneerConfigStorage configStorage = new PayoneerConfigStorage();
|
||||
configStorage.setProgramId("商户id");
|
||||
configStorage.setMsgType(MsgType.json);
|
||||
configStorage.setInputCharset("utf-8");
|
||||
configStorage.setUserName("PayoneerPay 用户名");
|
||||
configStorage.setApiPassword("PayoneerPay API password");
|
||||
@@ -63,11 +69,12 @@ public class PayoneerPayController {
|
||||
|
||||
/**
|
||||
* 获取授权页面
|
||||
*
|
||||
* @param payeeId 用户id
|
||||
* @return 获取授权页面
|
||||
*/
|
||||
@RequestMapping("getAuthorizationPage.json")
|
||||
public Map<String ,Object> getAuthorizationPage( String payeeId ){
|
||||
public Map<String, Object> getAuthorizationPage(String payeeId) {
|
||||
|
||||
Map<String, Object> data = new LinkedHashMap<>();
|
||||
data.put("code", 0);
|
||||
@@ -75,13 +82,14 @@ public class PayoneerPayController {
|
||||
return data;
|
||||
}
|
||||
|
||||
/**
|
||||
/**
|
||||
* 获取授权用户信息,包含用户状态,注册时间,联系人信息,地址信息等等
|
||||
*
|
||||
* @param payeeId 用户id
|
||||
* @return 获取授权用户信息
|
||||
*/
|
||||
@RequestMapping("getAuthorizationUser.json")
|
||||
public Map<String ,Object> getAuthorizationUser( String payeeId ){
|
||||
public Map<String, Object> getAuthorizationUser(String payeeId) {
|
||||
|
||||
Map<String, Object> data = new LinkedHashMap<>();
|
||||
data.put("code", 0);
|
||||
@@ -92,36 +100,36 @@ public class PayoneerPayController {
|
||||
|
||||
/**
|
||||
* 主动收款
|
||||
* @param price 金额
|
||||
* @param userId 付款用户
|
||||
*
|
||||
* @param price 金额
|
||||
* @param userId 付款用户
|
||||
* @return 支付结果
|
||||
*/
|
||||
@ResponseBody
|
||||
@RequestMapping(value = "microPay.json")
|
||||
public Map<String, Object> microPay(BigDecimal price, String userId){
|
||||
public Map<String, Object> microPay(BigDecimal price, String userId) {
|
||||
|
||||
PayOrder order = new PayOrder("Order_payment:", "Order payment", price, UUID.randomUUID().toString().replace("-", ""), PayoneerTransactionType.CHARGE);
|
||||
//币种
|
||||
order.setCurType(DefaultCurType.USD);
|
||||
//设置授权码,条码等
|
||||
order.setAuthCode( userId);
|
||||
order.setAuthCode(userId);
|
||||
//支付结果
|
||||
Map<String, Object> params = service.microPay(order);
|
||||
if (10700 == (Integer) params.get(PayoneerPayService.CODE)){
|
||||
if (10700 == (Integer) params.get(PayoneerPayService.CODE)) {
|
||||
System.out.println("未授权");
|
||||
}else if (0 == (Integer) params.get(PayoneerPayService.CODE)){
|
||||
}
|
||||
else if (0 == (Integer) params.get(PayoneerPayService.CODE)) {
|
||||
System.out.println("收款成功");
|
||||
}
|
||||
return params;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 用户授权回调地址
|
||||
*
|
||||
* @param request 请求
|
||||
*
|
||||
* @return 是否成功
|
||||
* @throws IOException IOException
|
||||
*/
|
||||
@@ -166,6 +174,7 @@ public class PayoneerPayController {
|
||||
public Map<String, Object> close(QueryOrder order) {
|
||||
return service.close(order.getTradeNo(), order.getOutTradeNo());
|
||||
}
|
||||
|
||||
/**
|
||||
* 申请退款接口
|
||||
*
|
||||
@@ -173,7 +182,7 @@ public class PayoneerPayController {
|
||||
* @return 返回支付方申请退款后的结果
|
||||
*/
|
||||
@RequestMapping("refund")
|
||||
public Map<String, Object> refund(RefundOrder order) {
|
||||
public RefundResult refund(RefundOrder order) {
|
||||
return service.refund(order);
|
||||
}
|
||||
|
||||
@@ -195,7 +204,6 @@ public class PayoneerPayController {
|
||||
* 转账
|
||||
*
|
||||
* @param order 转账订单
|
||||
*
|
||||
* @return 对应的转账结果
|
||||
*/
|
||||
@RequestMapping("transfer")
|
||||
@@ -213,7 +221,6 @@ public class PayoneerPayController {
|
||||
*
|
||||
* @param outNo 商户转账订单号
|
||||
* @param tradeNo 支付平台转账订单号
|
||||
*
|
||||
* @return 对应的转账订单
|
||||
*/
|
||||
@RequestMapping("transferQuery")
|
||||
|
||||
@@ -3,16 +3,16 @@
|
||||
|
||||
package com.egzosn.pay.demo.dao;
|
||||
|
||||
import com.egzosn.pay.common.bean.MsgType;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import com.egzosn.pay.common.util.sign.SignUtils;
|
||||
import com.egzosn.pay.demo.entity.ApyAccount;
|
||||
import com.egzosn.pay.demo.entity.PayType;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* 账户
|
||||
*
|
||||
* @author: egan
|
||||
* email egzosn@gmail.com
|
||||
* date 2016/11/18 1:21
|
||||
@@ -21,12 +21,11 @@ import java.util.Map;
|
||||
public class ApyAccountRepository {
|
||||
|
||||
// 这里简单模拟,引入orm等框架之后可自行删除
|
||||
public static Map<Integer, ApyAccount> apyAccounts = new HashMap<>();
|
||||
public static Map<Integer, ApyAccount> apyAccounts = new HashMap<>();
|
||||
|
||||
/**
|
||||
* 这里简单初始化,引入orm等框架之后可自行删除
|
||||
*/
|
||||
{
|
||||
*/ {
|
||||
ApyAccount apyAccount1 = new ApyAccount();
|
||||
apyAccount1.setPayId(1);
|
||||
apyAccount1.setPartner("2088102169916436");
|
||||
@@ -41,7 +40,6 @@ public class ApyAccountRepository {
|
||||
apyAccount1.setSeller("2088102169916436");
|
||||
apyAccount1.setSignType(SignUtils.RSA.name());
|
||||
apyAccount1.setPayType(PayType.aliPay);
|
||||
apyAccount1.setMsgType(MsgType.text);
|
||||
//设置测试环境
|
||||
apyAccount1.setTest(true);
|
||||
apyAccounts.put(apyAccount1.getPayId(), apyAccount1);
|
||||
@@ -60,7 +58,6 @@ public class ApyAccountRepository {
|
||||
apyAccount2.setSeller("1469188802");
|
||||
apyAccount2.setSignType(SignUtils.MD5.name());
|
||||
apyAccount2.setPayType(PayType.wxPay);
|
||||
apyAccount2.setMsgType(MsgType.xml);
|
||||
//设置测试环境
|
||||
apyAccount2.setTest(false);
|
||||
apyAccounts.put(apyAccount2.getPayId(), apyAccount2);
|
||||
@@ -78,7 +75,6 @@ public class ApyAccountRepository {
|
||||
apyAccount3.setInputCharset("UTF-8");
|
||||
apyAccount3.setSignType(SignUtils.MD5.name());
|
||||
apyAccount3.setPayType(PayType.wxPay);
|
||||
apyAccount3.setMsgType(MsgType.xml);
|
||||
apyAccounts.put(apyAccount3.getPayId(), apyAccount3);
|
||||
|
||||
ApyAccount apyAccount4 = new ApyAccount();
|
||||
@@ -95,7 +91,6 @@ public class ApyAccountRepository {
|
||||
apyAccount4.setInputCharset("UTF-8");
|
||||
apyAccount4.setSignType(SignUtils.RSA2.name());
|
||||
apyAccount4.setPayType(PayType.unionPay);
|
||||
apyAccount4.setMsgType(MsgType.json);
|
||||
apyAccount4.setTest(true);
|
||||
apyAccounts.put(apyAccount4.getPayId(), apyAccount4);
|
||||
|
||||
@@ -106,7 +101,6 @@ public class ApyAccountRepository {
|
||||
apyAccount5.setStorePassword("12BkDT8152Zj");//API password
|
||||
apyAccount5.setInputCharset("UTF-8");
|
||||
apyAccount5.setPayType(PayType.payoneer);
|
||||
apyAccount5.setMsgType(MsgType.json);
|
||||
apyAccount5.setTest(true);
|
||||
apyAccounts.put(apyAccount5.getPayId(), apyAccount5);
|
||||
|
||||
@@ -116,7 +110,6 @@ public class ApyAccountRepository {
|
||||
apyAccount6.setPrivateKey("1EBMIjAag6NiRdXZxteTv0amEsmKN345xJv3bN7f_HRXSqcRJlW7PXhYXjI9sk5I4nKYOHgeqzhXCXKFo");//API password
|
||||
apyAccount6.setInputCharset("UTF-8");
|
||||
apyAccount6.setPayType(PayType.payPal);
|
||||
apyAccount6.setMsgType(MsgType.json);
|
||||
apyAccount6.setTest(true);
|
||||
apyAccounts.put(apyAccount6.getPayId(), apyAccount6);
|
||||
}
|
||||
@@ -125,10 +118,11 @@ public class ApyAccountRepository {
|
||||
|
||||
/**
|
||||
* 根据id获取对应的账户信息
|
||||
*
|
||||
* @param payId 账户id
|
||||
* @return 账户信息
|
||||
*/
|
||||
public ApyAccount findByPayId(Integer payId){
|
||||
public ApyAccount findByPayId(Integer payId) {
|
||||
// TODO 2016/11/18 1:23 author: egan 这里简单模拟 具体实现 略。。
|
||||
return apyAccounts.get(payId);
|
||||
}
|
||||
|
||||
@@ -2,12 +2,11 @@
|
||||
|
||||
package com.egzosn.pay.demo.entity;
|
||||
|
||||
import com.egzosn.pay.common.bean.MsgType;
|
||||
|
||||
//import javax.persistence.*;
|
||||
|
||||
/**
|
||||
* 支付账户
|
||||
*
|
||||
* @author: egan
|
||||
* email egzosn@gmail.com
|
||||
* date 2016/11/18 0:36
|
||||
@@ -59,12 +58,9 @@ public class ApyAccount {
|
||||
// @Enumerated(EnumType.STRING)
|
||||
// @Column(name = "pay_type")
|
||||
private PayType payType;
|
||||
// 消息类型,text,xml,json
|
||||
// @Enumerated(EnumType.STRING)
|
||||
// @Column(name = "msg_type")
|
||||
private MsgType msgType;
|
||||
//是否为测试环境
|
||||
private boolean isTest = false;
|
||||
|
||||
public Integer getPayId() {
|
||||
return payId;
|
||||
}
|
||||
@@ -145,14 +141,6 @@ public class ApyAccount {
|
||||
this.payType = payType;
|
||||
}
|
||||
|
||||
public MsgType getMsgType() {
|
||||
return msgType;
|
||||
}
|
||||
|
||||
public void setMsgType(MsgType msgType) {
|
||||
this.msgType = msgType;
|
||||
}
|
||||
|
||||
public String getInputCharset() {
|
||||
return inputCharset;
|
||||
}
|
||||
@@ -199,7 +187,6 @@ public class ApyAccount {
|
||||
", signType='" + signType + '\'' +
|
||||
", inputCharset='" + inputCharset + '\'' +
|
||||
", payType=" + payType +
|
||||
", msgType=" + msgType +
|
||||
'}';
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,7 +6,6 @@ import com.egzosn.pay.ali.bean.AliTransactionType;
|
||||
import com.egzosn.pay.common.api.PayService;
|
||||
import com.egzosn.pay.common.bean.BasePayType;
|
||||
import com.egzosn.pay.common.bean.CertStoreType;
|
||||
import com.egzosn.pay.common.bean.MsgType;
|
||||
import com.egzosn.pay.common.bean.TransactionType;
|
||||
import com.egzosn.pay.common.http.HttpConfigStorage;
|
||||
import com.egzosn.pay.demo.service.handler.WxPayMessageHandler;
|
||||
@@ -30,7 +29,6 @@ import com.egzosn.pay.wx.youdian.api.WxYouDianPayService;
|
||||
import com.egzosn.pay.wx.youdian.bean.YoudianTransactionType;
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 支付类型
|
||||
*
|
||||
@@ -41,7 +39,7 @@ import com.egzosn.pay.wx.youdian.bean.YoudianTransactionType;
|
||||
public enum PayType implements BasePayType {
|
||||
|
||||
|
||||
aliPay{
|
||||
aliPay {
|
||||
/**
|
||||
* @see com.egzosn.pay.ali.api.AliPayService
|
||||
* @param apyAccount
|
||||
@@ -61,7 +59,6 @@ public enum PayType implements BasePayType {
|
||||
configStorage.setSignType(apyAccount.getSignType());
|
||||
configStorage.setSeller(apyAccount.getSeller());
|
||||
configStorage.setPayType(apyAccount.getPayType().toString());
|
||||
configStorage.setMsgType(apyAccount.getMsgType());
|
||||
configStorage.setInputCharset(apyAccount.getInputCharset());
|
||||
configStorage.setTest(apyAccount.isTest());
|
||||
//请求连接池配置
|
||||
@@ -82,7 +79,7 @@ public enum PayType implements BasePayType {
|
||||
}
|
||||
|
||||
|
||||
},wxPay {
|
||||
}, wxPay {
|
||||
@Override
|
||||
public PayService getPayService(ApyAccount apyAccount) {
|
||||
WxPayConfigStorage wxPayConfigStorage = new WxPayConfigStorage();
|
||||
@@ -95,7 +92,6 @@ public enum PayType implements BasePayType {
|
||||
wxPayConfigStorage.setReturnUrl(apyAccount.getReturnUrl());
|
||||
wxPayConfigStorage.setSignType(apyAccount.getSignType());
|
||||
wxPayConfigStorage.setPayType(apyAccount.getPayType().toString());
|
||||
wxPayConfigStorage.setMsgType(apyAccount.getMsgType());
|
||||
wxPayConfigStorage.setInputCharset(apyAccount.getInputCharset());
|
||||
wxPayConfigStorage.setTest(apyAccount.isTest());
|
||||
|
||||
@@ -124,7 +120,7 @@ public enum PayType implements BasePayType {
|
||||
|
||||
return WxTransactionType.valueOf(transactionType);
|
||||
}
|
||||
},youdianPay {
|
||||
}, youdianPay {
|
||||
@Override
|
||||
public PayService getPayService(ApyAccount apyAccount) {
|
||||
// TODO 2017/1/23 14:12 author: egan 集群的话,友店可能会有bug。暂未测试集群环境
|
||||
@@ -135,11 +131,10 @@ public enum PayType implements BasePayType {
|
||||
// wxPayConfigStorage.setReturnUrl(apyAccount.getReturnUrl());
|
||||
wxPayConfigStorage.setSignType(apyAccount.getSignType());
|
||||
wxPayConfigStorage.setPayType(apyAccount.getPayType().toString());
|
||||
wxPayConfigStorage.setMsgType(apyAccount.getMsgType());
|
||||
wxPayConfigStorage.setSeller(apyAccount.getSeller());
|
||||
wxPayConfigStorage.setInputCharset(apyAccount.getInputCharset());
|
||||
wxPayConfigStorage.setTest(apyAccount.isTest());
|
||||
return new WxYouDianPayService(wxPayConfigStorage);
|
||||
return new WxYouDianPayService(wxPayConfigStorage);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -153,8 +148,7 @@ public enum PayType implements BasePayType {
|
||||
|
||||
return YoudianTransactionType.valueOf(transactionType);
|
||||
}
|
||||
},fuiou{
|
||||
|
||||
}, fuiou {
|
||||
@Override
|
||||
public PayService getPayService(ApyAccount apyAccount) {
|
||||
FuiouPayConfigStorage fuiouPayConfigStorage = new FuiouPayConfigStorage();
|
||||
@@ -164,7 +158,6 @@ public enum PayType implements BasePayType {
|
||||
fuiouPayConfigStorage.setReturnUrl(apyAccount.getReturnUrl());
|
||||
fuiouPayConfigStorage.setSignType(apyAccount.getSignType());
|
||||
fuiouPayConfigStorage.setPayType(apyAccount.getPayType().toString());
|
||||
fuiouPayConfigStorage.setMsgType(apyAccount.getMsgType());
|
||||
fuiouPayConfigStorage.setInputCharset(apyAccount.getInputCharset());
|
||||
fuiouPayConfigStorage.setTest(apyAccount.isTest());
|
||||
return new FuiouPayService(fuiouPayConfigStorage);
|
||||
@@ -176,8 +169,7 @@ public enum PayType implements BasePayType {
|
||||
}
|
||||
|
||||
|
||||
},unionPay{
|
||||
|
||||
}, unionPay {
|
||||
@Override
|
||||
public PayService getPayService(ApyAccount apyAccount) {
|
||||
UnionPayConfigStorage unionPayConfigStorage = new UnionPayConfigStorage();
|
||||
@@ -201,7 +193,6 @@ public enum PayType implements BasePayType {
|
||||
unionPayConfigStorage.setReturnUrl(apyAccount.getReturnUrl());
|
||||
unionPayConfigStorage.setSignType(apyAccount.getSignType());
|
||||
unionPayConfigStorage.setPayType(apyAccount.getPayType().toString());
|
||||
unionPayConfigStorage.setMsgType(apyAccount.getMsgType());
|
||||
unionPayConfigStorage.setInputCharset(apyAccount.getInputCharset());
|
||||
unionPayConfigStorage.setTest(apyAccount.isTest());
|
||||
return new UnionPayService(unionPayConfigStorage);
|
||||
@@ -213,13 +204,12 @@ public enum PayType implements BasePayType {
|
||||
}
|
||||
|
||||
|
||||
},payoneer{
|
||||
}, payoneer {
|
||||
@Override
|
||||
public PayService getPayService(ApyAccount apyAccount) {
|
||||
PayoneerConfigStorage configStorage = new PayoneerConfigStorage();
|
||||
//设置商户Id
|
||||
configStorage.setProgramId(apyAccount.getPartner());
|
||||
configStorage.setMsgType(MsgType.json);
|
||||
configStorage.setInputCharset("utf-8");
|
||||
//"PayoneerPay 用户名"
|
||||
configStorage.setUserName(apyAccount.getSeller());
|
||||
@@ -243,7 +233,7 @@ public enum PayType implements BasePayType {
|
||||
}
|
||||
|
||||
|
||||
},payPal{
|
||||
}, payPal {
|
||||
@Override
|
||||
public PayService getPayService(ApyAccount apyAccount) {
|
||||
PayPalConfigStorage storage = new PayPalConfigStorage();
|
||||
|
||||
@@ -1,22 +1,28 @@
|
||||
package com.egzosn.pay.demo.service;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
|
||||
import org.springframework.beans.factory.config.AutowireCapableBeanFactory;
|
||||
|
||||
import com.egzosn.pay.common.api.PayConfigStorage;
|
||||
import com.egzosn.pay.common.api.PayMessageHandler;
|
||||
import com.egzosn.pay.common.api.PayMessageRouter;
|
||||
import com.egzosn.pay.common.api.PayService;
|
||||
import com.egzosn.pay.common.bean.MsgType;
|
||||
import com.egzosn.pay.common.http.HttpConfigStorage;
|
||||
import com.egzosn.pay.demo.entity.ApyAccount;
|
||||
import com.egzosn.pay.demo.entity.PayType;
|
||||
import com.egzosn.pay.demo.service.handler.*;
|
||||
import com.egzosn.pay.demo.service.handler.AliPayMessageHandler;
|
||||
import com.egzosn.pay.demo.service.handler.FuiouPayMessageHandler;
|
||||
import com.egzosn.pay.demo.service.handler.PayoneerMessageHandler;
|
||||
import com.egzosn.pay.demo.service.handler.UnionPayMessageHandler;
|
||||
import com.egzosn.pay.demo.service.handler.WxPayMessageHandler;
|
||||
import com.egzosn.pay.demo.service.handler.YouDianPayMessageHandler;
|
||||
import com.egzosn.pay.demo.service.interceptor.AliPayMessageInterceptor;
|
||||
import com.egzosn.pay.demo.service.interceptor.YoudianPayMessageInterceptor;
|
||||
import org.springframework.beans.factory.config.AutowireCapableBeanFactory;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
|
||||
/**
|
||||
* 支付响应对象
|
||||
*
|
||||
* @author: egan
|
||||
* email egzosn@gmail.com
|
||||
* date 2016/11/18 0:34
|
||||
@@ -38,6 +44,7 @@ public class PayResponse {
|
||||
|
||||
/**
|
||||
* 初始化支付配置
|
||||
*
|
||||
* @param apyAccount 账户信息
|
||||
* @see ApyAccount 对应表结构详情--》 /pay-java-demo/resources/apy_account.sql
|
||||
*/
|
||||
@@ -52,13 +59,14 @@ public class PayResponse {
|
||||
|
||||
/**
|
||||
* 获取http配置,如果配置为null则为默认配置,无代理,无证书的请求方式。
|
||||
* 此处非必需
|
||||
* 此处非必需
|
||||
*
|
||||
* @param apyAccount 账户信息
|
||||
* @return 请求配置
|
||||
*/
|
||||
public HttpConfigStorage getHttpConfigStorage(ApyAccount apyAccount){
|
||||
public HttpConfigStorage getHttpConfigStorage(ApyAccount apyAccount) {
|
||||
HttpConfigStorage httpConfigStorage = new HttpConfigStorage();
|
||||
/* 网路代理配置 根据需求进行设置*/
|
||||
/* 网路代理配置 根据需求进行设置*/
|
||||
// //http代理地址
|
||||
// httpConfigStorage.setHttpProxyHost("192.168.1.69");
|
||||
// //代理端口
|
||||
@@ -77,6 +85,7 @@ public class PayResponse {
|
||||
|
||||
/**
|
||||
* 配置路由
|
||||
*
|
||||
* @param payId 指定账户id,用户多微信支付多支付宝支付
|
||||
*/
|
||||
private void buildRouter(Integer payId) {
|
||||
@@ -84,7 +93,6 @@ public class PayResponse {
|
||||
router
|
||||
.rule()
|
||||
//消息类型
|
||||
.msgType(MsgType.text.name())
|
||||
//支付账户事件类型
|
||||
.payType(PayType.aliPay.name())
|
||||
//拦截器
|
||||
@@ -93,33 +101,27 @@ public class PayResponse {
|
||||
.handler(spring.getBean(AliPayMessageHandler.class))
|
||||
.end()
|
||||
.rule()
|
||||
.msgType(MsgType.xml.name())
|
||||
.payType(PayType.wxPay.name())
|
||||
.handler(autowire(new WxPayMessageHandler(payId)))
|
||||
.end()
|
||||
.rule()
|
||||
.msgType(MsgType.json.name())
|
||||
.payType(PayType.youdianPay.name())
|
||||
.interceptor(new YoudianPayMessageInterceptor()) //拦截器
|
||||
.handler(autowire(new YouDianPayMessageHandler(payId)))
|
||||
.end()
|
||||
.rule()
|
||||
.msgType(MsgType.xml.name())
|
||||
.payType(PayType.fuiou.name())
|
||||
.handler(autowire(new FuiouPayMessageHandler(payId)))
|
||||
.end()
|
||||
.rule()
|
||||
.msgType(MsgType.json.name())
|
||||
.payType(PayType.unionPay.name())
|
||||
.handler(autowire(new UnionPayMessageHandler(payId)))
|
||||
.end()
|
||||
.rule()
|
||||
.msgType(MsgType.json.name())
|
||||
.payType(PayType.payoneer.name())
|
||||
.handler(autowire(new PayoneerMessageHandler(payId)))
|
||||
.end()
|
||||
.rule()
|
||||
.msgType(MsgType.text.name())
|
||||
.payType(PayType.payPal.name())
|
||||
.handler(spring.getBean(AliPayMessageHandler.class))
|
||||
.end()
|
||||
|
||||
Reference in New Issue
Block a user