- * 该接口用于通过应用在企业内编辑会议室。
+ * 企业可通过此接口删除指定的会议室。
* 请求方式: POST(HTTPS)
* 请求地址: https://qyapi.weixin.qq.com/cgi-bin/oa/meetingroom/del?access_token=ACCESS_TOKEN
*
* 文档地址:https://developer.work.weixin.qq.com/document/path/93619
*
*
- * @param meetingRoomId 会议室对象
+ * @param meetingRoomId 会议室ID
* @throws WxErrorException .
*/
void deleteMeetingRoom(Integer meetingRoomId) throws WxErrorException;
+
+ /**
+ * 查询会议室的预定信息.
+ * + * 企业可通过此接口查询相关会议室在指定时间段的预定情况,如是否已被预定,预定者的userid等信息,不支持跨天查询。 + * 请求方式: POST(HTTPS) + * 请求地址: https://qyapi.weixin.qq.com/cgi-bin/oa/meetingroom/get_booking_info?access_token=ACCESS_TOKEN + * + * 文档地址:https://developer.work.weixin.qq.com/document/path/93620 + *+ * + * @param wxCpOaMeetingRoomBookingInfoRequest 会议室预定信息查询对象 + * @throws WxErrorException . + */ + WxCpOaMeetingRoomBookingInfoResult getMeetingRoomBookingInfo(WxCpOaMeetingRoomBookingInfoRequest wxCpOaMeetingRoomBookingInfoRequest) throws WxErrorException; + + /** + * 预定会议室. + *
+ * 企业可通过此接口预定会议室并自动关联日程。 + * 请求方式: POST(HTTPS) + * 请求地址: https://qyapi.weixin.qq.com/cgi-bin/oa/meetingroom/book?access_token=ACCESS_TOKEN + * + * 文档地址:https://developer.work.weixin.qq.com/document/path/93620 + *+ * + * @param wxCpOaMeetingRoomBookRequest 会议室预定对象 + * @throws WxErrorException . + */ + WxCpOaMeetingRoomBookResult bookingMeetingRoom(WxCpOaMeetingRoomBookRequest wxCpOaMeetingRoomBookRequest) throws WxErrorException; + + /** + * 通过日程预定会议室. + *
+ * 企业可通过此接口为指定日程预定会议室,支持重复日程预定。 + * 请求方式: POST(HTTPS) + * 请求地址: https://qyapi.weixin.qq.com/cgi-bin/oa/meetingroom/book_by_schedule?access_token=ACCESS_TOKEN + * + * 文档地址:https://developer.work.weixin.qq.com/document/path/93620 + *+ * + * @param wxCpOaMeetingRoomBookByScheduleRequest 会议室预定对象 + * @throws WxErrorException . + */ + WxCpOaMeetingRoomBookResult bookingMeetingRoomBySchedule(WxCpOaMeetingRoomBookByScheduleRequest wxCpOaMeetingRoomBookByScheduleRequest) throws WxErrorException; + + /** + * 通过会议预定会议室. + *
+ * 企业可通过此接口为指定会议预定会议室,支持重复会议预定。 + * 请求方式: POST(HTTPS) + * 请求地址: https://qyapi.weixin.qq.com/cgi-bin/oa/meetingroom/book_by_meeting?access_token=ACCESS_TOKEN + * + * 文档地址:https://developer.work.weixin.qq.com/document/path/93620 + *+ * + * @param wxCpOaMeetingRoomBookByMeetingRequest 会议室预定对象 + * @throws WxErrorException . + */ + WxCpOaMeetingRoomBookResult bookingMeetingRoomByMeeting(WxCpOaMeetingRoomBookByMeetingRequest wxCpOaMeetingRoomBookByMeetingRequest) throws WxErrorException; + + + /** + * 取消预定会议室. + *
+ * 企业可通过此接口取消会议室的预定 + * 请求方式: POST(HTTPS) + * 请求地址: https://qyapi.weixin.qq.com/cgi-bin/oa/meetingroom/cancel_book?access_token=ACCESS_TOKEN + * + * 文档地址:https://developer.work.weixin.qq.com/document/path/93620 + *+ * + * @param wxCpOaMeetingRoomCancelBookRequest 取消预定会议室对象 + * @throws WxErrorException . + */ + void cancelBookMeetingRoom(WxCpOaMeetingRoomCancelBookRequest wxCpOaMeetingRoomCancelBookRequest) throws WxErrorException; + + + /** + * 根据会议室预定ID查询预定详情. + *
+ * 企业可通过此接口根据预定id查询相关会议室的预定情况 + * 请求方式: POST(HTTPS) + * 请求地址: https://qyapi.weixin.qq.com/cgi-bin/oa/meetingroom/bookinfo/get?access_token=ACCESS_TOKEN + * + * 文档地址:https://developer.work.weixin.qq.com/document/path/93620 + *+ * + * @param wxCpOaMeetingRoomBookingInfoByBookingIdRequest 根据会议室预定ID查询预定详情对象 + * @throws WxErrorException . + */ + WxCpOaMeetingRoomBookingInfoByBookingIdResult getBookingInfoByBookingId(WxCpOaMeetingRoomBookingInfoByBookingIdRequest wxCpOaMeetingRoomBookingInfoByBookingIdRequest) throws WxErrorException; + } diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpOaMeetingRoomServiceImpl.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpOaMeetingRoomServiceImpl.java index f486028a0a..9c32a45235 100644 --- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpOaMeetingRoomServiceImpl.java +++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpOaMeetingRoomServiceImpl.java @@ -7,7 +7,7 @@ import me.chanjar.weixin.common.util.json.GsonParser; import me.chanjar.weixin.cp.api.WxCpOaMeetingRoomService; import me.chanjar.weixin.cp.api.WxCpService; -import me.chanjar.weixin.cp.bean.oa.meetingroom.WxCpOaMeetingRoom; +import me.chanjar.weixin.cp.bean.oa.meetingroom.*; import me.chanjar.weixin.cp.util.json.WxCpGsonBuilder; import java.util.List; @@ -48,4 +48,40 @@ public void deleteMeetingRoom(Integer meetingRoomId) throws WxErrorException { this.wxCpService.post(this.wxCpService.getWxCpConfigStorage().getApiUrl(MEETINGROOM_DEL), GsonHelper.buildJsonObject("meetingroom_id", meetingRoomId)); } + + @Override + public WxCpOaMeetingRoomBookingInfoResult getMeetingRoomBookingInfo(WxCpOaMeetingRoomBookingInfoRequest wxCpOaMeetingRoomBookingInfoRequest) throws WxErrorException { + String response = this.wxCpService.post(this.wxCpService.getWxCpConfigStorage().getApiUrl(MEETINGROOM_GET_BOOKING_INFO), wxCpOaMeetingRoomBookingInfoRequest); + return WxCpOaMeetingRoomBookingInfoResult.fromJson(response); + } + + @Override + public WxCpOaMeetingRoomBookResult bookingMeetingRoom(WxCpOaMeetingRoomBookRequest wxCpOaMeetingRoomBookRequest) throws WxErrorException { + String response = this.wxCpService.post(this.wxCpService.getWxCpConfigStorage().getApiUrl(MEETINGROOM_BOOK), wxCpOaMeetingRoomBookRequest); + return WxCpOaMeetingRoomBookResult.fromJson(response); + } + + @Override + public WxCpOaMeetingRoomBookResult bookingMeetingRoomBySchedule(WxCpOaMeetingRoomBookByScheduleRequest wxCpOaMeetingRoomBookByScheduleRequest) throws WxErrorException { + String response = this.wxCpService.post(this.wxCpService.getWxCpConfigStorage().getApiUrl(MEETINGROOM_BOOK_BY_SCHEDULE), wxCpOaMeetingRoomBookByScheduleRequest); + return WxCpOaMeetingRoomBookResult.fromJson(response); + } + + @Override + public WxCpOaMeetingRoomBookResult bookingMeetingRoomByMeeting(WxCpOaMeetingRoomBookByMeetingRequest wxCpOaMeetingRoomBookByMeetingRequest) throws WxErrorException { + String response = this.wxCpService.post(this.wxCpService.getWxCpConfigStorage().getApiUrl(MEETINGROOM_BOOK_BY_MEETING), wxCpOaMeetingRoomBookByMeetingRequest); + return WxCpOaMeetingRoomBookResult.fromJson(response); + } + + @Override + public void cancelBookMeetingRoom(WxCpOaMeetingRoomCancelBookRequest wxCpOaMeetingRoomCancelBookRequest) throws WxErrorException { + this.wxCpService.post(this.wxCpService.getWxCpConfigStorage().getApiUrl(MEETINGROOM_CANCEL_BOOK), wxCpOaMeetingRoomCancelBookRequest); + + } + + @Override + public WxCpOaMeetingRoomBookingInfoByBookingIdResult getBookingInfoByBookingId(WxCpOaMeetingRoomBookingInfoByBookingIdRequest wxCpOaMeetingRoomBookingInfoByBookingIdRequest) throws WxErrorException { + String response = this.wxCpService.post(this.wxCpService.getWxCpConfigStorage().getApiUrl(MEETINGROOM_BOOKINFO_GET), wxCpOaMeetingRoomBookingInfoByBookingIdRequest); + return WxCpOaMeetingRoomBookingInfoByBookingIdResult.fromJson(response); + } } diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/message/WxCpXmlMessage.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/message/WxCpXmlMessage.java index 11a1aa62a8..f6d2c3f2e8 100644 --- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/message/WxCpXmlMessage.java +++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/message/WxCpXmlMessage.java @@ -386,6 +386,19 @@ public class WxCpXmlMessage implements Serializable { @XStreamConverter(value = XStreamCDataConverter.class) private String calId; + /** + * 会议室ID. + */ + @XStreamAlias("MeetingRoomId") + private String meetingRoomId; + + /** + * 会议室预定id,可根据该ID查询具体的会议预定情况 + */ + @XStreamAlias("BookingId") + @XStreamConverter(value = XStreamCDataConverter.class) + private String bookingId; + /** * 扩展属性. */ diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/meetingroom/WxCpOaMeetingRoomBookByMeetingRequest.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/meetingroom/WxCpOaMeetingRoomBookByMeetingRequest.java new file mode 100644 index 0000000000..dd0702deca --- /dev/null +++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/meetingroom/WxCpOaMeetingRoomBookByMeetingRequest.java @@ -0,0 +1,50 @@ +package me.chanjar.weixin.cp.bean.oa.meetingroom; + + +import com.google.gson.annotations.SerializedName; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.Accessors; +import me.chanjar.weixin.common.bean.ToJson; +import me.chanjar.weixin.cp.util.json.WxCpGsonBuilder; + +import java.io.Serializable; + +/** + * 通过会议预定会议室 + * + * @author 小梁 + * @version 1.0 Create by 2024/10/28 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@Accessors(chain = true) +public class WxCpOaMeetingRoomBookByMeetingRequest implements Serializable, ToJson { + private static final long serialVersionUID = 2825289798463742531L; + /** + * 会议室Id + */ + @SerializedName("meetingroom_id") + private Integer meetingroomId; + /** + * 会议id,仅可使用同应用创建的会议 + */ + @SerializedName("meetingid") + private String meetingid; + /** + * 预定人的userid + */ + @SerializedName("booker") + private String booker; + + + @Override + public String toJson() { + return WxCpGsonBuilder.create().toJson(this); + } + +} diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/meetingroom/WxCpOaMeetingRoomBookByScheduleRequest.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/meetingroom/WxCpOaMeetingRoomBookByScheduleRequest.java new file mode 100644 index 0000000000..2949955470 --- /dev/null +++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/meetingroom/WxCpOaMeetingRoomBookByScheduleRequest.java @@ -0,0 +1,50 @@ +package me.chanjar.weixin.cp.bean.oa.meetingroom; + + +import com.google.gson.annotations.SerializedName; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.Accessors; +import me.chanjar.weixin.common.bean.ToJson; +import me.chanjar.weixin.cp.util.json.WxCpGsonBuilder; + +import java.io.Serializable; + +/** + * 通过日程预定会议室 + * + * @author 小梁 + * @version 1.0 Create by 2024/10/28 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@Accessors(chain = true) +public class WxCpOaMeetingRoomBookByScheduleRequest implements Serializable, ToJson { + private static final long serialVersionUID = 2825289798463742532L; + /** + * 会议室Id + */ + @SerializedName("meetingroom_id") + private Integer meetingroomId; + /** + * 日程id,仅可使用同应用创建的日程 + */ + @SerializedName("schedule_id") + private String schedule_id; + /** + * 预定人的userid + */ + @SerializedName("booker") + private String booker; + + + @Override + public String toJson() { + return WxCpGsonBuilder.create().toJson(this); + } + +} diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/meetingroom/WxCpOaMeetingRoomBookRequest.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/meetingroom/WxCpOaMeetingRoomBookRequest.java new file mode 100644 index 0000000000..09ca1e9652 --- /dev/null +++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/meetingroom/WxCpOaMeetingRoomBookRequest.java @@ -0,0 +1,65 @@ +package me.chanjar.weixin.cp.bean.oa.meetingroom; + + +import com.google.gson.annotations.SerializedName; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.Accessors; +import me.chanjar.weixin.common.bean.ToJson; +import me.chanjar.weixin.cp.util.json.WxCpGsonBuilder; + +import java.io.Serializable; +import java.util.List; + +/** + * 预定会议室的请求类 + * + * @author 小梁 + * @version 1.0 Create by 2024/10/28 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@Accessors(chain = true) +public class WxCpOaMeetingRoomBookRequest implements Serializable, ToJson { + private static final long serialVersionUID = 2825289798463742536L; + /** + * 会议室Id + */ + @SerializedName("meetingroom_id") + private Integer meetingroomId; + /** + * 预定开始时间 + */ + @SerializedName("start_time") + private Integer startTime; + /** + * 预定结束时间 + */ + @SerializedName("end_time") + private Integer endTime; + /** + * 会议主题 + */ + @SerializedName("subject") + private String subject; + /** + * 预定人的userid + */ + @SerializedName("booker") + private String booker; + /** + * 参与人的userid列表 + */ + @SerializedName("attendees") + private List
* 验证推送过来的消息的正确性
- * 详情请见: https://work.weixin.qq.com/api/doc#90000/90139/90968/消息体签名校验
+ * 详情请见: 消息体签名校验
*
*
* @param msgSignature 消息签名
@@ -48,7 +48,7 @@ public interface WxCpTpService {
* 且在多线程同时刷新时只刷新一次,避免超出2000次/日的调用次数上限
* 另:本service的所有方法都会在suite_access_token过期是调用此方法
* 程序员在非必要情况下尽量不要主动调用此方法
- * 详情请见: https://work.weixin.qq.com/api/doc#90001/90143/90600
+ * 详情请见: 文档
*
*
* @param forceRefresh 强制刷新
@@ -86,7 +86,7 @@ public interface WxCpTpService {
/**
*
* 保存企业微信定时推送的suite_ticket,(每10分钟)
- * 详情请见:https://work.weixin.qq.com/api/doc#90001/90143/90628
+ * 详情请见:文档
*
* 注意:微信不是固定10分钟推送suite_ticket的, 且suite_ticket的有效期为30分钟
* https://work.weixin.qq.com/api/doc/10975#%E8%8E%B7%E5%8F%96%E7%AC%AC%E4%B8%89%E6%96%B9%E5%BA%94%E7%94%A8%E5%87%AD%E8%AF%81
@@ -101,7 +101,7 @@ public interface WxCpTpService {
* 获得suite_ticket
* 由于suite_ticket是微信服务器定时推送(每10分钟),不能主动获取,如果碰到过期只能抛异常
*
- * 详情请见:https://work.weixin.qq.com/api/doc#90001/90143/90628
+ * 详情请见:文档
*
*
* @param forceRefresh 强制刷新
@@ -116,7 +116,7 @@ public interface WxCpTpService {
/**
*
* 保存企业微信定时推送的suite_ticket,(每10分钟)
- * 详情请见:https://work.weixin.qq.com/api/doc#90001/90143/90628
+ * 详情请见:文档
*
* 注意:微信不是固定10分钟推送suite_ticket的, 且suite_ticket的有效期为30分钟
* https://work.weixin.qq.com/api/doc/10975#%E8%8E%B7%E5%8F%96%E7%AC%AC%E4%B8%89%E6%96%B9%E5%BA%94%E7%94%A8%E5%87%AD%E8%AF%81
@@ -286,6 +286,17 @@ public interface WxCpTpService {
*/
String post(String url, String postData) throws WxErrorException;
+ /**
+ * 当本Service没有实现某个API的时候,可以用这个,针对所有微信API中的POST请求.
+ *
+ * @param url 接口地址
+ * @param postData 请求body字符串
+ * @param withoutSuiteAccessToken 请求是否忽略SuiteAccessToken 默认不忽略-false
+ * @return the string
+ * @throws WxErrorException the wx error exception
+ */
+ String post(String url, String postData, boolean withoutSuiteAccessToken) throws WxErrorException;
+
/**
*
* Service没有实现某个API的时候,可以用这个,
@@ -395,7 +406,7 @@ public interface WxCpTpService {
/**
* 获取带参授权链接
*
- * 文档地址:https://developer.work.weixin.qq.com/document/path/95436
+ * 查看文档
*
* @param state state
* @param templateIdList 代开发自建应用模版ID列表,数量不能超过9个
@@ -548,7 +559,7 @@ public interface WxCpTpService {
/**
* 创建机构级jsApiTicket签名
- * 详情参见企业微信第三方应用开发文档:https://work.weixin.qq.com/api/doc/90001/90144/90539
+ * 详情参见企业微信第三方应用开发文档
*
* @param url 调用JS接口页面的完整URL
* @param authCorpId the auth corp id
@@ -559,7 +570,7 @@ public interface WxCpTpService {
/**
* 创建应用级jsapiTicket签名
- * 详情参见企业微信第三方应用开发文档:https://work.weixin.qq.com/api/doc/90001/90144/90539
+ * 详情参见:企业微信第三方应用开发文档
*
* @param url 调用JS接口页面的完整URL
* @param authCorpId the auth corp id
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/tp/service/impl/BaseWxCpTpServiceImpl.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/tp/service/impl/BaseWxCpTpServiceImpl.java
index 407702439a..aa874f8549 100644
--- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/tp/service/impl/BaseWxCpTpServiceImpl.java
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/tp/service/impl/BaseWxCpTpServiceImpl.java
@@ -337,6 +337,7 @@ public String post(String url, String postData) throws WxErrorException {
* @return the string
* @throws WxErrorException the wx error exception
*/
+ @Override
public String post(String url, String postData, boolean withoutSuiteAccessToken) throws WxErrorException {
return execute(SimplePostRequestExecutor.create(this), url, postData, withoutSuiteAccessToken);
}
From f6e300b10a74af6cc1df2b78aa97d8fe5effa1ad Mon Sep 17 00:00:00 2001
From: Binary Wang
Date: Thu, 31 Oct 2024 16:20:24 +0800
Subject: [PATCH 009/356] =?UTF-8?q?:art:=20=E5=8F=8A=E6=97=B6=E5=85=B3?=
=?UTF-8?q?=E9=97=AD=E6=89=93=E5=BC=80=E7=9A=84InputStream=E5=AF=B9?=
=?UTF-8?q?=E8=B1=A1?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../binarywang/wxpay/config/WxPayConfig.java | 15 +++++++++------
1 file changed, 9 insertions(+), 6 deletions(-)
diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/config/WxPayConfig.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/config/WxPayConfig.java
index 932fa323e0..637d46e986 100644
--- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/config/WxPayConfig.java
+++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/config/WxPayConfig.java
@@ -279,15 +279,18 @@ public CloseableHttpClient initApiV3HttpClient() throws WxPayException {
if (StringUtils.isNotBlank(this.getPrivateKeyString())) {
this.setPrivateKeyString(Base64.getEncoder().encodeToString(this.getPrivateKeyString().getBytes()));
}
- InputStream keyInputStream = this.loadConfigInputStream(this.getPrivateKeyString(), this.getPrivateKeyPath(),
- this.privateKeyContent, "privateKeyPath");
- merchantPrivateKey = PemUtils.loadPrivateKey(keyInputStream);
+
+ try (InputStream keyInputStream = this.loadConfigInputStream(this.getPrivateKeyString(), this.getPrivateKeyPath(),
+ this.privateKeyContent, "privateKeyPath")) {
+ merchantPrivateKey = PemUtils.loadPrivateKey(keyInputStream);
+ }
}
if (certificate == null && StringUtils.isBlank(this.getCertSerialNo())) {
- InputStream certInputStream = this.loadConfigInputStream(this.getPrivateCertString(), this.getPrivateCertPath(),
- this.privateCertContent, "privateCertPath");
- certificate = PemUtils.loadCertificate(certInputStream);
+ try (InputStream certInputStream = this.loadConfigInputStream(this.getPrivateCertString(), this.getPrivateCertPath(),
+ this.privateCertContent, "privateCertPath")) {
+ certificate = PemUtils.loadCertificate(certInputStream);
+ }
this.certSerialNo = certificate.getSerialNumber().toString(16).toUpperCase();
}
From cff5616463c28450076dd19d488dd0d1a60f1405 Mon Sep 17 00:00:00 2001
From: GeXiangDong
Date: Fri, 1 Nov 2024 00:14:29 +0800
Subject: [PATCH 010/356] =?UTF-8?q?:new:=20#3404=20=E3=80=90=E5=B0=8F?=
=?UTF-8?q?=E7=A8=8B=E5=BA=8F=E3=80=91=E5=A2=9E=E5=8A=A0=E5=90=8C=E5=9F=8E?=
=?UTF-8?q?=E9=85=8D=E9=80=81=E7=9B=B8=E5=85=B3=E6=8E=A5=E5=8F=A3=EF=BC=8C?=
=?UTF-8?q?=E5=90=8C=E6=97=B6=E4=B8=BAWxMaService=E5=A2=9E=E5=8A=A0?=
=?UTF-8?q?=E4=BA=86API=E7=AD=BE=E5=90=8D=E6=94=AF=E6=8C=81?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
images/api-signature/api-signature-1.png | Bin 0 -> 168576 bytes
images/api-signature/api-signature-2.png | Bin 0 -> 304493 bytes
weixin-java-miniapp/api-signature-readme.md | 46 ++
.../wx/miniapp/api/WxMaIntracityService.java | 86 +++
.../wx/miniapp/api/WxMaService.java | 100 +--
.../miniapp/api/impl/BaseWxMaServiceImpl.java | 374 +++++++++--
.../api/impl/WxMaIntracityServiceImpl.java | 276 ++++++++
.../wx/miniapp/bean/WxMaApiResponse.java | 34 +
.../bean/intractiy/BasicWxMaOrder.java | 128 ++++
.../BasicWxMaStoreChargeRefundRequest.java | 49 ++
.../wx/miniapp/bean/intractiy/PayMode.java | 16 +
.../bean/intractiy/WxMaAddOrderRequest.java | 133 ++++
.../bean/intractiy/WxMaAddOrderResponse.java | 115 ++++
.../intractiy/WxMaCancelOrderResponse.java | 67 ++
.../intractiy/WxMaGetPayModeResponse.java | 42 ++
.../wx/miniapp/bean/intractiy/WxMaOrder.java | 344 ++++++++++
.../intractiy/WxMaPreAddOrderRequest.java | 22 +
.../bean/intractiy/WxMaQueryFlowRequest.java | 88 +++
.../wx/miniapp/bean/intractiy/WxMaStore.java | 187 ++++++
.../bean/intractiy/WxMaStoreBalance.java | 115 ++++
.../intractiy/WxMaStoreChargeRequest.java | 22 +
.../bean/intractiy/WxMaStoreFlowResponse.java | 318 +++++++++
.../intractiy/WxMaStoreRefundRequest.java | 11 +
.../miniapp/bean/intractiy/WxMaTransCity.java | 56 ++
.../wx/miniapp/config/WxMaConfig.java | 67 +-
.../config/impl/WxMaDefaultConfigImpl.java | 116 ++--
.../miniapp/constant/WxMaApiUrlConstants.java | 629 +++++++++---------
...ApacheApiSignaturePostRequestExecutor.java | 71 ++
.../ApiSignaturePostRequestExecutor.java | 69 ++
.../JoddApiSignaturePostRequestExecutor.java | 59 ++
...OkHttpApiSignaturePostRequestExecutor.java | 51 ++
.../impl/WxMaIntracityServiceImpleTest.java | 234 +++++++
.../src/test/resources/test-config-sample.xml | 5 +
.../weixin/open/api/WxOpenConfigStorage.java | 65 +-
.../api/impl/WxOpenInMemoryConfigStorage.java | 205 +++---
35 files changed, 3626 insertions(+), 574 deletions(-)
create mode 100644 images/api-signature/api-signature-1.png
create mode 100644 images/api-signature/api-signature-2.png
create mode 100644 weixin-java-miniapp/api-signature-readme.md
create mode 100644 weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaIntracityService.java
create mode 100644 weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaIntracityServiceImpl.java
create mode 100644 weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxMaApiResponse.java
create mode 100644 weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/intractiy/BasicWxMaOrder.java
create mode 100644 weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/intractiy/BasicWxMaStoreChargeRefundRequest.java
create mode 100644 weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/intractiy/PayMode.java
create mode 100644 weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/intractiy/WxMaAddOrderRequest.java
create mode 100644 weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/intractiy/WxMaAddOrderResponse.java
create mode 100644 weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/intractiy/WxMaCancelOrderResponse.java
create mode 100644 weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/intractiy/WxMaGetPayModeResponse.java
create mode 100644 weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/intractiy/WxMaOrder.java
create mode 100644 weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/intractiy/WxMaPreAddOrderRequest.java
create mode 100644 weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/intractiy/WxMaQueryFlowRequest.java
create mode 100644 weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/intractiy/WxMaStore.java
create mode 100644 weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/intractiy/WxMaStoreBalance.java
create mode 100644 weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/intractiy/WxMaStoreChargeRequest.java
create mode 100644 weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/intractiy/WxMaStoreFlowResponse.java
create mode 100644 weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/intractiy/WxMaStoreRefundRequest.java
create mode 100644 weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/intractiy/WxMaTransCity.java
create mode 100644 weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/executor/ApacheApiSignaturePostRequestExecutor.java
create mode 100644 weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/executor/ApiSignaturePostRequestExecutor.java
create mode 100644 weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/executor/JoddApiSignaturePostRequestExecutor.java
create mode 100644 weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/executor/OkHttpApiSignaturePostRequestExecutor.java
create mode 100644 weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaIntracityServiceImpleTest.java
diff --git a/images/api-signature/api-signature-1.png b/images/api-signature/api-signature-1.png
new file mode 100644
index 0000000000000000000000000000000000000000..e4d4e1e2786214f5ecf73a54d90742099096855f
GIT binary patch
literal 168576
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