java-支付宝支付-支付宝退款

有兴趣的朋友一起学习java 可以加群---源码也在群里,遇到问题,群里大佬可以免费帮忙解决哦!《专注JavaWeb开发》 群号:162582394

码农不容易,码文章更不容易啊,喜欢小编多多支持请点击关注哦,小编会更加努力每天给大家分享技术文章。

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
作者:HONGLINCHEN.上海·黄埔

作者邮箱: [email protected]

请关注作者的今日头条号:《专注JavaWeb开发》 博客地址:
专注JavaWeb开发博客地址

请关注作者的CSDN博客:《专注JavaWeb开发》 博客地址:
专注JavaWeb开发CSDN博客地址

作者的QQ群:专注JavaWeb开发.群号:162582394
点击链接加入群【专注JavaWeb开发】,一起来讨论牛逼的技术吧!

***************************************

支付宝支付Demo

***************************************

第一步,安装支付宝支付需要的jar到本地maven仓库。

1、阿里的支付宝支付需要一个alipay-sdk-java20170829142630.jar包,我们将jar包放到随便一个盘中,如F:\alipay-sdk-java20170829142630.jar

2、cmd开启命令行,进入到maven的目录的bin路径下,然后执行mvn install:install-file -DgroupId=com.alipay -DartifactId=alipay-sdk-java -Dversion=1.0.0 -Dpackaging=jar -Dfile=F:\alipay-sdk-java20170829142630.jar

java-支付宝支付-支付宝退款_第1张图片

maven安装jar到本地仓库成功截图

3、在项目中引入依赖的jar

com.alipay

alipay-sdk-java

1.0.0

第二步,AliPayConfig类,封装的是一些支付用的appid、alipayKey、商户号等常量


package com.aidongsports.constant;
public class AliPayConfig {
public static String APP_ID="替换为自己的";
public static String partner = "替换为自己的";// 合作身份者ID,以2088开头由16位纯数字组成的字符串20889111420456465
public static String APP_PRIVATE_KEY = "替换为自己的";// 私钥
/**
* 该公钥对应开放平台密钥的支付宝公钥,*/
public static String ALIPAY_PUBLIC_KEY="替换为自己的";// 支付宝的公钥
/**
* 这个公钥对应合作伙伴密钥的支付宝公钥,历史接口使用该公钥
*/ 
public static String ali_public_key1 = "替换为自己的";
// 调试用,创建TXT日志文件夹路径
public static String log_path = "/usr/local/tomcat/logs";
public static String CHARSET = "utf-8";//字符编码
public static String SIGN_TYPE = "RSA";//签名方式
}

第三步,写AlipayController类,就是一个简单的支付测试接口,如果大家应用到项目中,可以自己添加一下自己的业务逻辑进去。


package com.mobilepay.alipay.controller;
import com.alibaba.fastjson.JSONObject;
import com.alipay.api.AlipayApiException;
import com.alipay.api.AlipayClient;
import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.domain.AlipayTradeAppPayModel;
import com.alipay.api.request.AlipayTradeAppPayRequest;
import com.alipay.api.request.AlipayTradePayRequest;
import com.alipay.api.request.AlipayTradeRefundRequest;
import com.alipay.api.response.AlipayTradeAppPayResponse;
import com.alipay.api.response.AlipayTradeRefundResponse;
import com.mobilepay.alipay.alipayutils.AliPayConfig;
import com.mobilepay.alipay.alipayutils.AlipayRefund;
import org.apache.log4j.Logger;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* @Author: HONGLINCHEN
* @Description:阿里支付宝支付
* @Date: 2017-07-27 0027.
* @return:
*/
@Controller
public class AlipayController {
private static final Logger logger = Logger.getLogger(AlipayController.class);
@ResponseBody
 @RequestMapping(value = "aliPay", method = {RequestMethod.GET, RequestMethod.POST})
public String aliPay(String number, double money, HttpServletRequest request, HttpServletResponse response) {
String payUrl = null;//返回给前台请求支付的url
 //实例化客户端
AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do", AliPayConfig.APP_ID, AliPayConfig.APP_PRIVATE_KEY, "JSON", AliPayConfig.CHARSET, AliPayConfig.ALIPAY_PUBLIC_KEY, AliPayConfig.SIGN_TYPE);
//实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称:alipay.trade.app.pay
AlipayTradeAppPayRequest aliPayRequest = new AlipayTradeAppPayRequest();
AlipayTradePayRequest request1 = new AlipayTradePayRequest();
//SDK已经封装掉了公共参数,这里只需要传入业务参数。以下方法为sdk的model入参方式(model和biz_content同时存在的情况下取biz_content)。
AlipayTradeAppPayModel model = new AlipayTradeAppPayModel();
model.setBody("HONGLINCHEN");
model.setSubject("HONGLINCHEN支付宝APP支付测试Java");
model.setOutTradeNo(number);//商户网站唯一订单号
model.setTimeoutExpress("30m");//设置超时时间
model.setTotalAmount(String.valueOf(money));//设置支付金额
model.setProductCode("QUICK_MSECURITY_PAY");
aliPayRequest.setBizModel(model);
aliPayRequest.setNotifyUrl("http://www.aidongsports.com/ali");//回调地址
try {
AlipayTradeAppPayResponse aliPayResponse = alipayClient.sdkExecute(aliPayRequest);
payUrl = aliPayResponse.getBody();//就是orderString 可以直接给客户端请求,无需再做处理。
} catch (AlipayApiException e) {
e.printStackTrace();
}
return payUrl;
}}

第四步,测试,我们在浏览器请求这个接口,传递订单号和金额,浏览器就会返回给前台支付参数,前台调用这个支付参数就可以了!(支付标题和内容我们在AlipayController中写死了,这里不用传)

java-支付宝支付-支付宝退款_第2张图片

支付宝支付参数

***************************************

支付宝退款Demo

***************************************

第一步、支付宝退款常量类AlipayRefund


package com.mobilepay.alipay.alipayutils;
/**
* @Author: HONGLINCHEN
* @Description:支付宝退款 类
* @Date: 2017-9-12 15:48
*/
public class AlipayRefund {
private String out_trade_no;//必须 商户订单号
private String trade_no;//必须 支付宝交易号
private String refund_amount;//必须 退款金额
private String refund_reason;//可选 代表 退款的原因说明
private String out_request_no;//可选 标识一次退款请求,同一笔交易多次退款需要保证唯一(就是out_request_no在2次退款一笔交易时,要不一样),如需部分退款,则此参数必传
private String operator_id;//可选 代表 商户的操作员编号
private String store_id;//可选 代表 商户的门店编号
private String terminal_id;//可选 代表 商户的终端编号
public AlipayRefund() {
}
public String getOut_trade_no() {
return out_trade_no;
}
public void setOut_trade_no(String out_trade_no) {
this.out_trade_no = out_trade_no;
}
public String getTrade_no() {
return trade_no;
}
public void setTrade_no(String trade_no) {
this.trade_no = trade_no;
}
public String getRefund_amount() {
return refund_amount;
}
public void setRefund_amount(String refund_amount) {
this.refund_amount = refund_amount;
}
public String getRefund_reason() {
return refund_reason;
}
public void setRefund_reason(String refund_reason) {
this.refund_reason = refund_reason;
}
public String getOut_request_no() {
return out_request_no;
}
public void setOut_request_no(String out_request_no) {
this.out_request_no = out_request_no;
}
public String getOperator_id() {
return operator_id;
}
public void setOperator_id(String operator_id) {
this.operator_id = operator_id;
}
public String getStore_id() {
return store_id;
}
public void setStore_id(String store_id) {
this.store_id = store_id;
}
public String getTerminal_id() {
return terminal_id;
}
public void setTerminal_id(String terminal_id) {
this.terminal_id = terminal_id;
}
}

第二步、SignUtils签名工具类,这个类大家直接复制就好


package com.mobilepay.alipay.alipayutils;
import java.security.KeyFactory;
import java.security.PrivateKey;
import java.security.spec.PKCS8EncodedKeySpec;
/**
* @Author: HONGLINCHEN
* @Description:支付宝签名 类
* @Date: 2017-9-12 15:48
*/
public class SignUtils {
private static final String ALGORITHM = "RSA";
private static final String SIGN_ALGORITHMS = "SHA1WithRSA";
private static final String SIGN_SHA256RSA_ALGORITHMS = "SHA256WithRSA";
private static final String DEFAULT_CHARSET = "UTF-8";
private static String getAlgorithms(boolean rsa2) {
return rsa2 ? SIGN_SHA256RSA_ALGORITHMS : SIGN_ALGORITHMS;
}
public static String sign(String content, String privateKey, boolean rsa2) {
try {
PKCS8EncodedKeySpec priPKCS8 = new PKCS8EncodedKeySpec(
Base64.decode(privateKey));
KeyFactory keyf = KeyFactory.getInstance(ALGORITHM);
PrivateKey priKey = keyf.generatePrivate(priPKCS8);
java.security.Signature signature = java.security.Signature
.getInstance(getAlgorithms(rsa2));
signature.initSign(priKey);
signature.update(content.getBytes(DEFAULT_CHARSET));
byte[] signed = signature.sign();
return Base64.encode(signed);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}

第三步、Base64加密解密工具类,这个类大家直接复制就好


package com.mobilepay.alipay.alipayutils;
/**
* @Author: HONGLINCHEN
* @Description:Base64加密解密类
* @Date: 2017-9-12 15:48
*/
public final class Base64 {
private static final int BASELENGTH = 128;
private static final int LOOKUPLENGTH = 64;
private static final int TWENTYFOURBITGROUP = 24;
private static final int EIGHTBIT = 8;
private static final int SIXTEENBIT = 16;
private static final int FOURBYTE = 4;
private static final int SIGN = -128;
private static char PAD = '=';
private static byte[] base64Alphabet = new byte[BASELENGTH];
private static char[] lookUpBase64Alphabet = new char[LOOKUPLENGTH];
static {
for (int i = 0; i < BASELENGTH; ++i) {
base64Alphabet[i] = -1;
}
for (int i = 'Z'; i >= 'A'; i--) {
base64Alphabet[i] = (byte) (i - 'A');
}
for (int i = 'z'; i >= 'a'; i--) {
base64Alphabet[i] = (byte) (i - 'a' + 26);
}
for (int i = '9'; i >= '0'; i--) {
base64Alphabet[i] = (byte) (i - '0' + 52);
}
base64Alphabet['+'] = 62;
base64Alphabet['/'] = 63;
for (int i = 0; i <= 25; i++) {
lookUpBase64Alphabet[i] = (char) ('A' + i);
}
for (int i = 26, j = 0; i <= 51; i++, j++) {
lookUpBase64Alphabet[i] = (char) ('a' + j);
}
for (int i = 52, j = 0; i <= 61; i++, j++) {
lookUpBase64Alphabet[i] = (char) ('0' + j);
}
lookUpBase64Alphabet[62] = (char) '+';
lookUpBase64Alphabet[63] = (char) '/';
}
private static boolean isWhiteSpace(char octect) {
return (octect == 0x20 || octect == 0xd || octect == 0xa || octect == 0x9);
}
private static boolean isPad(char octect) {
return (octect == PAD);
}
private static boolean isData(char octect) {
return (octect < BASELENGTH && base64Alphabet[octect] != -1);
}
/**
 * Encodes hex octects into Base64
 *
 * @param binaryData
 * Array containing binaryData
 * @return Encoded Base64 array
 */
public static String encode(byte[] binaryData) {
if (binaryData == null) {
return null;
}
int lengthDataBits = binaryData.length * EIGHTBIT;
if (lengthDataBits == 0) {
return "";
}
int fewerThan24bits = lengthDataBits % TWENTYFOURBITGROUP;
int numberTriplets = lengthDataBits / TWENTYFOURBITGROUP;
int numberQuartet = fewerThan24bits != 0 ? numberTriplets + 1
: numberTriplets;
char encodedData[] = null;
encodedData = new char[numberQuartet * 4];
byte k = 0, l = 0, b1 = 0, b2 = 0, b3 = 0;
int encodedIndex = 0;
int dataIndex = 0;
for (int i = 0; i < numberTriplets; i++) {
b1 = binaryData[dataIndex++];
b2 = binaryData[dataIndex++];
b3 = binaryData[dataIndex++];
l = (byte) (b2 & 0x0f);
k = (byte) (b1 & 0x03);
byte val1 = ((b1 & SIGN) == 0) ? (byte) (b1 >> 2)
: (byte) ((b1) >> 2 ^ 0xc0);
byte val2 = ((b2 & SIGN) == 0) ? (byte) (b2 >> 4)
: (byte) ((b2) >> 4 ^ 0xf0);
byte val3 = ((b3 & SIGN) == 0) ? (byte) (b3 >> 6)
: (byte) ((b3) >> 6 ^ 0xfc);
encodedData[encodedIndex++] = lookUpBase64Alphabet[val1];
encodedData[encodedIndex++] = lookUpBase64Alphabet[val2 | (k << 4)];
encodedData[encodedIndex++] = lookUpBase64Alphabet[(l << 2) | val3];
encodedData[encodedIndex++] = lookUpBase64Alphabet[b3 & 0x3f];
}
// form integral number of 6-bit groups
if (fewerThan24bits == EIGHTBIT) {
b1 = binaryData[dataIndex];
k = (byte) (b1 & 0x03);
byte val1 = ((b1 & SIGN) == 0) ? (byte) (b1 >> 2)
: (byte) ((b1) >> 2 ^ 0xc0);
encodedData[encodedIndex++] = lookUpBase64Alphabet[val1];
encodedData[encodedIndex++] = lookUpBase64Alphabet[k << 4];
encodedData[encodedIndex++] = PAD;
encodedData[encodedIndex++] = PAD;
} else if (fewerThan24bits == SIXTEENBIT) {
b1 = binaryData[dataIndex];
b2 = binaryData[dataIndex + 1];
l = (byte) (b2 & 0x0f);
k = (byte) (b1 & 0x03);
byte val1 = ((b1 & SIGN) == 0) ? (byte) (b1 >> 2)
: (byte) ((b1) >> 2 ^ 0xc0);
byte val2 = ((b2 & SIGN) == 0) ? (byte) (b2 >> 4)
: (byte) ((b2) >> 4 ^ 0xf0);
encodedData[encodedIndex++] = lookUpBase64Alphabet[val1];
encodedData[encodedIndex++] = lookUpBase64Alphabet[val2 | (k << 4)];
encodedData[encodedIndex++] = lookUpBase64Alphabet[l << 2];
encodedData[encodedIndex++] = PAD;
}
return new String(encodedData);
}
/**
 * Decodes Base64 data into octects
 *
 * @param encoded
* string containing Base64 data
 * @return Array containind decoded data.
 */
public static byte[] decode(String encoded) {
if (encoded == null) {
return null;
}
char[] base64Data = encoded.toCharArray();
// remove white spaces
int len = removeWhiteSpace(base64Data);
if (len % FOURBYTE != 0) {
return null;// should be divisible by four
}
int numberQuadruple = (len / FOURBYTE);
if (numberQuadruple == 0) {
return new byte[0];
}
byte decodedData[] = null;
byte b1 = 0, b2 = 0, b3 = 0, b4 = 0;
char d1 = 0, d2 = 0, d3 = 0, d4 = 0;
int i = 0;
int encodedIndex = 0;
int dataIndex = 0;
decodedData = new byte[(numberQuadruple) * 3];
for (; i < numberQuadruple - 1; i++) {
if (!isData((d1 = base64Data[dataIndex++]))
|| !isData((d2 = base64Data[dataIndex++]))
|| !isData((d3 = base64Data[dataIndex++]))
|| !isData((d4 = base64Data[dataIndex++]))) {
return null;
}// if found "no data" just return null
b1 = base64Alphabet[d1];
b2 = base64Alphabet[d2];
b3 = base64Alphabet[d3];
b4 = base64Alphabet[d4];
decodedData[encodedIndex++] = (byte) (b1 << 2 | b2 >> 4);
decodedData[encodedIndex++] = (byte) (((b2 & 0xf) << 4) | ((b3 >> 2) & 0xf));
decodedData[encodedIndex++] = (byte) (b3 << 6 | b4);
}
if (!isData((d1 = base64Data[dataIndex++]))
|| !isData((d2 = base64Data[dataIndex++]))) {
return null;// if found "no data" just return null
}
b1 = base64Alphabet[d1];
b2 = base64Alphabet[d2];
d3 = base64Data[dataIndex++];
d4 = base64Data[dataIndex++];
if (!isData((d3)) || !isData((d4))) {// Check if they are PAD characters
if (isPad(d3) && isPad(d4)) {
if ((b2 & 0xf) != 0)// last 4 bits should be zero
{
return null;
}
byte[] tmp = new byte[i * 3 + 1];
System.arraycopy(decodedData, 0, tmp, 0, i * 3);
tmp[encodedIndex] = (byte) (b1 << 2 | b2 >> 4);
return tmp;
} else if (!isPad(d3) && isPad(d4)) {
b3 = base64Alphabet[d3];
if ((b3 & 0x3) != 0)// last 2 bits should be zero
{
return null;
}
byte[] tmp = new byte[i * 3 + 2];
System.arraycopy(decodedData, 0, tmp, 0, i * 3);
tmp[encodedIndex++] = (byte) (b1 << 2 | b2 >> 4);
tmp[encodedIndex] = (byte) (((b2 & 0xf) << 4) | ((b3 >> 2) & 0xf));
return tmp;
} else {
return null;
}
} else { // No PAD e.g 3cQl
b3 = base64Alphabet[d3];
b4 = base64Alphabet[d4];
decodedData[encodedIndex++] = (byte) (b1 << 2 | b2 >> 4);
decodedData[encodedIndex++] = (byte) (((b2 & 0xf) << 4) | ((b3 >> 2) & 0xf));
decodedData[encodedIndex++] = (byte) (b3 << 6 | b4);
}
return decodedData;
}
/**
 * remove WhiteSpace from MIME containing encoded Base64 data.
 *
 * @param data
 * the byte array of base64 data (with WS)
 * @return the new length
 */
private static int removeWhiteSpace(char[] data) {
if (data == null) {
return 0;
}
// count characters that's not whitespace
int newSize = 0;
int len = data.length;
for (int i = 0; i < len; i++) {
if (!isWhiteSpace(data[i])) {
data[newSize++] = data[i];
}
}
return newSize;
}
}

第四步、支付宝退款方法,因为我直接写在AlipayController中,测试退款前提是要先支付,拿到商户订单号和支付宝订单号才可以哦,亲测通过


/**
* @Author: HONGLINCHEN
* @Description: 支付宝退款 退款的金额 不能大于交易金额
* store_id 可选 代表 商户的门店编号
* terminal_id 可选 代表 商户的终端编号
* operator_id 可选 代表 商户的操作员编号
* refund_reason 可选 代表 退款的原因说明
* out_request_no 可选 标识一次退款请求,同一笔交易多次退款需要保证唯一(就是out_request_no在2次退款一笔交易时,要不一样),如需部分退款,则此参数必传
* trade_no 必须 支付宝交易号
* out_trade_no 必须 商户订单号
* refund_amount 必须 退款金额
* @Date: 2017-9-12 15:37
*/
@ResponseBody
@RequestMapping(value = "aliPayRefund", method = {RequestMethod.GET, RequestMethod.POST})
public String alipayRefundRequest() throws AlipayApiException, IllegalAccessException {
AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do",
AliPayConfig.APP_ID, AliPayConfig.APP_PRIVATE_KEY, "json", "UTF-8",
AliPayConfig.ALIPAY_PUBLIC_KEY, "RSA");
AlipayTradeRefundRequest request = new AlipayTradeRefundRequest();
AlipayRefund alipayRefund= new AlipayRefund();
alipayRefund.setOut_trade_no("316594250940");//这个是商户的订单号
alipayRefund.setTrade_no("2017091221001004040242043928");//这个是支付宝的订单号
alipayRefund.setRefund_amount("0.5");//退款金额
alipayRefund.setRefund_reason("正常退款");//退款说明
alipayRefund.setOut_request_no("HZ01RF001");
alipayRefund.setOperator_id("OP001");
alipayRefund.setStore_id("NJ_S_001");
alipayRefund.setTerminal_id("NJ_T_001");//request.setBizContent(JSONUtil.simpleObjectToJsonStr(alipayRefund));
request.setBizContent(JSONObject.toJSONString(alipayRefund));//2个都可以,这个参数的顺序 不影响退款
AlipayTradeRefundResponse response = alipayClient.execute(request);
if (response.isSuccess()) {
System.out.println("调用成功");
} else {
System.out.println("调用失败");
}
return "退款成功";
}

好了,今天的技术内容就分享给大家,码农不容易,小编给大家分享写博客也不容易,请多多支持,喜欢请关注头条号,每天都有功能和bug分享给大家一起学习进步,我们的目标是 ----软件攻城狮

有兴趣的朋友一起学习java 可以加群---《专注JavaWeb开发》 群号:162582394

码农不容易,码文章更不容易啊,喜欢小编多多支持请点击关注哦,小编会更加努力每天给大家分享技术文章。

最后怕有些小朋友jar包缺失。小编特意把pom.xml全部内容贡献上来,以供大家学习参考!


<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0modelVersion>
<groupId>com.mobilepay.examplegroupId>
<artifactId>MobilePayartifactId>
<packaging>warpackaging>
<version>1.0-SNAPSHOTversion>
<name>MobilePay Maven Webappname>
<url>http://maven.apache.orgurl>
<properties>

<spring.version>4.0.2.RELEASEspring.version>

<mybatis.version>3.2.8mybatis.version>

<log4j.version>1.2.17log4j.version>
<slf4j.version>1.7.21slf4j.version>
<project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
properties>
<dependencies>

<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-coreartifactId>
<version>${spring.version}version>
<exclusions>
<exclusion>
<artifactId>commons-loggingartifactId>
<groupId>commons-logginggroupId>
exclusion>
exclusions>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-webartifactId>
<version>${spring.version}version>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-oxmartifactId>
<version>${spring.version}version>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-txartifactId>
<version>${spring.version}version>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-jdbcartifactId>
<version>${spring.version}version>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-webmvcartifactId>
<version>${spring.version}version>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-aopartifactId>
<version>${spring.version}version>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-context-supportartifactId>
<version>${spring.version}version>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-testartifactId>
<version>${spring.version}version>
dependency>

 
<dependency>
<groupId>log4jgroupId>
<artifactId>log4jartifactId>
<version>${log4j.version}version>
dependency>
<dependency>
<groupId>commons-logginggroupId>
<artifactId>commons-loggingartifactId>
<version>1.2version>
dependency>
<dependency>
<groupId>org.slf4jgroupId>
<artifactId>slf4j-apiartifactId>
<version>${slf4j.version}version>
dependency>
<dependency>
<groupId>org.slf4jgroupId>
<artifactId>slf4j-simpleartifactId>
<version>${slf4j.version}version>
<exclusions>
<exclusion>
<groupId>org.slf4jgroupId>
<artifactId>slf4j-apiartifactId>
exclusion>
exclusions>
dependency>

<dependency>
<groupId>junitgroupId>
<artifactId>junitartifactId>
<version>3.8.1version>
<scope>testscope>
dependency>
<dependency>
<groupId>com.alibabagroupId>
<artifactId>fastjsonartifactId>
<version>1.2.32version>
dependency>
<dependency>
<groupId>org.apache.httpcomponentsgroupId>
<artifactId>httpcoreartifactId>
<version>4.4.6version>
dependency>

<dependency>
<groupId>com.github.wxpaygroupId>
<artifactId>wxpay-sdkartifactId>
<version>0.0.3version>
dependency>

<dependency>
<groupId>jdomgroupId>
<artifactId>jdomartifactId>
<version>1.1version>
dependency>

<dependency>
<groupId>com.pentahohub.nexusgroupId>
<artifactId>alipay-sdk-javaartifactId>
<version>20170725114550version>
dependency>

<dependency>
<groupId>com.alipaygroupId>
<artifactId>alipay-sdk-javaartifactId>
<version>1.0.0version>
dependency>
<dependency>
<groupId>commons-httpclientgroupId>
<artifactId>commons-httpclientartifactId>
<version>3.1version>
<exclusions>
<exclusion>
<artifactId>commons-codecartifactId>
<groupId>commons-codecgroupId>
exclusion>
<exclusion>
<artifactId>commons-loggingartifactId>
<groupId>commons-logginggroupId>
exclusion>
<exclusion>
<artifactId>commons-codecartifactId>
<groupId>commons-codecgroupId>
exclusion>
<exclusion>
<artifactId>commons-loggingartifactId>
<groupId>commons-logginggroupId>
exclusion>
exclusions>
dependency>
<dependency>
<groupId>commons-cligroupId>
<artifactId>commons-cliartifactId>
<version>1.4version>
dependency>
<dependency>
<groupId>commons-beanutilsgroupId>
<artifactId>commons-beanutilsartifactId>
<version>1.9.3version>
<exclusions>
<exclusion>
<artifactId>commons-loggingartifactId>
<groupId>commons-logginggroupId>
exclusion>
<exclusion>
<groupId>commons-collectionsgroupId>
<artifactId>commons-collectionsartifactId>
exclusion>
exclusions>
dependency>
<dependency>
<groupId>commons-codecgroupId>
<artifactId>commons-codecartifactId>
<version>1.10version>
dependency>
<dependency>
<groupId>org.apache.httpcomponentsgroupId>
<artifactId>httpclientartifactId>
<version>4.5.3version>
<exclusions>
<exclusion>
<artifactId>commons-codecartifactId>
<groupId>commons-codecgroupId>
exclusion>
<exclusion>
<artifactId>commons-loggingartifactId>
<groupId>commons-logginggroupId>
exclusion>
<exclusion>
<groupId>org.apache.httpcomponentsgroupId>
<artifactId>httpcoreartifactId>
exclusion>
exclusions>
dependency>
<dependency>
<groupId>commons-collectionsgroupId>
<artifactId>commons-collectionsartifactId>
<version>3.2.2version>
dependency>
<dependency>
<groupId>commons-dbcpgroupId>
<artifactId>commons-dbcpartifactId>
<version>1.4version>
<exclusions>
<exclusion>
<artifactId>commons-poolartifactId>
<groupId>commons-poolgroupId>
exclusion>
exclusions>
dependency>
<dependency>
<groupId>commons-poolgroupId>
<artifactId>commons-poolartifactId>
<version>1.6version>
dependency>
<dependency>
<groupId>org.apache.httpcomponentsgroupId>
<artifactId>httpmimeartifactId>
<version>4.5.3version>
<exclusions>
<exclusion>
<groupId>org.apache.httpcomponentsgroupId>
<artifactId>httpclientartifactId>
exclusion>
exclusions>
dependency>
<dependency>
<groupId>net.sf.ezmorphgroupId>
<artifactId>ezmorphartifactId>
<version>1.0.6version>
dependency>
<dependency>
<groupId>dom4jgroupId>
<artifactId>dom4jartifactId>
<version>1.6.1version>
dependency>
<dependency>
<groupId>net.sf.json-libgroupId>
<artifactId>json-libartifactId>
<version>2.4version>
<classifier>jdk15classifier>
<scope>compilescope>
dependency>
dependencies>
<build>
<finalName>MobilePayfinalName>
<plugins>
<plugin>
<groupId>org.apache.maven.pluginsgroupId>
<artifactId>maven-compiler-pluginartifactId>
<version>2.5.1version>
<configuration>
<source>1.8source>
<target>1.8target>
<compilerArgument>-Xlint:allcompilerArgument>
<showWarnings>trueshowWarnings>
<showDeprecation>trueshowDeprecation>
configuration>
plugin>
plugins>
build>
project>

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
作者:HONGLINCHEN.上海·黄埔

作者邮箱: [email protected]

请关注作者的今日头条号:《专注JavaWeb开发》 博客地址:
专注JavaWeb开发博客地址

请关注作者的CSDN博客:《专注JavaWeb开发》 博客地址:
专注JavaWeb开发CSDN博客地址

作者的QQ群:专注JavaWeb开发.群号:162582394
点击链接加入群【专注JavaWeb开发】,一起来讨论牛逼的技术吧!

有兴趣的朋友一起学习java 可以加群---《专注JavaWeb开发》 群号:162582394

你可能感兴趣的:(java)