|
@@ -1,23 +1,35 @@
|
|
|
package cn.kdan.cloud.pdf.office.payment.client;
|
|
|
|
|
|
-import cn.kdan.cloud.pdf.office.api.payment.bo.CreatSubscriptionsPaypalBO;
|
|
|
import cn.kdan.cloud.pdf.office.api.payment.bo.CreatSubscriptionsResultPaypalBO;
|
|
|
-import cn.kdan.cloud.pdf.office.api.payment.constant.PaypalAPIConstant;
|
|
|
+import cn.kdan.cloud.pdf.office.api.payment.bo.GeneratePayLinkPaddleBO;
|
|
|
+import cn.kdan.cloud.pdf.office.api.payment.bo.GeneratePayLinkResultPaddleBO;
|
|
|
+import cn.kdan.cloud.pdf.office.api.payment.constant.PaddleAPIConstant;
|
|
|
+import cn.kdan.cloud.pdf.office.api.payment.paddle.PaddleResult;
|
|
|
+import cn.kdan.cloud.pdf.office.common.exception.BackendRuntimeException;
|
|
|
import cn.kdan.cloud.pdf.office.common.utils.JsonUtils;
|
|
|
-import cn.kdan.cloud.pdf.office.payment.interceptor.PaypalClientHttpRequestInterceptor;
|
|
|
-import cn.kdan.cloud.pdf.office.payment.properties.PaypalProperties;
|
|
|
+import cn.kdan.cloud.pdf.office.payment.interceptor.PaddleClientHttpRequestInterceptor;
|
|
|
+import cn.kdan.cloud.pdf.office.payment.properties.PaddleProperties;
|
|
|
+import com.alibaba.fastjson.JSON;
|
|
|
+import com.alibaba.fastjson.TypeReference;
|
|
|
+import com.google.common.collect.Iterables;
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
import org.jetbrains.annotations.NotNull;
|
|
|
import org.springframework.http.HttpEntity;
|
|
|
import org.springframework.http.HttpHeaders;
|
|
|
import org.springframework.http.HttpMethod;
|
|
|
import org.springframework.http.MediaType;
|
|
|
+import org.springframework.http.client.ClientHttpResponse;
|
|
|
+import org.springframework.http.client.SimpleClientHttpRequestFactory;
|
|
|
import org.springframework.http.converter.HttpMessageConverter;
|
|
|
import org.springframework.http.converter.StringHttpMessageConverter;
|
|
|
import org.springframework.stereotype.Component;
|
|
|
+import org.springframework.util.LinkedMultiValueMap;
|
|
|
+import org.springframework.util.MultiValueMap;
|
|
|
+import org.springframework.web.client.DefaultResponseErrorHandler;
|
|
|
import org.springframework.web.client.RestTemplate;
|
|
|
|
|
|
-import java.util.ArrayList;
|
|
|
-import java.util.List;
|
|
|
+import java.io.IOException;
|
|
|
+import java.util.*;
|
|
|
|
|
|
/**
|
|
|
* @author ComPDFKit-WPH 2023/1/16
|
|
@@ -25,29 +37,34 @@ import java.util.List;
|
|
|
* PaddleClient
|
|
|
*/
|
|
|
@Component
|
|
|
+@Slf4j
|
|
|
public class PaddleClient {
|
|
|
|
|
|
private final RestTemplate restTemplate = new RestTemplate();
|
|
|
|
|
|
- private static String PADDLE_HOST;
|
|
|
+ private static String PADDLE_CHECKOUT_HOST;
|
|
|
|
|
|
- public PaddleClient(PaypalProperties properties, PaypalClientHttpRequestInterceptor paypalClientHttpRequestInterceptor) {
|
|
|
+ private static String PADDLE_VENDORS_HOST;
|
|
|
|
|
|
+ private final PaddleProperties properties;
|
|
|
|
|
|
- /**PADDLE_HOST = properties.getAddress();
|
|
|
+ public PaddleClient(PaddleProperties properties, PaddleClientHttpRequestInterceptor paddleClientHttpRequestInterceptor) {
|
|
|
+ this.properties = properties;
|
|
|
+ PADDLE_CHECKOUT_HOST = properties.getCheckoutHost();
|
|
|
+ PADDLE_VENDORS_HOST = properties.getVendorsHost();
|
|
|
SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();
|
|
|
factory.setReadTimeout(properties.getReadTimeOut());
|
|
|
factory.setConnectTimeout(properties.getConnectTimeout());
|
|
|
restTemplate.setRequestFactory(factory);
|
|
|
- restTemplate.setInterceptors(Collections.singletonList(paypalClientHttpRequestInterceptor));
|
|
|
- restTemplate.setMessageConverters(getConverts());
|
|
|
+// restTemplate.setMessageConverters(getConverts());
|
|
|
+ restTemplate.setInterceptors(Collections.singletonList(paddleClientHttpRequestInterceptor));
|
|
|
restTemplate.setErrorHandler(new DefaultResponseErrorHandler() {
|
|
|
@Override
|
|
|
public void handleError(@NotNull ClientHttpResponse clientHttpResponse) throws IOException {
|
|
|
- //只要重写此方法,不去抛出HttpClientErrorException异常即可
|
|
|
-// HttpStatus statusCode = clientHttpResponse.getStatusCode();
|
|
|
+ // 只要重写此方法,不去抛出HttpClientErrorException异常即可
|
|
|
+ // HttpStatus statusCode = clientHttpResponse.getStatusCode();
|
|
|
}
|
|
|
- });*/
|
|
|
+ });
|
|
|
}
|
|
|
|
|
|
private List<HttpMessageConverter<?>> getConverts() {
|
|
@@ -58,6 +75,7 @@ public class PaddleClient {
|
|
|
add(MediaType.TEXT_PLAIN);
|
|
|
add(MediaType.TEXT_HTML);
|
|
|
add(MediaType.APPLICATION_JSON);
|
|
|
+ add(MediaType.ALL);
|
|
|
}};
|
|
|
stringConvert.setSupportedMediaTypes(stringMediaTypes);
|
|
|
messageConverters.add(stringConvert);
|
|
@@ -70,12 +88,33 @@ public class PaddleClient {
|
|
|
* @param creatSubscriptions creatSubscriptions
|
|
|
* @return CreatSubscriptionsResultBO
|
|
|
*/
|
|
|
- public CreatSubscriptionsResultPaypalBO creatSubscriptions(CreatSubscriptionsPaypalBO creatSubscriptions) {
|
|
|
- String resultJson = restTemplate.exchange(PADDLE_HOST + PaypalAPIConstant.CREAT_SUBSCRIPTIONS,
|
|
|
+ public GeneratePayLinkResultPaddleBO creatSubscriptions(GeneratePayLinkPaddleBO creatSubscriptions) {
|
|
|
+ creatSubscriptions.setVendorId(properties.getVendorId());
|
|
|
+ creatSubscriptions.setVendorAuthCode(properties.getVendorAuthCode());
|
|
|
+ MultiValueMap<String, Object> requestParamMap = new LinkedMultiValueMap<>();
|
|
|
+
|
|
|
+ Map<String, Object> stringObjectMap = JSON.parseObject(JsonUtils.getJsonString(creatSubscriptions),
|
|
|
+ new TypeReference<Map<String, Object>>() {});
|
|
|
+
|
|
|
+ Iterables.removeIf(stringObjectMap.values(), Objects::isNull);
|
|
|
+
|
|
|
+ requestParamMap.setAll(stringObjectMap);
|
|
|
+
|
|
|
+ log.info("prama:{}",requestParamMap);
|
|
|
+ String resultJson = restTemplate.exchange(
|
|
|
+ PADDLE_VENDORS_HOST + PaddleAPIConstant.CREAT_PAY_LINK,
|
|
|
HttpMethod.POST,
|
|
|
- new HttpEntity<>(JsonUtils.getJsonString(creatSubscriptions), getJsonHttpHeaders()),
|
|
|
+ new HttpEntity<>(requestParamMap, getJsonHttpHeaders()),
|
|
|
String.class).getBody();
|
|
|
- return JsonUtils.jsonStringToBean(resultJson, CreatSubscriptionsResultPaypalBO.class);
|
|
|
+ PaddleResult<GeneratePayLinkResultPaddleBO> paddleResult = JSON.parseObject(resultJson,
|
|
|
+ new TypeReference<PaddleResult<GeneratePayLinkResultPaddleBO>>() {});
|
|
|
+
|
|
|
+ if (!paddleResult.isSuccess()) {
|
|
|
+ log.info("paddle 生成支付链接调用失败\n:{},\n参数:{}", paddleResult.getError(), creatSubscriptions);
|
|
|
+ throw new BackendRuntimeException(paddleResult.getError().getMessage());
|
|
|
+ }
|
|
|
+ // TODO 返回信息再调整
|
|
|
+ return paddleResult.getResponse();
|
|
|
}
|
|
|
|
|
|
|
|
@@ -85,24 +124,19 @@ public class PaddleClient {
|
|
|
* @param subscriptionId subscriptionId
|
|
|
* @return CreatSubscriptionsResultBO
|
|
|
*/
|
|
|
- public CreatSubscriptionsResultPaypalBO getSubscriptionInfo(@NotNull String subscriptionId){
|
|
|
- String resultJson = restTemplate.exchange(PADDLE_HOST + PaypalAPIConstant.GET_SUBSCRIPTIONS_INFO + subscriptionId,
|
|
|
- HttpMethod.GET,
|
|
|
- new HttpEntity<>(getJsonHttpHeaders()),
|
|
|
- String.class).getBody();
|
|
|
- return JsonUtils.jsonStringToBean(resultJson, CreatSubscriptionsResultPaypalBO.class);
|
|
|
+ public CreatSubscriptionsResultPaypalBO getSubscriptionInfo(@NotNull String subscriptionId) {
|
|
|
+// String resultJson = restTemplate.exchange(PADDLE_HOST + PaypalAPIConstant.GET_SUBSCRIPTIONS_INFO + subscriptionId,
|
|
|
+// HttpMethod.GET,
|
|
|
+// new HttpEntity<>(getJsonHttpHeaders()),
|
|
|
+// String.class).getBody();
|
|
|
+// return JsonUtils.jsonStringToBean(resultJson, CreatSubscriptionsResultPaypalBO.class);
|
|
|
+ return null;
|
|
|
}
|
|
|
|
|
|
-
|
|
|
- /**
|
|
|
- * 创建 APPLICATION_JSON HttpHeaders
|
|
|
- *
|
|
|
- * @return HttpHeaders
|
|
|
- */
|
|
|
@NotNull
|
|
|
private HttpHeaders getJsonHttpHeaders() {
|
|
|
HttpHeaders httpHeaders = new HttpHeaders();
|
|
|
- httpHeaders.setContentType(MediaType.APPLICATION_JSON);
|
|
|
+ httpHeaders.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
|
|
|
return httpHeaders;
|
|
|
}
|
|
|
|