Stripe 回调添加异常处理和异常情况下邮件通知
This commit is contained in:
@@ -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");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package com.ai.da.controller;
|
package com.ai.da.controller;
|
||||||
|
|
||||||
import com.ai.da.common.response.Response;
|
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.model.dto.ProductPurchaseDTO;
|
||||||
import com.ai.da.service.StripeService;
|
import com.ai.da.service.StripeService;
|
||||||
import com.paypal.http.HttpResponse;
|
import com.paypal.http.HttpResponse;
|
||||||
@@ -9,6 +10,7 @@ import com.stripe.exception.StripeException;
|
|||||||
import io.swagger.annotations.Api;
|
import io.swagger.annotations.Api;
|
||||||
import io.swagger.annotations.ApiOperation;
|
import io.swagger.annotations.ApiOperation;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.beans.factory.annotation.Value;
|
||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.*;
|
||||||
import springfox.documentation.annotations.ApiIgnore;
|
import springfox.documentation.annotations.ApiIgnore;
|
||||||
|
|
||||||
@@ -19,7 +21,6 @@ import javax.servlet.http.HttpServletResponse;
|
|||||||
import javax.validation.Valid;
|
import javax.validation.Valid;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
@Api(tags = "Stripe模块")
|
@Api(tags = "Stripe模块")
|
||||||
@Slf4j
|
@Slf4j
|
||||||
@@ -37,14 +38,27 @@ public class StripeController {
|
|||||||
return Response.success(stripeService.pay(productPurchaseDTO, request));
|
return Response.success(stripeService.pay(productPurchaseDTO, request));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Value("${stripe.webhook.fail.reminder}")
|
||||||
|
private String webhookReminderFlag;
|
||||||
|
|
||||||
@ApiOperation("支付通知")
|
@ApiOperation("支付通知")
|
||||||
@PostMapping("/trade/notify")
|
@PostMapping("/trade/notify")
|
||||||
public void callback(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
|
public void callback(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
|
||||||
Boolean result = stripeService.notify(request);
|
try{
|
||||||
if (result){
|
Boolean result = stripeService.notify(request);
|
||||||
response.setStatus(HttpServletResponse.SC_OK);
|
if (result){
|
||||||
}else {
|
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);
|
response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
|
||||||
|
// 给我发送邮件
|
||||||
|
if (webhookReminderFlag.equals("1")){
|
||||||
|
SendEmailUtil.commonExceptionReminder("Stripe Webhook 回调", new String[]{"xupei3360@163.com"});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -982,7 +982,7 @@ public class StripeServiceImpl implements StripeService {
|
|||||||
}
|
}
|
||||||
if (!type.equals("reminder") && !type.equals("cancel") && paymentInfo.getNotified() == 1){
|
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;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -107,3 +107,6 @@ rabbitmq.queues.relightResult=Relight-dev
|
|||||||
rabbitmq.exchange.generate=generate-exchange
|
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
|
||||||
@@ -109,3 +109,6 @@ rabbitmq.queues.relightResult=Relight-prod
|
|||||||
rabbitmq.exchange.generate=generate-exchange
|
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
|
||||||
Reference in New Issue
Block a user