From 178b4a468c2fbfaa1469dabad84f4d05ec87c9c5 Mon Sep 17 00:00:00 2001 From: wyj <384813814@qq.com> Date: Fri, 19 Jan 2024 18:01:55 +0800 Subject: [PATCH] =?UTF-8?q?=E6=A0=B8=E9=94=80=E4=BB=A3=E7=A0=81=E8=B0=83?= =?UTF-8?q?=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../gadfly/tiktok/core/enums/TtOpApiUrl.java | 12 ++++ .../tiktok/open/api/TtOpCheckService.java | 34 ++++++++++ .../open/api/impl/TtOpCheckServiceImpl.java | 68 +++++++++++++++++++ .../open/bean/check/TtOpPrepareResult.java | 13 ++++ .../open/bean/check/TtOpVerifyRequest.java | 39 +++++++++++ .../open/common/AbstractTtOpApiBase.java | 6 +- .../tiktok/open/common/ITtOpBaseService.java | 5 ++ 7 files changed, 176 insertions(+), 1 deletion(-) create mode 100644 src/main/java/vip/gadfly/tiktok/open/api/TtOpCheckService.java create mode 100644 src/main/java/vip/gadfly/tiktok/open/api/impl/TtOpCheckServiceImpl.java create mode 100644 src/main/java/vip/gadfly/tiktok/open/bean/check/TtOpPrepareResult.java create mode 100644 src/main/java/vip/gadfly/tiktok/open/bean/check/TtOpVerifyRequest.java diff --git a/src/main/java/vip/gadfly/tiktok/core/enums/TtOpApiUrl.java b/src/main/java/vip/gadfly/tiktok/core/enums/TtOpApiUrl.java index 198668c..eef152d 100644 --- a/src/main/java/vip/gadfly/tiktok/core/enums/TtOpApiUrl.java +++ b/src/main/java/vip/gadfly/tiktok/core/enums/TtOpApiUrl.java @@ -107,6 +107,18 @@ public interface TtOpApiUrl { * oauth2静默授权的url链接. */ CONNECT_SILENT_OAUTH2_AUTHORIZE_URL(TIKTOK_SILENT_OPEN_API_HOST_URL, "/oauth/authorize/v2/?client_key=%s&redirect_uri=%s&response_type=code&scope=%s&state=%s"), + /** + * 验券准备 + */ + CERTIFICATE_URL(TIKTOK_OPEN_API_HOST_URL, "/goodlife/v1/fulfilment/certificate/prepare/?code=%s&encrypted_data=%s"), + /** + * 开始验券 + */ + CERTIFICATE_VERIFY_URL(TIKTOK_OPEN_API_HOST_URL, "https://open.douyin.com/goodlife/v1/fulfilment/certificate/verify/"), + /** + * 验券历史 + */ + CERTIFICATE_RECORD_URL(TIKTOK_OPEN_API_HOST_URL, "https://open.douyin.com/goodlife/v1/fulfilment/certificate/verify_record/query/?size=%s&cursor=%s&account_id=%s"), ; private final String prefix; diff --git a/src/main/java/vip/gadfly/tiktok/open/api/TtOpCheckService.java b/src/main/java/vip/gadfly/tiktok/open/api/TtOpCheckService.java new file mode 100644 index 0000000..091d48c --- /dev/null +++ b/src/main/java/vip/gadfly/tiktok/open/api/TtOpCheckService.java @@ -0,0 +1,34 @@ +package vip.gadfly.tiktok.open.api; + +import vip.gadfly.tiktok.open.bean.check.TtOpPrepareResult; +import vip.gadfly.tiktok.open.bean.userinfo.TtOpUserInfoResult; + +import java.util.List; + +/** + * wangyongjin + */ +public interface TtOpCheckService { + + /** + * 扫描核销预处理 + * @param code 核销码 + * @param encryptedData 二维码扫描 + */ + TtOpPrepareResult prepare(String code,String encryptedData); + + /** + * 验劵 + * @param poiId 门店id + * @param encryptedCode 返回的抖音券码 + */ + TtOpPrepareResult verify(String poiId, List encryptedCode); + + /** + * 验劵 + * @param cursor 游标,传前一页最后一条记录的游标(首页传0) + * @param size 页大小,取值范围1~20 + * @param accountId 企业号商家总店id(验券准备接口中返回) + */ + TtOpPrepareResult verifyRecord(Integer cursor, Integer size,String accountId); +} diff --git a/src/main/java/vip/gadfly/tiktok/open/api/impl/TtOpCheckServiceImpl.java b/src/main/java/vip/gadfly/tiktok/open/api/impl/TtOpCheckServiceImpl.java new file mode 100644 index 0000000..319aad3 --- /dev/null +++ b/src/main/java/vip/gadfly/tiktok/open/api/impl/TtOpCheckServiceImpl.java @@ -0,0 +1,68 @@ +package vip.gadfly.tiktok.open.api.impl; + +import com.google.common.collect.LinkedListMultimap; +import com.google.common.collect.Multimap; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import vip.gadfly.tiktok.config.TtOpConfigStorage; +import vip.gadfly.tiktok.core.enums.TtOpTicketType; +import vip.gadfly.tiktok.open.api.TtOpCheckService; +import vip.gadfly.tiktok.open.bean.check.TtOpPrepareResult; +import vip.gadfly.tiktok.open.bean.check.TtOpVerifyRequest; +import vip.gadfly.tiktok.open.common.ITtOpBaseService; + +import java.util.List; +import java.util.UUID; + +import static vip.gadfly.tiktok.core.enums.TtOpApiUrl.OAuth2.*; + +/** + * wangyongjin + */ +@Slf4j +@RequiredArgsConstructor +public class TtOpCheckServiceImpl implements TtOpCheckService { + + private final ITtOpBaseService ttOpBaseService; + + protected TtOpConfigStorage getTtOpConfigStorage() { + return this.ttOpBaseService.getTtOpConfigStorage(); + } + + @Override + public TtOpPrepareResult prepare(String code,String encryptedData) { + String rawUrl = CERTIFICATE_URL.getUrl(getTtOpConfigStorage()); + String accessToken = this.ttOpBaseService.getTicket(TtOpTicketType.CLIENT,false); + Multimap headers = LinkedListMultimap.create(); + headers.put("Content-Type", "application/json"); + headers.put("access-token",accessToken); + String url = String.format(rawUrl, code, encryptedData); + return this.ttOpBaseService.getWithHeader(url, headers,TtOpPrepareResult.class); + } + + @Override + public TtOpPrepareResult verify(String poiId, List encryptedCode) { + String rawUrl = CERTIFICATE_VERIFY_URL.getUrl(getTtOpConfigStorage()); + String accessToken = this.ttOpBaseService.getTicket(TtOpTicketType.CLIENT,false); + TtOpVerifyRequest request = new TtOpVerifyRequest() + .setVerifyToken(UUID.randomUUID().toString()) + .setPoiId(poiId) + .setEncryptedCodes(encryptedCode) + ; + Multimap headers = LinkedListMultimap.create(); + headers.put("Content-Type", "application/x-www-form-urlencoded"); + headers.put("access-token",accessToken); + return this.ttOpBaseService.postWithHeaders(rawUrl, headers, request, TtOpPrepareResult.class); + } + + @Override + public TtOpPrepareResult verifyRecord(Integer cursor, Integer size,String accountId) { + String rawUrl = CERTIFICATE_RECORD_URL.getUrl(getTtOpConfigStorage()); + String accessToken = this.ttOpBaseService.getTicket(TtOpTicketType.CLIENT,false); + Multimap headers = LinkedListMultimap.create(); + headers.put("Content-Type", "application/json"); + headers.put("access-token",accessToken); + String url = String.format(rawUrl, size, cursor,accountId); + return this.ttOpBaseService.getWithHeader(url, headers,TtOpPrepareResult.class); + } +} diff --git a/src/main/java/vip/gadfly/tiktok/open/bean/check/TtOpPrepareResult.java b/src/main/java/vip/gadfly/tiktok/open/bean/check/TtOpPrepareResult.java new file mode 100644 index 0000000..1cde4bd --- /dev/null +++ b/src/main/java/vip/gadfly/tiktok/open/bean/check/TtOpPrepareResult.java @@ -0,0 +1,13 @@ +package vip.gadfly.tiktok.open.bean.check; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import vip.gadfly.tiktok.open.common.TtOpBaseResult; + + +@Data +@EqualsAndHashCode(callSuper = true) +public class TtOpPrepareResult extends TtOpBaseResult { + + +} diff --git a/src/main/java/vip/gadfly/tiktok/open/bean/check/TtOpVerifyRequest.java b/src/main/java/vip/gadfly/tiktok/open/bean/check/TtOpVerifyRequest.java new file mode 100644 index 0000000..7f1f0ee --- /dev/null +++ b/src/main/java/vip/gadfly/tiktok/open/bean/check/TtOpVerifyRequest.java @@ -0,0 +1,39 @@ +package vip.gadfly.tiktok.open.bean.check; + +import com.alibaba.fastjson.annotation.JSONField; +import com.fasterxml.jackson.annotation.JsonAlias; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.google.gson.annotations.SerializedName; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; +import vip.gadfly.tiktok.open.common.TtOpBaseParam; + +import java.util.List; + +@Data +@Accessors(chain = true) +@EqualsAndHashCode(callSuper = true) +public class TtOpVerifyRequest extends TtOpBaseParam { + + + @JSONField(name = "verify_token") + @JsonAlias("verify_token") + @JsonProperty("verify_token") + @SerializedName("verify_token") + private String verifyToken; + + @JSONField(name = "poi_id") + @JsonAlias("poi_id") + @JsonProperty("poi_id") + @SerializedName("poi_id") + private String poiId; + + + @JSONField(name = "encrypted_codes") + @JsonAlias("encrypted_codes") + @JsonProperty("encrypted_codes") + @SerializedName("encrypted_codes") + private List encryptedCodes; + +} diff --git a/src/main/java/vip/gadfly/tiktok/open/common/AbstractTtOpApiBase.java b/src/main/java/vip/gadfly/tiktok/open/common/AbstractTtOpApiBase.java index 5bb0193..c2a77e7 100644 --- a/src/main/java/vip/gadfly/tiktok/open/common/AbstractTtOpApiBase.java +++ b/src/main/java/vip/gadfly/tiktok/open/common/AbstractTtOpApiBase.java @@ -18,9 +18,11 @@ import vip.gadfly.tiktok.core.http.impl.OkHttpTtOpHttpClient; import vip.gadfly.tiktok.core.util.TtOpConfigStorageHolder; import vip.gadfly.tiktok.core.util.crypto.MD5; import vip.gadfly.tiktok.core.util.crypto.SignUtil; +import vip.gadfly.tiktok.open.api.TtOpCheckService; import vip.gadfly.tiktok.open.api.TtOpOAuth2Service; import vip.gadfly.tiktok.open.api.TtOpUserInfoService; import vip.gadfly.tiktok.open.api.TtOpVideoService; +import vip.gadfly.tiktok.open.api.impl.TtOpCheckServiceImpl; import vip.gadfly.tiktok.open.api.impl.TtOpOauth2ServiceImpl; import vip.gadfly.tiktok.open.api.impl.TtOpUserInfoServiceImpl; import vip.gadfly.tiktok.open.api.impl.TtOpVideoServiceImpl; @@ -62,7 +64,9 @@ public abstract class AbstractTtOpApiBase implements ITtOpBaseService, IRetryabl @Getter @Setter private TtOpVideoService ttOpVideoService = new TtOpVideoServiceImpl(this); - + @Getter + @Setter + private TtOpCheckService ttOpCheckService = new TtOpCheckServiceImpl(this); private Map configStorageMap; public AbstractTtOpApiBase() { diff --git a/src/main/java/vip/gadfly/tiktok/open/common/ITtOpBaseService.java b/src/main/java/vip/gadfly/tiktok/open/common/ITtOpBaseService.java index cb83c6f..7d6d816 100644 --- a/src/main/java/vip/gadfly/tiktok/open/common/ITtOpBaseService.java +++ b/src/main/java/vip/gadfly/tiktok/open/common/ITtOpBaseService.java @@ -3,6 +3,7 @@ package vip.gadfly.tiktok.open.common; import com.google.common.collect.Multimap; import vip.gadfly.tiktok.config.TtOpConfigStorage; import vip.gadfly.tiktok.core.enums.TtOpTicketType; +import vip.gadfly.tiktok.open.api.TtOpCheckService; import vip.gadfly.tiktok.open.api.TtOpOAuth2Service; import vip.gadfly.tiktok.open.api.TtOpUserInfoService; import vip.gadfly.tiktok.open.api.TtOpVideoService; @@ -174,4 +175,8 @@ public interface ITtOpBaseService { TtOpVideoService getTtOpVideoService(); void setTtOpVideoService(TtOpVideoService ttOpVideoService); + + TtOpCheckService getTtOpCheckService(); + + void setTtOpCheckService(TtOpCheckService ttOpCheckService); } -- Gitee