Stripe 回调添加异常处理和异常情况下邮件通知

This commit is contained in:
2025-02-19 14:14:20 +08:00
parent d6f078ab60
commit fbe9dc87e9
5 changed files with 65 additions and 8 deletions

View File

@@ -1036,4 +1036,41 @@ public class SendEmailUtil {
}
}
public static void commonExceptionReminder(String functionName, String[] destination) {
try {
// 实例化一个认证对象,入参需要传入腾讯云账户 SecretId 和 SecretKey此处还需注意密钥对的保密
// 代码泄露可能会导致 SecretId 和 SecretKey 泄露并威胁账号下所有资源的安全性。以下代码示例仅供参考建议采用更安全的方式来使用密钥请参见https://cloud.tencent.com/document/product/1278/85305
// 密钥可前往官网控制台 https://console.cloud.tencent.com/cam/capi 进行获取
Credential cred = new Credential(SECRET_ID, SECRET_KEy);
// 实例化一个http选项可选的没有特殊需求可以跳过
HttpProfile httpProfile = new HttpProfile();
httpProfile.setEndpoint("ses.tencentcloudapi.com");
// 实例化一个client选项可选的没有特殊需求可以跳过
ClientProfile clientProfile = new ClientProfile();
clientProfile.setHttpProfile(httpProfile);
// 实例化要请求产品的client对象,clientProfile是可选的
SesClient client = new SesClient(cred, "ap-hongkong", clientProfile);
// 实例化一个请求对象,每个接口都会对应一个request对象
SendEmailRequest req = new SendEmailRequest();
req.setFromEmailAddress(SEND_ADDRESS);
req.setDestination(destination);
Template template = new Template();
req.setSubject("AiDA发生异常请及时处理");
template.setTemplateID(UPLOAD_TIMEOUT_REMINDER);
JSONObject param = new JSONObject();
param.put("function", functionName);
// 邮件内容 {{function}}处理异常,请及时查看
template.setTemplateData(param.toJSONString());
req.setTemplate(template);
// 返回的resp是一个SendEmailResponse的实例与请求对象对应
SendEmailResponse resp = client.SendEmail(req);
log.info("邮件发送结果res###{}", SendEmailResponse.toJsonString(resp));
} catch (TencentCloudSDKException e) {
log.info("邮件发送失败###{}", e.toString());
throw new BusinessException("failed.to.send.mail");
}
}
}

View File

@@ -1,6 +1,7 @@
package com.ai.da.controller;
import com.ai.da.common.response.Response;
import com.ai.da.common.utils.SendEmailUtil;
import com.ai.da.model.dto.ProductPurchaseDTO;
import com.ai.da.service.StripeService;
import com.paypal.http.HttpResponse;
@@ -9,6 +10,7 @@ import com.stripe.exception.StripeException;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;
import springfox.documentation.annotations.ApiIgnore;
@@ -19,7 +21,6 @@ import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid;
import java.io.IOException;
import java.util.List;
import java.util.Map;
@Api(tags = "Stripe模块")
@Slf4j
@@ -37,14 +38,27 @@ public class StripeController {
return Response.success(stripeService.pay(productPurchaseDTO, request));
}
@Value("${stripe.webhook.fail.reminder}")
private String webhookReminderFlag;
@ApiOperation("支付通知")
@PostMapping("/trade/notify")
public void callback(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Boolean result = stripeService.notify(request);
if (result){
response.setStatus(HttpServletResponse.SC_OK);
}else {
try{
Boolean result = stripeService.notify(request);
if (result){
response.setStatus(HttpServletResponse.SC_OK);
}else {
response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
}
}catch (Exception e){
log.error("Stripe Controller层异常捕捉, {}", e.getMessage());
e.printStackTrace();
response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
// 给我发送邮件
if (webhookReminderFlag.equals("1")){
SendEmailUtil.commonExceptionReminder("Stripe Webhook 回调", new String[]{"xupei3360@163.com"});
}
}
}

View File

@@ -982,7 +982,7 @@ public class StripeServiceImpl implements StripeService {
}
if (!type.equals("reminder") && !type.equals("cancel") && paymentInfo.getNotified() == 1){
// 已经邮件通知过,直接返回
log.info("不发送邮件原因【type为{}order_no为{}且已经已经进行邮件通知】", type, orderNo);
log.info("不发送邮件原因【type为{}order_no为{},已经进行邮件通知】", type, orderNo);
return true;
}

View File

@@ -106,4 +106,7 @@ rabbitmq.queues.toProductImageResult=ToProductImage-dev
rabbitmq.queues.relightResult=Relight-dev
rabbitmq.exchange.generate=generate-exchange
orderList.link=https://develop.aida.com.hk/home/homePage?order=
orderList.link=https://develop.aida.com.hk/home/homePage?order=
# 0 不发送邮件通知 1 发送邮件通知
stripe.webhook.fail.reminder=0

View File

@@ -108,4 +108,7 @@ rabbitmq.queues.toProductImageResult=ToProductImage-prod
rabbitmq.queues.relightResult=Relight-prod
rabbitmq.exchange.generate=generate-exchange
orderList.link=https://aida.com.hk/home/homePage?order=
orderList.link=https://aida.com.hk/home/homePage?order=
# 0 不发送邮件通知 1 发送邮件通知
stripe.webhook.fail.reminder=1