记得上下班打卡 | git大法好,push需谨慎

Commit fa153e67 authored by zhoujianping's avatar zhoujianping

1.支付宝小程序相关功能开发

parent 0fa62b8d
...@@ -20,7 +20,7 @@ public class DragonConstant { ...@@ -20,7 +20,7 @@ public class DragonConstant {
public static final String REFUND_TYPE_APPLETB_WEPAY="APPLETBWEPAY";//,"微信小程序B"); public static final String REFUND_TYPE_APPLETB_WEPAY="APPLETBWEPAY";//,"微信小程序B");
public static final String REFUND_TYPE_MICROPAY_WEPAY="MICROPAYWEPAY";//,"扫码枪微信支付"); public static final String REFUND_TYPE_MICROPAY_WEPAY="MICROPAYWEPAY";//,"扫码枪微信支付");
public static final String REFUND_TYPE_MICROPAY_ALIPAY="MICROPAYALIPAY";//,"扫码枪微信支付"); public static final String REFUND_TYPE_MICROPAY_ALIPAY="MICROPAYALIPAY";//,"扫码枪微信支付");
public static final String REFUND_TYPE_APPLET_ALIPAY="APPLETALIPAY";//,"支付宝小程序");
public static final String REFUND_REDIS_KET="dragon:refund:refundCode:";// 订单号对应回调地址 public static final String REFUND_REDIS_KET="dragon:refund:refundCode:";// 订单号对应回调地址
public static final String ORDERCODE_REDIS_KET="dragon:refund:orderCode:";// 退款订单号对应 支付订单号 public static final String ORDERCODE_REDIS_KET="dragon:refund:orderCode:";// 退款订单号对应 支付订单号
...@@ -191,7 +191,8 @@ public class DragonConstant { ...@@ -191,7 +191,8 @@ public class DragonConstant {
PAYMENT_TYPE_MICROPAY_WEPAY("MICROPAYWEPAY","wepay","micropay","微信扫码枪支付"), PAYMENT_TYPE_MICROPAY_WEPAY("MICROPAYWEPAY","wepay","micropay","微信扫码枪支付"),
PAYMENT_TYPE_APPLET_DOUYINPAY("APPLETDOUYINPAY","douyinpay","applet","抖音小程序"), PAYMENT_TYPE_APPLET_DOUYINPAY("APPLETDOUYINPAY","douyinpay","applet","抖音小程序"),
PAYMENT_TYPE_WAP_UNIONPAY("WAPUNIONPAY","unionpay","wap","银联wap支付"), PAYMENT_TYPE_WAP_UNIONPAY("WAPUNIONPAY","unionpay","wap","银联wap支付"),
PAYMENT_TYPE_APP_UNIONPAY("APPUNIONPAY","unionpay","wap","银联wap支付"); PAYMENT_TYPE_APP_UNIONPAY("APPUNIONPAY","unionpay","wap","银联wap支付"),
PAYMENT_TYPE_APPLET_ALIPAY("APPLETALIPAY","alipay","applet","支付宝小程序");
private String code; private String code;
private String message; private String message;
......
...@@ -40,6 +40,8 @@ public class DragonPayBaseReqDto implements Serializable, Cloneable{ ...@@ -40,6 +40,8 @@ public class DragonPayBaseReqDto implements Serializable, Cloneable{
private String receiptData; private String receiptData;
//苹果的stransactionId //苹果的stransactionId
private String transactionId; private String transactionId;
//
private String buyerOpenId;
private String appIdType=""; private String appIdType="";
......
...@@ -42,7 +42,8 @@ public class DragonPayBaseRespDto implements Serializable { ...@@ -42,7 +42,8 @@ public class DragonPayBaseRespDto implements Serializable {
//为了应对扫码支付错误码信息 //为了应对扫码支付错误码信息
private String msg; private String msg;
//支付宝小程序tradeNo
private String tradeNo;
@Data @Data
@JsonInclude(JsonInclude.Include.NON_NULL) @JsonInclude(JsonInclude.Include.NON_NULL)
...@@ -75,5 +76,7 @@ public class DragonPayBaseRespDto implements Serializable { ...@@ -75,5 +76,7 @@ public class DragonPayBaseRespDto implements Serializable {
private String orderId; private String orderId;
private String orderToken; private String orderToken;
private String tradeNo;
} }
} }
...@@ -25,6 +25,7 @@ public class PayDataVo implements Serializable { ...@@ -25,6 +25,7 @@ public class PayDataVo implements Serializable {
private String orderStr; private String orderStr;
private String orderId; private String orderId;
private String orderToken; private String orderToken;
private String tradeNo;
public String getOrderToken() { public String getOrderToken() {
return orderToken==null?"":orderToken; return orderToken==null?"":orderToken;
......
...@@ -816,9 +816,7 @@ public abstract class AbstractRedisUtil { ...@@ -816,9 +816,7 @@ public abstract class AbstractRedisUtil {
public static void main(String[] args) { public static void main(String[] args) {
String[] keys = { String[] keys = {
"test:goblin:erp:push:order:0", "adam:info:user:2371873704685404165798043"
"test:goblin:erp:push:order:1",
"test:goblin:erp:push:order:2",
}; };
for (String key : keys) { for (String key : keys) {
long value = key.hashCode(); long value = key.hashCode();
......
...@@ -44,7 +44,7 @@ ...@@ -44,7 +44,7 @@
<dependency> <dependency>
<groupId>com.alipay.sdk</groupId> <groupId>com.alipay.sdk</groupId>
<artifactId>alipay-sdk-java</artifactId> <artifactId>alipay-sdk-java</artifactId>
<version>4.15.6.ALL</version> <version>4.39.52.ALL</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>com.liquidnet</groupId> <groupId>com.liquidnet</groupId>
......
...@@ -3,19 +3,15 @@ package com.liquidnet.service.dragon.channel.alipay.biz; ...@@ -3,19 +3,15 @@ package com.liquidnet.service.dragon.channel.alipay.biz;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.alipay.api.AlipayApiException; import com.alipay.api.AlipayApiException;
import com.alipay.api.AlipayClient; import com.alipay.api.AlipayClient;
import com.alipay.api.request.AlipayTradeAppPayRequest; import com.alipay.api.domain.AlipayTradeCreateModel;
import com.alipay.api.request.AlipayTradePayRequest; import com.alipay.api.request.*;
import com.alipay.api.request.AlipayTradeQueryRequest; import com.alipay.api.response.*;
import com.alipay.api.request.AlipayTradeWapPayRequest;
import com.alipay.api.response.AlipayTradeAppPayResponse;
import com.alipay.api.response.AlipayTradePayResponse;
import com.alipay.api.response.AlipayTradeQueryResponse;
import com.alipay.api.response.AlipayTradeWapPayResponse;
import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.core.type.TypeReference;
import com.liquidnet.commons.lang.util.JsonUtils; import com.liquidnet.commons.lang.util.JsonUtils;
import com.liquidnet.commons.lang.util.StringUtil; import com.liquidnet.commons.lang.util.StringUtil;
import com.liquidnet.service.dragon.channel.alipay.req.AlipayTradePayReq; import com.liquidnet.service.dragon.channel.alipay.req.AlipayTradePayReq;
import com.liquidnet.service.dragon.channel.alipay.sign.MD5; import com.liquidnet.service.dragon.channel.alipay.sign.MD5;
import com.liquidnet.service.dragon.constant.DragonConstant;
import com.liquidnet.service.dragon.utils.ObjectUtilDragon; import com.liquidnet.service.dragon.utils.ObjectUtilDragon;
import com.liquidnet.service.dragon.utils.PayAlipayUtils; import com.liquidnet.service.dragon.utils.PayAlipayUtils;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
...@@ -185,17 +181,75 @@ public class AlipayBiz{ ...@@ -185,17 +181,75 @@ public class AlipayBiz{
return resultJSON; return resultJSON;
} }
} }
/**
* 支付宝小程序支付
* @author zjp
* @param alipayTradePayReq
* @return: java.util.Map<java.lang.String,java.lang.Object>
* @date 2024/4/26 13:35
*/
public static Map<String, Object> tradeAppletPay(AlipayTradePayReq alipayTradePayReq) {
log.info("AlipayUtil.tradeAppletPay-->> req : {}",alipayTradePayReq.toString());
String timeExpress = "5m";// 支付超时,线下扫码交易定义为5分钟
AlipayClient httpClientApplet = PayAlipayUtils.getInstance().getHttpClientApplet();
// 构造请求参数以调用接口
AlipayTradeCreateRequest request = new AlipayTradeCreateRequest();
//回调函数
request.setNotifyUrl(alipayTradePayReq.getNotifyUrl());
AlipayTradeCreateModel model = new AlipayTradeCreateModel();
// 设置商户订单号
model.setOutTradeNo(alipayTradePayReq.getOutTradeNo());
// 设置订单总金额
model.setTotalAmount(alipayTradePayReq.getTotalAmount().toString());
// 设置订单标题
model.setSubject(alipayTradePayReq.getSubject());
// 设置订单相对超时时间
model.setTimeoutExpress(timeExpress);
// uid参数未来计划废弃,存量商户可继续使用,新商户请使用openid。请根据应用-开发配置-openid配置选择支持的字段。
model.setBuyerOpenId(alipayTradePayReq.getOpenId());
// 设置产品码
model.setProductCode(alipayTradePayReq.getProductCode());
log.info("BizModel :{}",JSONObject.toJSONString(model));
request.setBizModel(model);
try {
AlipayTradeCreateResponse response = httpClientApplet.execute(request);
log.info("AlipayUtil-->tradeAppletPay-->支付宝返回结果:{}", response.getBody());
if(response.isSuccess()){
Map<String,Object> responseJSON = JsonUtils.fromJson(JsonUtils.toJson(response), new TypeReference<Map<String,Object>>() {
});
return responseJSON;
}else {
JSONObject resultJSON = new JSONObject();
resultJSON.put("outTradeNo", alipayTradePayReq.getOutTradeNo());
resultJSON.put("totalAmount", alipayTradePayReq.getTotalAmount().toString());
resultJSON.put("errorCode", "9999");
return resultJSON;
}
} catch (AlipayApiException e) {
log.error("支付宝小程序支付异常:{}", e);
JSONObject resultJSON = new JSONObject();
resultJSON.put("outTradeNo", alipayTradePayReq.getOutTradeNo());
resultJSON.put("totalAmount", alipayTradePayReq.getTotalAmount().toString());
resultJSON.put("errorCode", "9999");
return resultJSON;
}
}
/** /**
* 订单查询 * 订单查询
* *
* @return * @return
*/ */
public static Map<String, Object> tradeQuery(String outTradeNo) { public static Map<String, Object> tradeQuery(String outTradeNo,String paymentType) {
log.info("AlipayBiz.tradeQuery-->> 支付宝交易查询"); log.info("AlipayBiz.tradeQuery-->> 支付宝交易查询");
AlipayClient alipayClient = PayAlipayUtils.getInstance().getHttpClient(); AlipayClient alipayClient;
if(StringUtil.isNotEmpty(paymentType)&&paymentType.equals(DragonConstant.PayTypeEnum.PAYMENT_TYPE_APPLET_ALIPAY.getCode())){
//支付宝小程序
alipayClient = PayAlipayUtils.getInstance().getHttpClientApplet();
}else {
alipayClient = PayAlipayUtils.getInstance().getHttpClient();
}
SortedMap<String, Object> bizContentMap = new TreeMap<>(); SortedMap<String, Object> bizContentMap = new TreeMap<>();
bizContentMap.put("out_trade_no", outTradeNo); bizContentMap.put("out_trade_no", outTradeNo);
AlipayTradeQueryRequest request = new AlipayTradeQueryRequest(); AlipayTradeQueryRequest request = new AlipayTradeQueryRequest();
......
...@@ -27,6 +27,7 @@ public class AlipayTradePayReq implements Serializable, Cloneable{ ...@@ -27,6 +27,7 @@ public class AlipayTradePayReq implements Serializable, Cloneable{
private String notifyUrl; private String notifyUrl;
private String timestamp; private String timestamp;
private String authCode; private String authCode;
private String openId;
@Override @Override
public String toString(){ public String toString(){
return JSON.toJSONString(this); return JSON.toJSONString(this);
......
...@@ -52,7 +52,7 @@ public abstract class AbstractAlipayStrategy implements IAlipayStrategy { ...@@ -52,7 +52,7 @@ public abstract class AbstractAlipayStrategy implements IAlipayStrategy {
alipayTradePayReq.setNotifyUrl(this.getNotifyUrl()); alipayTradePayReq.setNotifyUrl(this.getNotifyUrl());
alipayTradePayReq.setTimestamp(dragonPayBaseReqDto.getCreateDate()); alipayTradePayReq.setTimestamp(dragonPayBaseReqDto.getCreateDate());
alipayTradePayReq.setAuthCode(dragonPayBaseReqDto.getAuthCode()); alipayTradePayReq.setAuthCode(dragonPayBaseReqDto.getAuthCode());
alipayTradePayReq.setOpenId(dragonPayBaseReqDto.getOpenId());
//调用支付 //调用支付
long startTime = System.currentTimeMillis(); long startTime = System.currentTimeMillis();
Map<String, Object> result = this.executePay(alipayTradePayReq); Map<String, Object> result = this.executePay(alipayTradePayReq);
......
package com.liquidnet.service.dragon.channel.alipay.strategy.impl;
import com.liquidnet.service.dragon.channel.alipay.biz.AlipayBiz;
import com.liquidnet.service.dragon.channel.alipay.req.AlipayTradePayReq;
import com.liquidnet.service.dragon.channel.alipay.strategy.annotation.StrategyAlipayHandler;
import com.liquidnet.service.dragon.constant.DragonConstant;
import com.liquidnet.service.dragon.dto.DragonPayBaseRespDto;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Component;
import java.util.Map;
/**
* 支付宝小程序
* @author zjp
* @param null
* @return: null
* @date 2024/4/26 13:29
*/
@Slf4j
@Component
@StrategyAlipayHandler(DragonConstant.DeviceFromEnum.APPLET)
public class AlipayStrategyAppletImpl extends AbstractAlipayStrategy {
@Value("${liquidnet.dragon.url}")
private String notifyUrl;
@Autowired
StringRedisTemplate stringRedisTemplate;
@Autowired
private AlipayBiz alipayBiz;
@Override
protected Map<String, Object> executePay(AlipayTradePayReq alipayTradePayReq) {
return alipayBiz.tradeAppletPay(alipayTradePayReq);
}
protected void setProductCode() {
this.productCode = "QUICK_APPLET_PAY";
}
@Override
protected String getNotifyUrl() {
return notifyUrl + "/notify/alipay/applet";
}
@Override
DragonPayBaseRespDto buildResponseDto(DragonPayBaseRespDto payBaseRespDto, Map<String, Object> respResult) {
payBaseRespDto.getPayData().setTradeNo(respResult.get("trade_no").toString());
return payBaseRespDto;
}
}
...@@ -72,6 +72,8 @@ public class PayChannelStrategyAlipayImpl extends AbstractPayChannelStrategyImpl ...@@ -72,6 +72,8 @@ public class PayChannelStrategyAlipayImpl extends AbstractPayChannelStrategyImpl
private String signtType; private String signtType;
@Value("${liquidnet.dragon.alipay.charset}") @Value("${liquidnet.dragon.alipay.charset}")
private String charset; private String charset;
@Value("${liquidnet.alipay.applet.pubKey}")
private String appletMerchantPubKey;
@Override @Override
public ResponseDto<DragonPayBaseRespDto> dragonPay(DragonPayBaseReqDto dragonPayBaseReqDto) { public ResponseDto<DragonPayBaseRespDto> dragonPay(DragonPayBaseReqDto dragonPayBaseReqDto) {
...@@ -114,10 +116,18 @@ public class PayChannelStrategyAlipayImpl extends AbstractPayChannelStrategyImpl ...@@ -114,10 +116,18 @@ public class PayChannelStrategyAlipayImpl extends AbstractPayChannelStrategyImpl
} }
try { try {
if (AlipaySignature.rsaCheckV1(notifyMap, merchantPubKey, "UTF-8", "RSA2")){ boolean signVerified=false;
//支付宝验签
if(payType.equals(DragonConstant.PayChannelEnum.ALIPAY.getCode()) && deviceFrom.equals(DragonConstant.DeviceFromEnum.APPLET.getCode())){
//小程序
signVerified= AlipaySignature.rsaCheckV1(notifyMap, appletMerchantPubKey, "UTF-8", "RSA2");
}else {
signVerified= AlipaySignature.rsaCheckV1(notifyMap, merchantPubKey, "UTF-8", "RSA2");
}
if (signVerified){
String tradeStatus = notifyMap.get("trade_status"); String tradeStatus = notifyMap.get("trade_status");
boolean notifyResult = false; boolean notifyResult = false;
if (AlipayConstant.AlipayTradeStateEnum.TRADE_SUCCESS.name().equals(tradeStatus) if (AlipayConstant.AlipayTradeStateEnum.TRADE_SUCCESS.name().equals(tradeStatus)
||AlipayConstant.AlipayTradeStateEnum.TRADE_FINISHED.name().equals(tradeStatus)) { ||AlipayConstant.AlipayTradeStateEnum.TRADE_FINISHED.name().equals(tradeStatus)) {
...@@ -153,7 +163,7 @@ public class PayChannelStrategyAlipayImpl extends AbstractPayChannelStrategyImpl ...@@ -153,7 +163,7 @@ public class PayChannelStrategyAlipayImpl extends AbstractPayChannelStrategyImpl
DragonPayOrderQueryRespDto respDto = alipayStrategyContext.getStrategy(DragonConstant.PayTypeEnum.getEnumByCode(ordersDto.getPaymentType()).getDeviceFrom()).checkOrderStatus(code); DragonPayOrderQueryRespDto respDto = alipayStrategyContext.getStrategy(DragonConstant.PayTypeEnum.getEnumByCode(ordersDto.getPaymentType()).getDeviceFrom()).checkOrderStatus(code);
*/ */
DragonOrdersDto ordersDto = dataUtilsDragon.getPayOrderByCode(code); DragonOrdersDto ordersDto = dataUtilsDragon.getPayOrderByCode(code);
Map<String, Object> resultMap = alipayBiz.tradeQuery(code); Map<String, Object> resultMap = alipayBiz.tradeQuery(code,ordersDto.getPaymentType());
DragonPayOrderQueryRespDto respDto = dragonPayBiz.buildPayOrderQueryRespDto(ordersDto); DragonPayOrderQueryRespDto respDto = dragonPayBiz.buildPayOrderQueryRespDto(ordersDto);
if ("10000".equals(resultMap.get("code"))) { if ("10000".equals(resultMap.get("code"))) {
// 当返回状态为“TRADE_FINISHED”交易成功结束和“TRADE_SUCCESS”支付成功时更新交易状态 // 当返回状态为“TRADE_FINISHED”交易成功结束和“TRADE_SUCCESS”支付成功时更新交易状态
......
...@@ -2,6 +2,7 @@ package com.liquidnet.service.dragon.service.impl; ...@@ -2,6 +2,7 @@ package com.liquidnet.service.dragon.service.impl;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.alipay.api.AlipayClient;
import com.alipay.api.request.AlipayTradeFastpayRefundQueryRequest; import com.alipay.api.request.AlipayTradeFastpayRefundQueryRequest;
import com.alipay.api.request.AlipayTradeRefundRequest; import com.alipay.api.request.AlipayTradeRefundRequest;
import com.alipay.api.response.AlipayTradeFastpayRefundQueryResponse; import com.alipay.api.response.AlipayTradeFastpayRefundQueryResponse;
...@@ -21,10 +22,7 @@ import com.liquidnet.service.dragon.channel.wepay.resp.WePayRefundReturnCallBack ...@@ -21,10 +22,7 @@ import com.liquidnet.service.dragon.channel.wepay.resp.WePayRefundReturnCallBack
import com.liquidnet.service.dragon.channel.wepay.resp.WePayRefundReturnDto; import com.liquidnet.service.dragon.channel.wepay.resp.WePayRefundReturnDto;
import com.liquidnet.service.dragon.constant.DragonConstant; import com.liquidnet.service.dragon.constant.DragonConstant;
import com.liquidnet.service.dragon.constant.DragonErrorCodeEnum; import com.liquidnet.service.dragon.constant.DragonErrorCodeEnum;
import com.liquidnet.service.dragon.dto.DragonRefundAppDto; import com.liquidnet.service.dragon.dto.*;
import com.liquidnet.service.dragon.dto.DragonRefundChannelDto;
import com.liquidnet.service.dragon.dto.NotifyUrlDto;
import com.liquidnet.service.dragon.dto.RefundContentDto;
import com.liquidnet.service.dragon.service.IDragonOrderRefundsService; import com.liquidnet.service.dragon.service.IDragonOrderRefundsService;
import com.liquidnet.service.dragon.utils.*; import com.liquidnet.service.dragon.utils.*;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
...@@ -98,6 +96,9 @@ public class DragonOrderRefundsServiceImpl implements IDragonOrderRefundsService ...@@ -98,6 +96,9 @@ public class DragonOrderRefundsServiceImpl implements IDragonOrderRefundsService
case DragonConstant.REFUND_TYPE_WAP_ALIPAY: case DragonConstant.REFUND_TYPE_WAP_ALIPAY:
dto = aliPayRefund(code, orderRefundCode, code, reason, price, paymentId, paymentType, nowTime); dto = aliPayRefund(code, orderRefundCode, code, reason, price, paymentId, paymentType, nowTime);
break; break;
case DragonConstant.REFUND_TYPE_APPLET_ALIPAY:
dto = aliPayRefund(code, orderRefundCode, code, reason, price, paymentId, paymentType, nowTime);
break;
case DragonConstant.REFUND_TYPE_WEB_ALIPAY: case DragonConstant.REFUND_TYPE_WEB_ALIPAY:
dto = aliPayRefund(code, orderRefundCode, code, reason, price, paymentId, paymentType, nowTime); dto = aliPayRefund(code, orderRefundCode, code, reason, price, paymentId, paymentType, nowTime);
break; break;
...@@ -554,7 +555,14 @@ public class DragonOrderRefundsServiceImpl implements IDragonOrderRefundsService ...@@ -554,7 +555,14 @@ public class DragonOrderRefundsServiceImpl implements IDragonOrderRefundsService
"\"out_request_no\":\"" + refundCode + "\"," + "\"out_request_no\":\"" + refundCode + "\"," +
"\"refund_reason\":\"" + reason + "\"," + "\"refund_reason\":\"" + reason + "\"," +
"\"refund_amount\":\"" + price.doubleValue() + "\"}"); //设置业务参数 "\"refund_amount\":\"" + price.doubleValue() + "\"}"); //设置业务参数
AlipayTradeRefundResponse response = PayAlipayUtils.getInstance().getHttpClient().execute(request); AlipayClient httpClient = null;
if(StringUtil.isNotEmpty(paymentType) && paymentId.equals(DragonConstant.REFUND_TYPE_APPLET_ALIPAY)){
//支付小程序
httpClient=PayAlipayUtils.getInstance().getHttpClientApplet();
}else {
httpClient=PayAlipayUtils.getInstance().getHttpClient();
}
AlipayTradeRefundResponse response = httpClient.execute(request);
if (response.getFundChange() == null || response.getFundChange().equals("N")) { if (response.getFundChange() == null || response.getFundChange().equals("N")) {
try { try {
refundStatus = DragonConstant.RefundStatusEnum.STATUS_ERROR.getCode(); refundStatus = DragonConstant.RefundStatusEnum.STATUS_ERROR.getCode();
...@@ -883,9 +891,16 @@ public class DragonOrderRefundsServiceImpl implements IDragonOrderRefundsService ...@@ -883,9 +891,16 @@ public class DragonOrderRefundsServiceImpl implements IDragonOrderRefundsService
"\"out_trade_no\":\"" + outTradeNo + "\"," + "\"out_trade_no\":\"" + outTradeNo + "\"," +
"\"trade_no\":\"" + tradeNo + "\"," + "\"trade_no\":\"" + tradeNo + "\"," +
"\"out_request_no\":\"" + outBizNo + "\"}"); //设置业务参数 "\"out_request_no\":\"" + outBizNo + "\"}"); //设置业务参数
AlipayTradeFastpayRefundQueryResponse response = PayAlipayUtils.getInstance().getHttpClient().execute(request); DragonOrdersDto ordersDto = dataUtilsDragon.getPayOrderByCode(outTradeNo);
AlipayClient httpClient =null;
if(null!=ordersDto.getPaymentType() && ordersDto.getPaymentType().equals(DragonConstant.PayTypeEnum.PAYMENT_TYPE_APPLET_ALIPAY.getCode())){
//支付宝小程序
httpClient=PayAlipayUtils.getInstance().getHttpClientApplet();
}else {
httpClient=PayAlipayUtils.getInstance().getHttpClient();
}
AlipayTradeFastpayRefundQueryResponse response = httpClient.execute(request);
log.info("AlipayTradeFastpayRefundQueryRequest -> data = " + JSON.toJSONString(response)); log.info("AlipayTradeFastpayRefundQueryRequest -> data = " + JSON.toJSONString(response));
if (response.isSuccess()) { if (response.isSuccess()) {
try { try {
NotifyUrlDto dto = new NotifyUrlDto(); NotifyUrlDto dto = new NotifyUrlDto();
......
...@@ -61,9 +61,12 @@ public class DragonOrdersServiceImpl implements IDragonOrdersService { ...@@ -61,9 +61,12 @@ public class DragonOrdersServiceImpl implements IDragonOrdersService {
@Override @Override
public ResponseDto<DragonPayBaseRespDto> dragonPay(DragonPayBaseReqDto dragonPayBaseReqDto) { public ResponseDto<DragonPayBaseRespDto> dragonPay(DragonPayBaseReqDto dragonPayBaseReqDto) {
/* dragonPayBaseReqDto.setOpenId("049ZwqRY-zunlLWsZLPu1VF1uVvh0XzxcsYCDZlIMuEuoE5");
dragonPayBaseReqDto.setDeviceFrom("applet");*/
//service层进行效验 //service层进行效验
if(!(boolean)validateDragonPay(dragonPayBaseReqDto).get("resultStatus")){ Map map = validateDragonPay(dragonPayBaseReqDto);
return ResponseDto.failure("微信支付openId不能为空!"); if(!(boolean)map.get("resultStatus")){
return ResponseDto.failure(map.get("erro").toString());
} }
//设置支付编号 //设置支付编号
if(dragonPayBaseReqDto.getDeviceFrom().equals("appletb")){ if(dragonPayBaseReqDto.getDeviceFrom().equals("appletb")){
...@@ -87,6 +90,15 @@ public class DragonOrdersServiceImpl implements IDragonOrdersService { ...@@ -87,6 +90,15 @@ public class DragonOrdersServiceImpl implements IDragonOrdersService {
} }
} }
} }
if (dragonPayBaseReqDto.getPayType().equalsIgnoreCase(DragonConstant.PayChannelEnum.ALIPAY.getCode())) {
if ( dragonPayBaseReqDto.getDeviceFrom().equalsIgnoreCase(DragonConstant.DeviceFromEnum.APPLET.getCode())) {
if (StringUtil.isEmpty(dragonPayBaseReqDto.getOpenId())) {
map.put("resultStatus",false);
map.put("erro","支付宝支付openId不能为空!");
return map;
}
}
}
if(StringUtil.isNotBlank(dragonPayBaseReqDto.getName())&&dragonPayBaseReqDto.getName().length()>=32){ if(StringUtil.isNotBlank(dragonPayBaseReqDto.getName())&&dragonPayBaseReqDto.getName().length()>=32){
dragonPayBaseReqDto.setName(dragonPayBaseReqDto.getName().substring(0,32)); dragonPayBaseReqDto.setName(dragonPayBaseReqDto.getName().substring(0,32));
} }
......
...@@ -2,7 +2,10 @@ package com.liquidnet.service.dragon.utils; ...@@ -2,7 +2,10 @@ package com.liquidnet.service.dragon.utils;
import com.alipay.api.AlipayClient; import com.alipay.api.AlipayClient;
import com.alipay.api.DefaultAlipayClient; import com.alipay.api.DefaultAlipayClient;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
@Configuration
public class PayAlipayUtils { public class PayAlipayUtils {
private static PayAlipayUtils instance = new PayAlipayUtils(); private static PayAlipayUtils instance = new PayAlipayUtils();
private AlipayClient httpClient = null; private AlipayClient httpClient = null;
...@@ -12,6 +15,24 @@ public class PayAlipayUtils { ...@@ -12,6 +15,24 @@ public class PayAlipayUtils {
private final String sign_type = "RSA2"; private final String sign_type = "RSA2";
private final String charset = "utf-8"; private final String charset = "utf-8";
private final String gatewayUrl = "https://openapi.alipay.com/gateway.do"; private final String gatewayUrl = "https://openapi.alipay.com/gateway.do";
/*支付宝小程序*/
private AlipayClient httpClientApplet= null;
private static String appletMerchantPrivateKey;
private static String appletAppId;
private static String appletMerchantPubKey;
@Value("${liquidnet.alipay.applet.privateKey}")
public void setAppletMerchantPrivateKey(String appletMerchantPrivateKey) {
PayAlipayUtils.appletMerchantPrivateKey = appletMerchantPrivateKey;
}
@Value("${liquidnet.alipay.applet.appId}")
public void setAppletAppId(String appletAppId) {
PayAlipayUtils.appletAppId = appletAppId;
}
@Value("${liquidnet.alipay.applet.pubKey}")
public void setAppletMerchantPubKey(String pubKey) {
PayAlipayUtils.appletMerchantPubKey = pubKey;
}
public PayAlipayUtils() { public PayAlipayUtils() {
...@@ -28,4 +49,12 @@ public class PayAlipayUtils { ...@@ -28,4 +49,12 @@ public class PayAlipayUtils {
} }
return httpClient; return httpClient;
} }
public AlipayClient getHttpClientApplet() {
if(httpClientApplet == null){
httpClientApplet = new DefaultAlipayClient(gatewayUrl, appletAppId, appletMerchantPrivateKey, "json", charset,
appletMerchantPubKey, sign_type);
}
return httpClientApplet;
}
} }
...@@ -33,7 +33,11 @@ ...@@ -33,7 +33,11 @@
<artifactId>fastjson</artifactId> <artifactId>fastjson</artifactId>
<version>1.2.73</version> <version>1.2.73</version>
</dependency> </dependency>
<dependency>
<groupId>com.alipay.sdk</groupId>
<artifactId>alipay-sdk-java</artifactId>
<version>4.39.52.ALL</version>
</dependency>
<dependency> <dependency>
<groupId>com.liquidnet</groupId> <groupId>com.liquidnet</groupId>
......
package com.liquidnet.service.sweet.config;
import com.alipay.api.AlipayClient;
import com.alipay.api.DefaultAlipayClient;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
@Configuration
public class PayAlipayUtils {
private static PayAlipayUtils instance = new PayAlipayUtils();
private final String sign_type = "RSA2";
private final String charset = "utf-8";
private final String gatewayUrl = "https://openapi.alipay.com/gateway.do";
/*支付宝小程序*/
private AlipayClient httpClientApplet= null;
private static String appletMerchantPrivateKey;
private static String appletAppId;
private static String appletMerchantPubKey;
@Value("${liquidnet.alipay.applet.privateKey}")
public void setAppletMerchantPrivateKey(String appletMerchantPrivateKey) {
PayAlipayUtils.appletMerchantPrivateKey = appletMerchantPrivateKey;
}
@Value("${liquidnet.alipay.applet.appId}")
public void setAppletAppId(String appletAppId) {
PayAlipayUtils.appletAppId = appletAppId;
}
@Value("${liquidnet.alipay.applet.pubKey}")
public void setAppletMerchantPubKey(String pubKey) {
PayAlipayUtils.appletMerchantPubKey = pubKey;
}
public PayAlipayUtils() {
}
public static PayAlipayUtils getInstance() {
return instance;
}
public AlipayClient getHttpClientApplet() {
if(httpClientApplet == null){
httpClientApplet = new DefaultAlipayClient(gatewayUrl, appletAppId, appletMerchantPrivateKey, "json", charset,
appletMerchantPubKey, sign_type);
}
return httpClientApplet;
}
}
package com.liquidnet.service.sweet.controller;
import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.sweet.service.impl.SweetAppletServiceImpl;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@Api(tags = "小程序-登陆相关")
@RestController
@RequestMapping("/appletLogin")
@Slf4j
public class SweetAppletLoginController {
@Autowired
private SweetAppletServiceImpl sweetAppletService;
@ApiOperation(value = "获取小程序openId")
@GetMapping(value = {"/code2openid"})
@ApiImplicitParams({
@ApiImplicitParam(type = "query", dataType = "String", name = "code", value = "code", required = true),
@ApiImplicitParam(type = "query", dataType = "String", name = "type", value = "alipay支付宝,wepay 微信")
})
public ResponseDto<String> findCode2openid(@RequestParam String code,@RequestParam String type) {
return sweetAppletService.findCode2openid(code,type);
}
}
package com.liquidnet.service.sweet.service.impl;
import com.alipay.api.AlipayClient;
import com.alipay.api.request.AlipaySystemOauthTokenRequest;
import com.alipay.api.response.AlipaySystemOauthTokenResponse;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.liquidnet.commons.lang.util.CollectionUtil;
import com.liquidnet.commons.lang.util.DateUtil;
import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.kylin.dto.vo.middle.KylinTicketTimesVo;
import com.liquidnet.service.kylin.dto.vo.mongo.KylinPerformanceVo;
import com.liquidnet.service.sweet.config.PayAlipayUtils;
import com.liquidnet.service.sweet.entity.SweetRemind;
import com.liquidnet.service.sweet.vo.SweetWechatUsersVo;
import lombok.extern.slf4j.Slf4j;
import me.chanjar.weixin.mp.bean.template.WxMpTemplateData;
import me.chanjar.weixin.mp.bean.template.WxMpTemplateMessage;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import org.springframework.util.ObjectUtils;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.List;
/**
* @author zjp
* @create 2024-04-25 15:47
*/
@Slf4j
@Service
public class SweetAppletServiceImpl {
public ResponseDto findCode2openid(String code,String type) {
AlipayClient httpClientApplet = PayAlipayUtils.getInstance().getHttpClientApplet();
// 构造请求参数以调用接口
AlipaySystemOauthTokenRequest request = new AlipaySystemOauthTokenRequest();
// 设置授权码
request.setCode(code);
// 设置授权方式
request.setGrantType("authorization_code");
try {
AlipaySystemOauthTokenResponse response = httpClientApplet.execute(request);
log.info("获取支付宝用户信息response=={}", response.getBody());
System.out.println(response.getBody());
if (response.isSuccess()) {
return ResponseDto.success(response.getOpenId());
} else {
return ResponseDto.failure("获取支付宝用户信息失败!");
}
} catch (Exception e) {
log.error("获取支付宝用户信息失败exception={}", e);
return ResponseDto.failure("获取支付宝用户信息失败!");
}
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment