package com.sandu.ximon.admin.utils;
|
|
import com.alipay.api.AlipayApiException;
|
import com.alipay.api.AlipayClient;
|
import com.alipay.api.DefaultAlipayClient;
|
import com.alipay.api.domain.AlipayTradeRefundModel;
|
import com.alipay.api.request.AlipayTradeQueryRequest;
|
import com.alipay.api.request.AlipayTradeRefundRequest;
|
import com.alipay.api.response.AlipayTradeRefundResponse;
|
import com.google.gson.Gson;
|
import com.sandu.ximon.admin.config.AlipayConfig;
|
import com.sandu.ximon.admin.pay.alipay.UsrAlipayConfigService;
|
import com.sandu.ximon.dao.domain.AliConfigEntity;
|
import lombok.AllArgsConstructor;
|
|
|
import java.text.SimpleDateFormat;
|
import java.util.Date;
|
import java.util.Map;
|
|
@AllArgsConstructor
|
public class AliPayUtils {
|
|
|
public static boolean alipayQuery(String out_trade_no, Long streetlightId) {
|
AliConfigEntity WxConfigEntity = UsrAlipayConfigService.getBean().getConfigByPoleId(streetlightId);// 获取客户的支付宝配置
|
String checkStr = ConfigCheckUtils.checkAlipayConfig(WxConfigEntity);
|
if( checkStr != null){
|
LogUtils.error("查询失败");
|
return false;
|
}
|
//获得初始化的AlipayClient
|
AlipayClient alipayClient = new DefaultAlipayClient(AlipayConfig.gatewayUrl,
|
WxConfigEntity.getAppId(), WxConfigEntity.getPrivateKey(),
|
AlipayConfig.format, AlipayConfig.charset, WxConfigEntity.
|
getPublicKey(), AlipayConfig.sign_type);
|
|
//设置请求参数
|
AlipayTradeQueryRequest alipayRequest = new AlipayTradeQueryRequest();
|
|
//商户订单号,商户网站订单系统中唯一订单号
|
alipayRequest.setBizContent("{\"out_trade_no\":\""+ out_trade_no +"\"}");
|
|
//请求
|
String result = null;
|
try {
|
result = alipayClient.execute(alipayRequest).getBody();
|
} catch (AlipayApiException e) {
|
e.printStackTrace();
|
}
|
Map map = (Map) new Gson().fromJson(result,Map.class).get("alipay_trade_query_response");
|
if (map.get("sub_msg") != null) {
|
if ("交易不存在".equals(map.get("sub_msg"))) {
|
return false;
|
}
|
}
|
if(map.get("trade_status")==null){
|
return false;
|
}
|
if("TRADE_SUCCESS".equals(map.get("trade_status"))){
|
// String payTime = (String) map.get("send_pay_date");
|
return true;
|
}else if("TRADE_CLOSED".equals(map.get("trade_status"))){
|
LogUtils.error("交易已关闭(支付宝)");
|
return false;
|
}
|
return false;
|
}
|
|
|
|
/**
|
* 支付宝退款接口
|
* @return
|
*/
|
public static boolean alipayrefund(Long streetlightId,
|
String out_trade_no,
|
Double refundAmount) {
|
//LogService.getBean().log((long)0, ServerTask.SERVER_TASK,"退款操作",null,"{ 进行支付宝退款:"+out_trade_no+" }");
|
//退款金额,不能大于订单总金额
|
String refund_amount = refundAmount+"";
|
//退款的原因说明
|
String refund_reason = "充电桩退款";
|
//标识一次退款请求,同一笔交易多次退款需要保证唯一,如需部分退款,则此参数必传。
|
String out_request_no = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date());
|
|
AliConfigEntity WxConfigEntity = UsrAlipayConfigService.getBean().getConfigByPoleId(streetlightId); //找到是哪个客户的充电桩 就退款给谁
|
String checkStr = ConfigCheckUtils.checkAlipayConfig(WxConfigEntity);
|
if( checkStr != null){
|
return false;
|
}
|
|
// SDK 公共请求类,包含公共请求参数,以及封装了签名与验签,开发者无需关注签名与验签
|
AlipayClient client = new DefaultAlipayClient(AlipayConfig.gatewayUrl, WxConfigEntity.getAppId(),
|
WxConfigEntity.getPrivateKey(), AlipayConfig.format,
|
AlipayConfig.charset, WxConfigEntity.getPublicKey(), AlipayConfig.sign_type);
|
AlipayTradeRefundRequest alipay_request = new AlipayTradeRefundRequest();
|
AlipayTradeRefundModel model = new AlipayTradeRefundModel();
|
model.setOutTradeNo(out_trade_no);
|
// model.setTradeNo(out_trade_no);
|
model.setRefundAmount(refund_amount);
|
model.setRefundReason(refund_reason);
|
model.setOutRequestNo(out_request_no);
|
alipay_request.setBizModel(model);
|
|
AlipayTradeRefundResponse alipay_response = null;
|
try {
|
alipay_response = client.execute(alipay_request);
|
} catch (AlipayApiException e) {
|
e.printStackTrace();
|
}
|
// System.out.println(alipay_response.getBody());
|
if("10000".equals(alipay_response.getCode())){
|
// 退款成功
|
// LogService.getBean().log((long)0, ServerTask.SERVER_TASK,"退款操作",null,"{ 进行支付宝退款(成功):"+out_trade_no+",退款金额:"+refundAmount+" }");
|
return true;
|
}
|
//保存退款金额和退款单号,将订单状态置为完成(RFERROR),保存到数据库
|
// LogService.getBean().log((long)0, ServerTask.SERVER_TASK,"退款操作",null,"{ 进行支付宝退款(失败):"+out_trade_no+",退款金额:"+refundAmount+",reason: "+ JSON.toJSONString(alipay_response)+" }");
|
return false;
|
}
|
|
|
}
|