package com.dsh.guns.modular.system.util;
|
|
import com.alibaba.fastjson.JSON;
|
import com.alibaba.fastjson.JSONObject;
|
import com.alipay.api.AlipayApiException;
|
import com.alipay.api.AlipayClient;
|
import com.alipay.api.CertAlipayRequest;
|
import com.alipay.api.DefaultAlipayClient;
|
import com.alipay.api.domain.AlipayTradeAppPayModel;
|
import com.alipay.api.msg.AlipayMsgClient;
|
import com.alipay.api.msg.MsgHandler;
|
import com.alipay.api.request.*;
|
import com.alipay.api.response.*;
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
import com.dsh.guns.modular.system.model.OperatorAuthAlipay;
|
import com.dsh.guns.modular.system.model.OperatorUser;
|
import com.dsh.guns.modular.system.service.IOperatorAuthService;
|
import com.dsh.guns.modular.system.service.IOperatorUserService;
|
import org.apache.commons.lang3.StringUtils;
|
import org.dom4j.Document;
|
import org.dom4j.DocumentException;
|
import org.dom4j.Element;
|
import org.dom4j.io.SAXReader;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Component;
|
|
import javax.servlet.http.HttpServletRequest;
|
import java.io.*;
|
import java.util.*;
|
/**
|
* 第三方支付工具类
|
*/
|
@Component
|
public class PayMoneyUtil {
|
private String aliAppid = "2021004105665036";//支付宝appid
|
|
private String appPrivateKey = "MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQCi5i9nW/hGLJ3A06cZxTQdviFC7THpdSihoTYGLr9q006hu0V26ecBMY/o4w5bvIX0Ok/yofmZsVcCJpAPvbXL/uqVrIjnRRxXiaeBFThlxoBUTdunvbUSDYfzlEhJr5NvUKI6H6lz2niXlQGx4qy8Hau4ccWit9kM8jwUvsBVQoFgJA+xrjMvooA7YLopQtpOD+UJr5thApTSf1xrnr1W12yolTLEH15JmNV372cqXrYUuqnY0QsaPtxeqJUGAOcGdVLllQ7easEznP8DFBvDdHATcmp2SHNQDUEWN6MCVPbMgY06NQVqAXxqjTAYSVh+6TRu6bofPmpYC3TZB003AgMBAAECggEBAJAcR2+PA3NBYUYHeFrqBRMS8uX8ZR19kjZ7IgoSLTFaQsP9opRylPSPXhrPVBKAE5leRQAHn4MCSlESwHvMfxo7KFjFTFAc6dffZZpipYQUOc9bGampwJh58/3e/pyBgVMG6J23CPf/HJQtNFSkjd/V9+ayb/9l2dUEL3bC0fAZ/dbx8HsxdLw8wn3fLlWLj68hOMqa2deCZe3JdSVsPbeWqkh56FFsMLug0Nd+Ar4TgRl9/jnhXF0JWiD0LmPUYLhboY7EfUBzN4w1iYbDi1P+3zvoOYsiVKAXox9GMhQ2VzOO2UcSTuizSza2e98mGpabl/GpKmCz+RDFjtkX6eECgYEA2MyCij65eO3aGIm3FUe93DULRBYTfX8qJQSJq2WOWA3mmQlEW6L3O2B5/lG2h+8WmN6iLEs9eHpgycGYp7vAqgrANEn16ACVcuyx0scFtrZfZ+kmHMzFfiUWxJjVYk/6YngsGVBLdw6ueM42C8TTP67X9tU5TdVGoGWuqEj4W98CgYEAwFqwprXOch5Pqk/RPbb49r0Ou03K/UbciWnWWKzUhFFNS8MdlQPoDvQZbMwHLeWsa2VhaKITK3x5biLQb3U+0GLOn6lTvEyrEUH+ucREyLgVYTRAvwBPtnvlrzpyxPk2HnslQjju8WrvvLLBMKWUjlTrTOzhaHT21gz3pHMiOakCgYEAhLmfaXdBITGshb054sNLDtdCkGpbgEcrzAHdLps769iGxkYQHXHFngpQZUwtTUcoNGqIKknd1jZFrv7gsD+XkgKG7PwimehRlkwmCX5ilxtLiVgJRzRt6+5U5AMVD90a0tHzXYP0z2yjj73fBJF5KtGl0a10KZxaYrQdm1UhB00CgYBZZgzx/k9rtHC8LAqIj1CYhHejT92G53c6Gkl3vyOqN4sgKhfGmSEySfrDGPRBPZxr8ZtbIPCd5mUdberH0osWGMYFaJI1UsCy7aQwvGpniz7MhZeN7dweaOjwDs8mgtjHQ96mL4XGCDhR0BZ/wIURvZ/6iaGdhbbu9unlsWj3uQKBgQCmZYdsbbZkd3ev6f8rwyvMz+DrCQyYpY44cegBYuJgrZiQnL2fJioeN7ixX0UM48SfwsZEIrzshP/LGAwnc2MdjxKUl4jLN8SEe0NAjXOnz9Zaw740+aOmLpXcLWdP4uM2gIhWsvW1tEkQZCXmm7c9s/RsU8Pmzv+YL3+fSijOzA==";//支付宝开发者应用私钥
|
|
private String alipayPublicKey = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAouYvZ1v4RiydwNOnGcU0Hb4hQu0x6XUooaE2Bi6/atNOobtFdunnATGP6OMOW7yF9DpP8qH5mbFXAiaQD721y/7qlayI50UcV4mngRU4ZcaAVE3bp721Eg2H85RISa+Tb1CiOh+pc9p4l5UBseKsvB2ruHHForfZDPI8FL7AVUKBYCQPsa4zL6KAO2C6KULaTg/lCa+bYQKU0n9ca569VtdsqJUyxB9eSZjVd+9nKl62FLqp2NELGj7cXqiVBgDnBnVS5ZUO3mrBM5z/AxQbw3RwE3JqdkhzUA1BFjejAlT2zIGNOjUFagF8ao0wGElYfuk0bum6Hz5qWAt02QdNNwIDAQAB";//支付宝应用公钥
|
|
private String alipay_public_key = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmu8n/4yTHWbn7VOrNc9OsLtDL1bEQ8gC1dHkj8Wy5z0mkaOsjJRIG/28ze12M0V8jdCKuuDr5Z1OPKiqf+XO3ypguEh+mYUVMBM/cZodDFQfTY1TKLWjvQCuaqlA+QUTCK6f7T7stsgyQ1o9Jj0rXZDz6PM4QHSTzjrLIBaeqM5WIBvH+fy/X+QG5Utd+/UT0kc0JyvuKhZ65yVUd/C9VcwJJAPliRsAQNrqYterwAJ9zvw9tF11wj9W0XgJ8Ccu4x3gR1vrlLRJJo/OA97RmxPQ+5hSacWQZCUd1dwiBq+YCrKVHGTj14izRHXrLc0yBlRXo7tBOIqcy3IsvKVthQIDAQAB";//支付宝支付公钥
|
|
private String appid = "";//微信appid
|
|
private String appletsAppid = "";//微信小程序appid
|
|
private String mchId = "";//微信商户号
|
|
private String key = "";//微信商户号
|
|
private String callbackPath = "http://221.182.45.100:56666/account";//支付回调网关地址
|
|
private String app_cert_path = "C:/cert/alipay/user/app_cert_path.crt";//应用公钥证书路径
|
|
private String alipay_cert_path = "C:/cert/alipay/user/alipay_cert_path.crt";//支付宝公钥证书文件路径
|
|
private String alipay_root_cert_path = "C:/cert/alipay/user/alipay_root_cert_path.crt";//支付宝CA根证书文件路径
|
|
private String certPath = "C:\\cert\\1523106371_20211206_cert\\apiclient_cert.p12";//微信证书
|
String signType = "RSA2" ;
|
String serverHost = "openchannel.alipay.com" ;
|
|
@Autowired
|
private IOperatorAuthService operatorAuthService;
|
@Autowired
|
private IOperatorUserService operatorUserService;
|
|
|
|
|
/**
|
* 处理直付通审核通过和拒绝消息
|
*/
|
public void getMessage() {
|
System.err.println("进入");
|
final AlipayMsgClient alipayMsgClient = AlipayMsgClient.getInstance(aliAppid);
|
try {
|
alipayMsgClient.setConnector(serverHost);
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
alipayMsgClient.setSecurityConfig(signType, appPrivateKey, alipay_public_key);
|
try {
|
alipayMsgClient.connect();
|
} catch (InterruptedException e) {
|
e.printStackTrace();
|
}
|
alipayMsgClient.setMessageHandler( new MsgHandler() {
|
/**
|
* 客户端接收到消息后回调此方法
|
* @param msgApi 接收到的消息的消息api名
|
* @param msgId 接收到的消息的消息id
|
* @param bizContent 接收到的消息的内容,json格式
|
*/
|
public void onMessage (String msgApi, String msgId, String bizContent) {
|
// 直付通进件审核通过
|
if (StringUtils.equals(msgApi,"ant.merchant.expand.indirect.zft.passed")){
|
// 修改运营商状态 将返回的商户号填入运营商
|
System.out.println( "receive message. msgApi:" + msgApi + " msgId:" + msgId + " bizContent:" + bizContent);
|
JSONObject json = JSONObject.parseObject(bizContent);
|
// 商户号
|
String smid = json.getString("smid");
|
// 审核备注信息
|
String memo = json.getString("memo");
|
// 订单id
|
String orderId = json.getString("order_id");
|
// 通过订单id查询
|
OperatorAuthAlipay auth = operatorAuthService.getOne(new QueryWrapper<OperatorAuthAlipay>()
|
.eq("orderNo",orderId));
|
auth.setSmid(smid);
|
auth.setAuditState(2);
|
auth.setRefuseReason(memo);
|
operatorAuthService.updateById(auth);
|
Integer operatorId = auth.getOperatorId();
|
OperatorUser operatorId1 = operatorUserService.getOne(new QueryWrapper<OperatorUser>()
|
.eq("operatorId", operatorId));
|
operatorId1.setAlipayNum(smid);
|
operatorId1.setAlipayAudit(2);
|
operatorUserService.updateById(operatorId1);
|
}
|
// 直付通进件审核失败
|
if (StringUtils.equals(msgApi,"ant.merchant.expand.indirect.zft.rejected")){
|
JSONObject json = JSONObject.parseObject(bizContent);
|
// 商户号
|
String orderId = json.getString("order_id");
|
// 官方拒绝理由
|
String reason = json.getString("reason");
|
// 通过订单id查询
|
OperatorAuthAlipay auth = operatorAuthService.getOne(new QueryWrapper<OperatorAuthAlipay>()
|
.eq("orderNo",orderId));
|
auth.setAuditState(3);
|
auth.setRefuseReason(reason);
|
operatorAuthService.updateById(auth);
|
Integer operatorId = auth.getOperatorId();
|
OperatorUser operatorId1 = operatorUserService.getOne(new QueryWrapper<OperatorUser>()
|
.eq("operatorId", operatorId));
|
operatorId1.setAlipayAudit(3);
|
operatorUserService.updateById(operatorId1);
|
}
|
}
|
});
|
}
|
/**
|
* 支付宝支付
|
*/
|
public ResultUtil alipay(String body, String subject, String passbackParams, String outTradeNo, String amount, String notifyUrl) {
|
// //构造client
|
// CertAlipayRequest certAlipayRequest = new CertAlipayRequest ();
|
// //设置网关地址
|
// certAlipayRequest.setServerUrl("https://openapi.alipay.com/gateway.do");
|
// //设置应用Id
|
// certAlipayRequest.setAppId(aliAppid);
|
// //设置应用私钥
|
// certAlipayRequest.setPrivateKey(appPrivateKey);
|
// //设置请求格式,固定值json
|
// certAlipayRequest.setFormat("json");
|
// //设置字符集
|
// certAlipayRequest.setCharset("UTF-8");
|
// //设置签名类型
|
// certAlipayRequest.setSignType("RSA2");
|
// //设置应用公钥证书路径
|
// certAlipayRequest.setCertPath(app_cert_path);
|
// //设置支付宝公钥证书路径
|
// certAlipayRequest.setAlipayPublicCertPath(alipay_cert_path);
|
// //设置支付宝根证书路径
|
// certAlipayRequest.setRootCertPath(alipay_root_cert_path);
|
// //构造client
|
// AlipayClient alipayClient = null;
|
// try {
|
// alipayClient = new DefaultAlipayClient(certAlipayRequest);
|
// } catch (AlipayApiException e) {
|
// e.printStackTrace();
|
// }
|
// //实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称:alipay.trade.app.pay
|
// AlipayTradeAppPayRequest request = new AlipayTradeAppPayRequest ();
|
// //SDK已经封装掉了公共参数,这里只需要传入业务参数。以下方法为sdk的model入参方式(model和biz_content同时存在的情况下取biz_content)。
|
// AlipayTradeAppPayModel model = new AlipayTradeAppPayModel ();
|
// model.setBody(body);
|
// model.setSubject (subject);
|
// model.setOutTradeNo (outTradeNo);
|
// model.setTimeoutExpress ("30m" );
|
// model.setTotalAmount (amount);
|
// model.setProductCode ( "QUICK_MSECURITY_PAY" );
|
// model.setPassbackParams(passbackParams);//自定义参数
|
// request.setBizModel ( model );
|
// request.setNotifyUrl (callbackPath + notifyUrl);
|
// try {
|
// //这里和普通的接口调用不同,使用的是sdkExecute
|
// AlipayTradeAppPayResponse response = alipayClient.sdkExecute(request);
|
// Map<String, String> map = new HashMap<>();
|
// map.put("orderString", response.getBody());
|
// System.out.println(map);//就是orderString 可以直接给客户端请求,无需再做处理。
|
// return ResultUtil.success(map);
|
// } catch (AlipayApiException e ) {
|
// e.printStackTrace();
|
// }
|
|
|
//实例化客户端
|
AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do", aliAppid, appPrivateKey, "json", "UTF-8", alipay_public_key, "RSA2");
|
//实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称:alipay.trade.app.pay
|
AlipayTradeAppPayRequest request = new AlipayTradeAppPayRequest();
|
//SDK已经封装掉了公共参数,这里只需要传入业务参数。以下方法为sdk的model入参方式(model和biz_content同时存在的情况下取biz_content)。
|
AlipayTradeAppPayModel model = new AlipayTradeAppPayModel();
|
model.setBody(body);//对一笔交易的具体描述信息。如果是多种商品,请将商品描述字符串累加传给body。
|
model.setSubject(subject);//商品的标题/交易标题/订单标题/订单关键字等。
|
model.setOutTradeNo(outTradeNo);//商户网站唯一订单号
|
model.setTimeoutExpress("30m");
|
model.setTotalAmount(amount);//付款金额
|
model.setProductCode("QUICK_MSECURITY_PAY");
|
model.setPassbackParams(passbackParams);//自定义参数
|
|
|
//分账
|
// Integer coursePackagePayments = coursePackageClient.queryByCode(outTradeNo);
|
// Integer paymentCompetitions = competitionsClient.queryByCode(outTradeNo);
|
// Integer siteBookings = siteClient.queryByCode(outTradeNo);
|
// List<Integer> stores = new ArrayList<>();
|
// stores.add(coursePackagePayments);
|
// stores.add(paymentCompetitions);
|
// stores.add(siteBookings);
|
//
|
// OperatorUser operatorUser = siteClient.queryOperator(stores);
|
//
|
// String alipayProportion = operatorUser.getAlipayProportion();
|
// String alipayNum = operatorUser.getAlipayNum();
|
//
|
// ExtendParams extendParams = new ExtendParams();
|
//// extendParams.setSysServiceProviderId("YOUR_SERVICE_PROVIDER_ID");
|
// model.setExtendParams(extendParams);
|
//
|
// RoyaltyInfo royaltyInfo = new RoyaltyInfo();
|
//// royaltyInfo.setRoyaltyType("transfer");
|
//
|
//
|
// RoyaltyDetailInfos royaltyDetailInfo1 = new RoyaltyDetailInfos();
|
// royaltyDetailInfo1.setTransOutType("userId");
|
// royaltyDetailInfo1.setTransOut(aliAppid);
|
// royaltyDetailInfo1.setTransInType("loginName");
|
// royaltyDetailInfo1.setTransIn("18398968484");
|
//
|
// royaltyDetailInfo1.setDesc("分账描述1");
|
// royaltyDetailInfo1.setAmountPercentage(alipayProportion);
|
// List<RoyaltyDetailInfos> royaltyDetailInfos = new ArrayList<>();
|
//
|
//
|
//
|
// royaltyInfo.setRoyaltyDetailInfos(royaltyDetailInfos);
|
// model.setRoyaltyInfo(royaltyInfo);
|
// System.err.println("=================="+royaltyInfo);
|
//
|
request.setBizModel(model);
|
request.setNotifyUrl(callbackPath + notifyUrl);
|
try {
|
//这里和普通的接口调用不同,使用的是sdkExecute
|
AlipayTradeAppPayResponse response = alipayClient.sdkExecute(request);
|
Map<String, String> map = new HashMap<>();
|
map.put("orderString", response.getBody());
|
map.put("returnId", passbackParams);
|
System.out.println(map);//就是orderString 可以直接给客户端请求,无需再做处理。
|
return ResultUtil.success(map);
|
} catch (AlipayApiException e) {
|
e.printStackTrace();
|
}
|
return null;
|
}
|
|
|
|
|
/**
|
* 支付宝查询订单支付状态
|
*
|
* @param out_trade_no
|
* @return
|
* @throws Exception
|
*/
|
public AlipayTradeQueryResponse queryALIOrder(String out_trade_no) throws Exception {
|
AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do", aliAppid, appPrivateKey, "json", "UTF-8", alipay_public_key, "RSA2");
|
AlipayTradeQueryRequest request = new AlipayTradeQueryRequest();
|
request.setBizContent("{" +
|
" \"out_trade_no\":\"" + out_trade_no + "\"" +
|
"}");
|
AlipayTradeQueryResponse response = alipayClient.execute(request);
|
return response;
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
* 获取请求内容
|
*
|
* @param request
|
* @return
|
* @throws IOException
|
*/
|
private String getParam(HttpServletRequest request) throws IOException {
|
// 读取参数
|
InputStream inputStream;
|
StringBuilder sb = new StringBuilder();
|
inputStream = request.getInputStream();
|
String s;
|
BufferedReader in = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"));
|
while ((s = in.readLine()) != null) {
|
sb.append(s);
|
}
|
in.close();
|
inputStream.close();
|
return sb.toString();
|
}
|
|
|
|
|
|
|
|
// public static void main(String[] ages){
|
// PayMoneyUtil payMoneyUtil = new PayMoneyUtil();
|
// ResultUtil ce = payMoneyUtil.alipay("测试", "测试", "", "121456457", "10", "http://123.com");
|
// System.err.println(ce);
|
// ResultUtil resultUtil = null;
|
// try {
|
// resultUtil = payMoneyUtil.queryALIOrder("121456457");
|
// } catch (Exception e) {
|
// e.printStackTrace();
|
// }
|
// System.err.println(resultUtil);
|
// }
|
|
|
/**
|
* xml转map
|
*
|
* @param xml
|
* @param charset
|
* @return
|
* @throws UnsupportedEncodingException
|
* @throws DocumentException
|
*/
|
public static Map<String, String> xmlToMap(String xml, String charset) throws UnsupportedEncodingException, DocumentException {
|
|
Map<String, String> respMap = new HashMap<String, String>();
|
|
SAXReader reader = new SAXReader();
|
Document doc = reader.read(new ByteArrayInputStream(xml.getBytes(charset)));
|
Element root = doc.getRootElement();
|
xmlToMap(root, respMap);
|
return respMap;
|
}
|
|
public static Map<String, String> xmlToMap(Element tmpElement, Map<String, String> respMap) {
|
if (tmpElement.isTextOnly()) {
|
respMap.put(tmpElement.getName(), tmpElement.getText());
|
return respMap;
|
}
|
|
@SuppressWarnings("unchecked")
|
Iterator<Element> eItor = tmpElement.elementIterator();
|
while (eItor.hasNext()) {
|
Element element = eItor.next();
|
xmlToMap(element, respMap);
|
}
|
return respMap;
|
}
|
}
|