diff --git a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/WechatPayCallback.java b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/WechatPayCallback.java
index 2a15fb0..62301c6 100644
--- a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/WechatPayCallback.java
+++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/WechatPayCallback.java
@@ -4,6 +4,7 @@ import cn.felord.payment.PayException;
import cn.felord.payment.wechat.v3.model.*;
import cn.felord.payment.wechat.v3.model.payscore.PayScoreUserConfirmConsumeData;
import cn.felord.payment.wechat.v3.model.payscore.PayScoreUserPaidConsumeData;
+import cn.felord.payment.wechat.v3.model.payscore.PayScoreUserPermissionConsumeData;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
@@ -155,16 +156,34 @@ public class WechatPayCallback {
}
/**
- * Permission callback map.
+ * 授权/解除授权服务回调通知API.
+ *
+ * 微信支付分通过授权/解除授权服务通知接口将用户过授权/解除授权服务消息通知给商户
+ *
+ * 普通授权模式是通过[商户入驻配置申请表]提交service_notify_url设置,预授权模式是通过[商户预授权]提交的notify_url设置,必须为https协议。如果链接无法访问,商户将无法接收到微信通知。 通知url必须为直接可访问的url,不能携带参数。示例: “https://pay.weixin.qq.com/wxpay/pay.action”
*
* @param params the params
* @param consumeDataConsumer the consume data consumer
* @return the map
*/
@SneakyThrows
- public Map permissionCallback(ResponseSignVerifyParams params, Consumer consumeDataConsumer) {
-
+ public Map permissionCallback(ResponseSignVerifyParams params, Consumer consumeDataConsumer) {
+ CallbackParams callbackParams = resolve(params);
+ String eventType = callbackParams.getEventType();
+ boolean closed;
+ if (Objects.equals(eventType, EventType.PAYSCORE_USER_OPEN.event)) {
+ closed = false;
+ } else if (Objects.equals(eventType, EventType.PAYSCORE_USER_CLOSE.event)) {
+ closed = true;
+ } else {
+ log.error("wechat pay event type is not matched, callbackParams {}", callbackParams);
+ throw new PayException(" wechat pay event type is not matched");
+ }
+ String data = this.decrypt(callbackParams);
+ PayScoreUserPermissionConsumeData payScoreUserPermissionConsumeData = MAPPER.readValue(data, PayScoreUserPermissionConsumeData.class);
+ payScoreUserPermissionConsumeData.setClosed(closed);
+ consumeDataConsumer.accept(payScoreUserPermissionConsumeData);
return Collections.singletonMap("code", "SUCCESS");
}
@@ -178,13 +197,13 @@ public class WechatPayCallback {
*/
@SneakyThrows
private String callback(ResponseSignVerifyParams params, EventType eventType) {
- CallbackParams callbackParams = resolve(params);
+ CallbackParams callbackParams = this.resolve(params);
if (!Objects.equals(callbackParams.getEventType(), eventType.event)) {
log.error("wechat pay event type is not matched, callbackParams {}", callbackParams);
throw new PayException(" wechat pay event type is not matched");
}
- return decrypt(callbackParams);
+ return this.decrypt(callbackParams);
}
/**
@@ -245,7 +264,7 @@ public class WechatPayCallback {
*
* @since 1.0.2.RELEASE
*/
- PAYSCORE_USER_OPEN("PAYSCORE.USER_CLOSE_SERVICE"),
+ PAYSCORE_USER_OPEN("PAYSCORE.USER_OPEN_SERVICE"),
/**
* 微信支付分解除授权事件.
*
diff --git a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/WechatPayScoreApi.java b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/WechatPayScoreApi.java
index 9296a46..f099642 100644
--- a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/WechatPayScoreApi.java
+++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/WechatPayScoreApi.java
@@ -432,7 +432,7 @@ public class WechatPayScoreApi extends AbstractApi {
*/
public WechatResponseEntity terminatePermissionsByOpenId(PermissionsOpenIdParams params) {
WechatResponseEntity wechatResponseEntity = new WechatResponseEntity<>();
- this.client().withType(WechatPayV3Type.PAY_SCORE_PERMISSIONS_OPENID, params)
+ this.client().withType(WechatPayV3Type.PAY_SCORE_TERMINATE_PERMISSIONS_OPENID, params)
.function((wechatPayV3Type, orderParams) -> {
URI uri = UriComponentsBuilder.fromHttpUrl(wechatPayV3Type.uri(WeChatServer.CHINA))
diff --git a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/payscore/PayScoreUserPermissionConsumeData.java b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/payscore/PayScoreUserPermissionConsumeData.java
new file mode 100644
index 0000000..0164950
--- /dev/null
+++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/payscore/PayScoreUserPermissionConsumeData.java
@@ -0,0 +1,53 @@
+
+package cn.felord.payment.wechat.v3.model.payscore;
+
+
+import lombok.Data;
+
+/**
+ * 授权、解除授权服务回调解密.
+ *
+ * @author felord.cn
+ * @since 1.0.2.RELEASE
+ */
+@Data
+public class PayScoreUserPermissionConsumeData {
+
+ /**
+ * 是否是解除授权,此参数并非微信返回参数
+ *
+ * 是:true,不是:false
+ *
+ * 用来判断是授权还是解除授权
+ */
+ private boolean closed;
+ /**
+ * The Appid.
+ */
+ private String appid;
+ /**
+ * The Mchid.
+ */
+ private String mchid;
+ /**
+ * The Openid.
+ */
+ private String openid;
+ /**
+ * The Openorclose time.
+ */
+ private String openorcloseTime;
+ /**
+ * 只在 微信支付分授权回调中返回
+ */
+ private String outRequestNo;
+ /**
+ * The Service id.
+ */
+ private String serviceId;
+ /**
+ * The User service status.
+ */
+ private String userServiceStatus;
+
+}