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

Commit 90b5e63c authored by 姜秀龙's avatar 姜秀龙

Merge branch 'dev_alipay_applet' into 'master'

1.0 支付宝相关功能

See merge request !363
parents 8ad52480 0a1032f0
......@@ -20,7 +20,7 @@ public class DragonConstant {
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_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 ORDERCODE_REDIS_KET="dragon:refund:orderCode:";// 退款订单号对应 支付订单号
......@@ -191,7 +191,8 @@ public class DragonConstant {
PAYMENT_TYPE_MICROPAY_WEPAY("MICROPAYWEPAY","wepay","micropay","微信扫码枪支付"),
PAYMENT_TYPE_APPLET_DOUYINPAY("APPLETDOUYINPAY","douyinpay","applet","抖音小程序"),
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 message;
......
......@@ -40,6 +40,8 @@ public class DragonPayBaseReqDto implements Serializable, Cloneable{
private String receiptData;
//苹果的stransactionId
private String transactionId;
//
private String buyerOpenId;
private String appIdType="";
......
......@@ -42,7 +42,8 @@ public class DragonPayBaseRespDto implements Serializable {
//为了应对扫码支付错误码信息
private String msg;
//支付宝小程序tradeNo
private String tradeNo;
@Data
@JsonInclude(JsonInclude.Include.NON_NULL)
......@@ -75,5 +76,7 @@ public class DragonPayBaseRespDto implements Serializable {
private String orderId;
private String orderToken;
private String tradeNo;
}
}
......@@ -25,6 +25,7 @@ public class PayDataVo implements Serializable {
private String orderStr;
private String orderId;
private String orderToken;
private String tradeNo;
public String getOrderToken() {
return orderToken==null?"":orderToken;
......
......@@ -816,9 +816,7 @@ public abstract class AbstractRedisUtil {
public static void main(String[] args) {
String[] keys = {
"test:goblin:erp:push:order:0",
"test:goblin:erp:push:order:1",
"test:goblin:erp:push:order:2",
"adam:info:user:2371873704685404165798043"
};
for (String key : keys) {
long value = key.hashCode();
......
......@@ -245,5 +245,9 @@ liquidnet:
erp:
wdt:
url: https://sandbox.wangdian.cn/openapi2/
alipay:
applet:
appId: 2021002131608679
pubKey: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAph6mXcV8gPoEE6ZJJiaSk6x6jwWThLuzHDpZ9CMreZrMRUkGrV0WC920Ktp0tGlpo+BNfF+yBrapTAM8Y0Ztz5XcZWnx7gsfcsV48GHJ09qWbkJfXaBY30iX6O6q59jqWJMITQKz6OLL6HL3wxhoXooKHjXamQ983RTsI6wT4nWsTtBp8mTXCY+8XOQ4rw87AeHHetIoAtogk8H2etKgu1nDaQGXaA+ng+khab+b42pZSBX5g6jWlNCZviAoiy7e3upyu/6lqOhuLDEYzxD0i0oZ/46oIsILvEBCYQvXpbEz8KAM8dD5RBylNSpbu2edrrhytCq+0HFA4f1yp2D7WQIDAQAB
privateKey: MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCR3u0lL7LvLHK0VG8/FXcA6hjLC+oY4ra/zqs7QRg4EVR8GGQ1G3hg5av6LJxBN5lR07ONYojAOgzmxkoPdM4+aTn9XMfk2sAWen7RMMNcdpyx1eNdCFlm1GzT419CXkIS0Z+gUsxF+PasGamjzfB/Lg66DNZ1zHh1YPa/hwt4KKO1YHiReBCO0hLo7/uGTFUdfzB9pCUIzOTQwaYJPqRc0pz0/9MSF65K/Qtc9lqFpsVXmcWQOZZjoDJGIH6XEbyWXzMRPy5MLryvF3s6ZNURuU7j8t16DVkUTx3p+bEm2U3GmL5btltiouduPUBXHZjRUWAAyFVzc9EMQDQDA89rAgMBAAECggEAQPEHkQuoVPTr6D7C/EnZHk4aVaNrSEL+62veLdYwKx4EB+9wBXjCYhk+NHXR5vMSziw6/tIEYdg2UDOtWy48d+qvB45b7BY7eIZ2mTllcG/aGQ5JV+zUqIQgI0FR8qE2N1yd/Wl/ShOp9jrCnIud63Ec21XF0NIEOvW9RM2hnI+G6YLT9j3NbvJvB4zS7U7tejEXfDP1Oxtjk0ba7Qq04yYdeX16TOrs8VTpAzrj+xW/VJDLBoDfgLvE2G/PqhpFOFfH5V6zKTYfk9VQLh1H9dTj1CkFgRHEJfrFc7XcIIb9nxjnV5JXZmcPjmErQUg1t8JLzjJuQIvzCda5Ba9JEQKBgQDL+iSWlSfyJQyx283VIjhIJ3w9ZRAIWsm/Z1205tdnBeFAzsiItLamASf7Y1zMIMYxFyUD41npFUqetjzdxVHiWlOg2/cE7t2SQWbfrbgqwG0z23If4jUdIj3CJq9yLVWAXvvvm/I/Zrj4oGycYkWV0eGZwoAqIIHIOmTPslacUwKBgQC3Eve/jAHkcgCRppwvDvrw9AYKd6rrs9dyCcsj7Zz2sT7CTw89JcjmjwsLx5+v+zSGgkceG21uIusAfWoAbAYadIGP7zCOBWGVdFvt5hqqKtwL7sLdWrauKw5NId8SlVu0Jvy2dVjzyJ3jfYj1tXt/kCNLgf0zL4yZ+q9G+KBdiQKBgQCkNcSu1XVLIziNFv8lzl6w99i1NF8r2qsARB7UO+K9NaaZnd8i7xj7m4Kshtl2HAxyCMfr0WPYmSNxkhR+FRROvZkFrw+2EPaff7dp61iQUkmXrdq6gElyItbFLo+fw49JwS3hQBJNqEzRG5VUcGjErCqKtmKnh3Pz1c7CxjejsQKBgEbJ6cxCGdU4k6m+D7ROiY+z+8X+YbPEFXF+AfOBhGkLPiYqJc1SF+22r+G9La0BaFz+cPteRaEJlW7aD6vcGTwPgq2iIlc4E3STypwhlnvoGK/wgZ7P3cVY1q3ShAwOfqgZTyxKEbwp/YsiVlwT8Y3wsQUYXUx2fVpoyW+a4X9pAoGBAIQSQ/Dig/6kU7yb9F4uFYVGnrArQk9bFC3tXe1rgyw6nUq5txAmc6ovvrmCVMilQ2nfYuzAtuKy6ouf71u+nTDaTV9LxGOxKzSDu+58R8qZrzcnSerfPivocWmlpN5mse45RVRnlw3EvObCwKE3zkDYKk5PgxKsmLrLAgaF4CGg
#application-test-end
\ No newline at end of file
......@@ -44,7 +44,7 @@
<dependency>
<groupId>com.alipay.sdk</groupId>
<artifactId>alipay-sdk-java</artifactId>
<version>4.15.6.ALL</version>
<version>4.39.52.ALL</version>
</dependency>
<dependency>
<groupId>com.liquidnet</groupId>
......
......@@ -3,19 +3,15 @@ package com.liquidnet.service.dragon.channel.alipay.biz;
import com.alibaba.fastjson.JSONObject;
import com.alipay.api.AlipayApiException;
import com.alipay.api.AlipayClient;
import com.alipay.api.request.AlipayTradeAppPayRequest;
import com.alipay.api.request.AlipayTradePayRequest;
import com.alipay.api.request.AlipayTradeQueryRequest;
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.alipay.api.domain.AlipayTradeCreateModel;
import com.alipay.api.request.*;
import com.alipay.api.response.*;
import com.fasterxml.jackson.core.type.TypeReference;
import com.liquidnet.commons.lang.util.JsonUtils;
import com.liquidnet.commons.lang.util.StringUtil;
import com.liquidnet.service.dragon.channel.alipay.req.AlipayTradePayReq;
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.PayAlipayUtils;
import lombok.extern.slf4j.Slf4j;
......@@ -185,17 +181,75 @@ public class AlipayBiz{
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
*/
public static Map<String, Object> tradeQuery(String outTradeNo) {
public static Map<String, Object> tradeQuery(String outTradeNo,String paymentType) {
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<>();
bizContentMap.put("out_trade_no", outTradeNo);
AlipayTradeQueryRequest request = new AlipayTradeQueryRequest();
......
......@@ -27,6 +27,7 @@ public class AlipayTradePayReq implements Serializable, Cloneable{
private String notifyUrl;
private String timestamp;
private String authCode;
private String openId;
@Override
public String toString(){
return JSON.toJSONString(this);
......
......@@ -52,7 +52,7 @@ public abstract class AbstractAlipayStrategy implements IAlipayStrategy {
alipayTradePayReq.setNotifyUrl(this.getNotifyUrl());
alipayTradePayReq.setTimestamp(dragonPayBaseReqDto.getCreateDate());
alipayTradePayReq.setAuthCode(dragonPayBaseReqDto.getAuthCode());
alipayTradePayReq.setOpenId(dragonPayBaseReqDto.getOpenId());
//调用支付
long startTime = System.currentTimeMillis();
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 = "JSAPI_PAY";
}
@Override
protected String getNotifyUrl() {
return notifyUrl + "/notify/alipay/applet";
}
@Override
DragonPayBaseRespDto buildResponseDto(DragonPayBaseRespDto payBaseRespDto, Map<String, Object> respResult) {
payBaseRespDto.getPayData().setTradeNo(respResult.get("tradeNo")!=null?respResult.get("tradeNo").toString():"");
return payBaseRespDto;
}
}
......@@ -72,6 +72,8 @@ public class PayChannelStrategyAlipayImpl extends AbstractPayChannelStrategyImpl
private String signtType;
@Value("${liquidnet.dragon.alipay.charset}")
private String charset;
@Value("${liquidnet.alipay.applet.pubKey}")
private String appletMerchantPubKey;
@Override
public ResponseDto<DragonPayBaseRespDto> dragonPay(DragonPayBaseReqDto dragonPayBaseReqDto) {
......@@ -99,7 +101,12 @@ public class PayChannelStrategyAlipayImpl extends AbstractPayChannelStrategyImpl
//退款
if(notifyMap.containsKey("refund_fee") || notifyMap.containsKey("gmt_refund") || notifyMap.containsKey("out_biz_no")) {
returnStr = dragonOrderRefundsService.aliPayRefundCallBack(JSON.toJSONString(notifyMap));
//小程序退款不需要退款回调,手动修改退款状态
if(!(payType.equals(DragonConstant.PayChannelEnum.ALIPAY.getCode()) && deviceFrom.equals(DragonConstant.DeviceFromEnum.APPLET.getCode()))){
returnStr = dragonOrderRefundsService.aliPayRefundCallBack(JSON.toJSONString(notifyMap),null);
}else {
returnStr="success";
}
return returnStr;
}
......@@ -114,10 +121,18 @@ public class PayChannelStrategyAlipayImpl extends AbstractPayChannelStrategyImpl
}
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");
boolean notifyResult = false;
if (AlipayConstant.AlipayTradeStateEnum.TRADE_SUCCESS.name().equals(tradeStatus)
||AlipayConstant.AlipayTradeStateEnum.TRADE_FINISHED.name().equals(tradeStatus)) {
......@@ -153,7 +168,7 @@ public class PayChannelStrategyAlipayImpl extends AbstractPayChannelStrategyImpl
DragonPayOrderQueryRespDto respDto = alipayStrategyContext.getStrategy(DragonConstant.PayTypeEnum.getEnumByCode(ordersDto.getPaymentType()).getDeviceFrom()).checkOrderStatus(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);
if ("10000".equals(resultMap.get("code"))) {
// 当返回状态为“TRADE_FINISHED”交易成功结束和“TRADE_SUCCESS”支付成功时更新交易状态
......
......@@ -62,8 +62,9 @@ public class DragonOrdersServiceImpl implements IDragonOrdersService {
@Override
public ResponseDto<DragonPayBaseRespDto> dragonPay(DragonPayBaseReqDto dragonPayBaseReqDto) {
//service层进行效验
if(!(boolean)validateDragonPay(dragonPayBaseReqDto).get("resultStatus")){
return ResponseDto.failure("微信支付openId不能为空!");
Map map = validateDragonPay(dragonPayBaseReqDto);
if(!(boolean)map.get("resultStatus")){
return ResponseDto.failure(map.get("erro").toString());
}
//设置支付编号
if(dragonPayBaseReqDto.getDeviceFrom().equals("appletb")){
......@@ -87,6 +88,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){
dragonPayBaseReqDto.setName(dragonPayBaseReqDto.getName().substring(0,32));
}
......
......@@ -2,7 +2,10 @@ package com.liquidnet.service.dragon.utils;
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 AlipayClient httpClient = null;
......@@ -12,6 +15,24 @@ public class 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() {
......@@ -28,4 +49,12 @@ public class PayAlipayUtils {
}
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 @@
<artifactId>fastjson</artifactId>
<version>1.2.73</version>
</dependency>
<dependency>
<groupId>com.alipay.sdk</groupId>
<artifactId>alipay-sdk-java</artifactId>
<version>4.39.52.ALL</version>
</dependency>
<dependency>
<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("/findCode2openid")
@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