refactor(payment): 支付宝绑定相关功能

master
yang 2025-03-07 18:32:42 +08:00
parent 32a50b8394
commit 40eb64b043
4 changed files with 20 additions and 13 deletions

View File

@ -92,13 +92,19 @@ public class AliPayController extends BaseController {
String state = ShareCodeUtils.idToCode(SecurityUtils.getUserId()); // 防止CSRF攻击 String state = ShareCodeUtils.idToCode(SecurityUtils.getUserId()); // 防止CSRF攻击
String encodedRedirectUri = URLEncoder.encode(bindUrl, "UTF-8"); String encodedRedirectUri = URLEncoder.encode(bindUrl, "UTF-8");
// 线上
// String authUrl = String.format(
// "https://openauth.alipay.com/oauth2/publicAppAuthorize.htm?app_id=%s&scope=%s&redirect_uri=%s&state=%s",
// appId, scope, encodedRedirectUri, state
// );
// 沙箱
String authUrl = String.format( String authUrl = String.format(
"https://openauth.alipay.com/oauth2/publicAppAuthorize.htm?app_id=%s&scope=%s&redirect_uri=%s&state=%s", "https://openauth-sandbox.dl.alipaydev.com/oauth2/publicAppAuthorize.htm?app_id=%s&scope=%s&redirect_uri=%s&state=%s",
appId, scope, encodedRedirectUri, state appId, scope, encodedRedirectUri, state
); );
// QrCodeUtil.generate(authUrl, 300, 300, "png", response.getOutputStream()); // QrCodeUtil.generate(authUrl, 300, 300, "png", response.getOutputStream());
return R.ok("成功", authUrl); return R.ok(authUrl, "成功");
} }
/** /**
@ -106,6 +112,7 @@ public class AliPayController extends BaseController {
*/ */
@GetMapping("/queryBindStatus") @GetMapping("/queryBindStatus")
@ApiOperation(value = "支付宝绑定状态查询") @ApiOperation(value = "支付宝绑定状态查询")
@ResponseBody
public R<Object> queryTradeStatus() throws Exception { public R<Object> queryTradeStatus() throws Exception {
return aliPayService.queryBindStatus(); return aliPayService.queryBindStatus();

View File

@ -129,7 +129,6 @@ public class SecurityConfig {
requests.antMatchers("/login", requests.antMatchers("/login",
"/register", "/register",
"/captchaImage", "/captchaImage",
"/ali/pay/doPay",
"/ali/pay/notify", "/ali/pay/notify",
"/ali/pay/callback", "/ali/pay/callback",
"/file/**", "/file/**",

View File

@ -20,6 +20,7 @@ import com.alipay.api.request.AlipayFundTransUniTransferRequest;
import com.alipay.api.request.AlipaySystemOauthTokenRequest; import com.alipay.api.request.AlipaySystemOauthTokenRequest;
import com.alipay.api.response.AlipayFundAccountQueryResponse; import com.alipay.api.response.AlipayFundAccountQueryResponse;
import com.alipay.api.response.AlipayFundTransUniTransferResponse; import com.alipay.api.response.AlipayFundTransUniTransferResponse;
import com.alipay.api.response.AlipaySystemOauthTokenResponse;
import com.alipay.easysdk.factory.Factory; import com.alipay.easysdk.factory.Factory;
import com.alipay.easysdk.kernel.Config; import com.alipay.easysdk.kernel.Config;
import com.alipay.easysdk.payment.common.models.AlipayTradeCancelResponse; import com.alipay.easysdk.payment.common.models.AlipayTradeCancelResponse;
@ -200,7 +201,8 @@ public class AliPayServiceImpl implements AliPayService {
tradeEntity.getCode(), tradeEntity.getCode(),
orderTradeDto.getAmount().toString()); orderTradeDto.getAmount().toString());
// 缓存到redis // 缓存到redis
redisCache.setCacheObject(tradeEntity.getCode() + "_promotionId", orderTradeDto.getPromotionId()); if (Objects.nonNull(orderTradeDto.getPromotionId()))
redisCache.setCacheObject(tradeEntity.getCode() + "_promotionId", orderTradeDto.getPromotionId(), 15, TimeUnit.MINUTES);
// AlipayTradePrecreateResponse payResponse = Factory.Payment.FaceToFace().preCreate("订单主题Mac笔记本", "LS123qwe123", "19999"); // AlipayTradePrecreateResponse payResponse = Factory.Payment.FaceToFace().preCreate("订单主题Mac笔记本", "LS123qwe123", "19999");
//参照官方文档响应示例,解析返回结果 //参照官方文档响应示例,解析返回结果
String httpBodyStr = payResponse.getHttpBody(); String httpBodyStr = payResponse.getHttpBody();
@ -308,11 +310,11 @@ public class AliPayServiceImpl implements AliPayService {
.one(); .one();
if (Objects.isNull(sysUserPayAccount)) { if (Objects.isNull(sysUserPayAccount)) {
redisCache.setCacheObject("alipay:bind:user:status:", 0, 4, TimeUnit.SECONDS); redisCache.setCacheObject("alipay:bind:user:status:" + SecurityUtils.getUserId(), "0", 4, TimeUnit.SECONDS);
return R.ok(0); return R.ok("0");
} }
redisCache.setCacheObject("alipay:bind:user:status:", 1, 4, TimeUnit.SECONDS); redisCache.setCacheObject("alipay:bind:user:status:" + SecurityUtils.getUserId(), "1", 4, TimeUnit.SECONDS);
return R.ok(1); return R.ok("1");
} }
/** /**
@ -467,7 +469,7 @@ public class AliPayServiceImpl implements AliPayService {
AlipaySystemOauthTokenRequest request = new AlipaySystemOauthTokenRequest(); AlipaySystemOauthTokenRequest request = new AlipaySystemOauthTokenRequest();
request.setCode(authCode); request.setCode(authCode);
request.setGrantType("authorization_code"); request.setGrantType("authorization_code");
com.alipay.api.response.AlipaySystemOauthTokenResponse response = alipayClient.execute(request); AlipaySystemOauthTokenResponse response = alipayClient.certificateExecute(request);
if (response.isSuccess()) { if (response.isSuccess()) {
// 支付宝用户唯一ID // 支付宝用户唯一ID
String openId = response.getOpenId(); String openId = response.getOpenId();
@ -487,15 +489,14 @@ public class AliPayServiceImpl implements AliPayService {
userPayAccount.setOpenId(openId); userPayAccount.setOpenId(openId);
userPayAccount.setType(0); userPayAccount.setType(0);
sysUserPayAccountService.save(userPayAccount); sysUserPayAccountService.save(userPayAccount);
redisCache.setCacheObject("alipay:bind:user:status:", 1, 4, TimeUnit.SECONDS); redisCache.setCacheObject("alipay:bind:user:status:" + userId, "1", 4, TimeUnit.SECONDS);
return "success"; return "success";
} else { } else {
System.out.println("绑定失败:" + response.getSubMsg()); System.out.println("绑定失败:" + response.getSubMsg());
redisCache.setCacheObject("alipay:bind:user:status:", 0, 4, TimeUnit.SECONDS); redisCache.setCacheObject("alipay:bind:user:status:" + userId, "0", 4, TimeUnit.SECONDS);
return "fail"; return "fail";
} }
} catch (AlipayApiException e) { } catch (AlipayApiException e) {
redisCache.setCacheObject("alipay:bind:user:status:", 0, 4, TimeUnit.SECONDS);
return "fail"; return "fail";
} }

View File

@ -237,7 +237,7 @@ public class OrderTradeServiceImpl extends ServiceImpl<OrderTradeMapper, OrderTr
if (OrderTypeEnum.POINTS.getName().equals(suffix)) { if (OrderTypeEnum.POINTS.getName().equals(suffix)) {
pointsHandler(orderTrade, params); pointsHandler(orderTrade, params);
} else if (OrderTypeEnum.MEMBER.getName().equals(suffix)) { } else if (OrderTypeEnum.MEMBER.getName().equals(suffix)) {
Long promotionId = redisCache.getCacheObject(params.get("out_trade_no") + "promotionId"); Long promotionId = redisCache.getCacheObject(params.get("out_trade_no") + "_promotionId");
memberHandler(orderTrade, promotionId); memberHandler(orderTrade, promotionId);
redisCache.deleteObject(params.get("out_trade_no") + "promotionId"); redisCache.deleteObject(params.get("out_trade_no") + "promotionId");
} else if (OrderTypeEnum.WALLET.getName().equals(suffix)) { } else if (OrderTypeEnum.WALLET.getName().equals(suffix)) {