🆕 #3162 【微信支付】接入服务商微信支付分签约计划相关接口功能

This commit is contained in:
尼禄·saber·潍納斯
2023-11-13 11:04:50 +08:00
committed by Binary Wang
parent f2abe7429d
commit f1d790c710
16 changed files with 1240 additions and 0 deletions

View File

@@ -0,0 +1,94 @@
package com.github.binarywang.wxpay.bean.payscore;
import com.github.binarywang.wxpay.bean.payscore.enums.SignPlanServiceOrderPlanDetailStateEnum;
import com.google.gson.annotations.SerializedName;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
/**
* @author UltramanNoa
* @className PartnerUserSignPlanDetail
* @description 签约计划明细列表
* @createTime 2023/11/3 17:19
**/
@Data
@NoArgsConstructor
public class PartnerUserSignPlanDetail implements Serializable {
private static final long serialVersionUID = 2089297485318293622L;
/**
* 计划明细序号
*/
@SerializedName("plan_detail_no")
private Integer planDetailNo;
/**
* 计划明细原支付金额(单位分)
*/
@SerializedName("original_price")
private Integer originalPrice;
/**
* 计划明细优惠说明
*/
@SerializedName("plan_discount_description")
private String planDiscountDescription;
/**
* 计划明细实际支付金额(单位分)
*/
@SerializedName("actual_price")
private Integer actualPrice;
/**
* 计划明细状态
*
* @see SignPlanServiceOrderPlanDetailStateEnum
*/
@SerializedName("plan_detail_state")
private String planDetailState;
/**
* 计划明细对应的支付分服务单号
*/
@SerializedName("order_id")
private String orderId;
/**
* 商户侧计划明细使用订单号
*/
@SerializedName("merchant_plan_detail_no")
private String merchantPlanDetailNo;
/**
* 计划详情名称
*/
@SerializedName("plan_detail_name")
private Integer planDetailName;
/**
* 计划明细对应订单实际支付金额(单位分)
*/
@SerializedName("actual_pay_price")
private Integer actualPayPrice;
/**
* 详情使用时间
*/
@SerializedName("use_time")
private String useTime;
/**
* 详情完成时间
*/
@SerializedName("complete_time")
private String completeTime;
/**
* 详情取消时间
*/
@SerializedName("cancel_time")
private String cancelTime;
}

View File

@@ -0,0 +1,165 @@
package com.github.binarywang.wxpay.bean.payscore;
import com.github.binarywang.wxpay.bean.payscore.enums.SignPlanServiceOrderStateEnum;
import com.github.binarywang.wxpay.bean.payscore.enums.UserSignPlanCancelSignTypeEnum;
import com.google.gson.annotations.SerializedName;
import lombok.Data;
import lombok.NoArgsConstructor;
import me.chanjar.weixin.common.util.json.WxGsonBuilder;
import java.io.Serializable;
import java.util.List;
/**
* @author UltramanNoa
* @className PartnerUserSignPlanEntity
* @description 用户的签约计划
* @createTime 2023/11/3 16:05
**/
@Data
@NoArgsConstructor
public class PartnerUserSignPlanEntity implements Serializable {
private static final long serialVersionUID = -662901613603698430L;
public static PartnerUserSignPlanEntity fromJson(String json) {
return WxGsonBuilder.create().fromJson(json, PartnerUserSignPlanEntity.class);
}
/**
* 待创建服务订单对应的用户的签约计划
*/
@SerializedName("sign_plan_id")
private String signPlanId;
@SerializedName("openid")
private String openid;
/**
* <pre>
* 字段名:二级商户用户标识
* 变量名sub_openid
* 是否必填:否
* 类型string128
* 描述:
* 用户在二级商户appid下的唯一标识。
* 示例值oUpF8uMuAJO_M2pxb1Q9zNjWeS6o
* </pre>
*/
@SerializedName(value = "sub_openid")
private String subOpenid;
@SerializedName("service_id")
private String serviceId;
@SerializedName("mchid")
private String mchid;
/**
* 子商户商户号
*/
@SerializedName("sub_mchid")
private String subMchid;
@SerializedName("appid")
private String appid;
/**
* 子商户AppID
*/
@SerializedName("sub_appid")
private String subAppid;
/**
* 商户签约计划单号
*/
@SerializedName("merchant_sign_plan_no")
private String merchantSignPlanNo;
/**
* 商户回调地址
*/
@SerializedName("merchant_callback_url")
private String merchantCallbackUrl;
/**
* 支付分计划ID
*/
@SerializedName("plan_id")
private String planId;
/**
* 目前用户进行到的计划详情序号
*/
@SerializedName("going_detail_no")
private Integer goingDetailNo;
/**
* 计划签约状态
*
* @see SignPlanServiceOrderStateEnum
*/
@SerializedName("sign_state")
private String signState;
/**
* 签约计划取消时间
*/
@SerializedName("cancel_sign_time")
private String cancelSignTime;
/**
* 签约计划取消类型
*
* @see UserSignPlanCancelSignTypeEnum
*/
@SerializedName("cancel_sign_type")
private String cancelSignType;
/**
* 签约计划取消原因
*/
@SerializedName("cancel_reason")
private String cancelReason;
/**
* 签约计划的名称
*/
@SerializedName("plan_name")
private String planName;
/**
* 签约计划的过期时间
*/
@SerializedName("plan_over_time")
private String planOverTime;
/**
* 签约计划原总金额(单位分)
*/
@SerializedName("total_origin_price")
private Integer totalOriginPrice;
/**
* 签约计划扣费次数
*/
@SerializedName("deduction_quantity")
private Integer deductionQuantity;
/**
* 签约计划实际总金额(单位分)
*/
@SerializedName("total_actual_price")
private Integer totalActualPrice;
@SerializedName("signed_detail_list")
private List<PartnerUserSignPlanDetail> signedDetailList;
/**
* 签约时间
*/
@SerializedName("sign_time")
private String signTime;
}

View File

@@ -35,6 +35,8 @@ public class PayScoreNotifyData implements Serializable {
* <p>2、解除授权成功通知的类型为PAYSCORE.USER_CLOSE_SERVICE</p>
* <p>3、用户确认成功通知的类型为PAYSCORE.USER_CONFIRM</p>
* <p>4、支付成功通知的类型为PAYSCORE.USER_PAID</p>
* <p>5、取消签约成功通知类型为PAYSCORE.USER_CANCEL_SIGN_PLAN</p>
* <p>6、签约计划成功通知类型为PAYSCORE</p>
*/
@SerializedName("event_type")
private String eventType;
@@ -85,5 +87,11 @@ public class PayScoreNotifyData implements Serializable {
*/
@SerializedName("associated_data")
private String associatedData;
/**
* 原始回调类型支付分的原始回调类型为payscore
*/
@SerializedName("original_type")
private String originalType;
}
}

View File

@@ -0,0 +1,49 @@
package com.github.binarywang.wxpay.bean.payscore;
import com.google.gson.annotations.SerializedName;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
/**
* @author UltramanNoa
* @className PayScorePlanDetail
* @description 支付分计划明细列表
* @createTime 2023/11/3 11:22
**/
@Data
@NoArgsConstructor
public class PayScorePlanDetail implements Serializable {
private static final long serialVersionUID = 999251141141181820L;
/**
* 计划明细原支付金额(单位分)
*/
@SerializedName("original_price")
private Integer originalPrice;
/**
* 计划明细优惠说明
*/
@SerializedName("plan_discount_description")
private String planDiscountDescription;
/**
* 计划明细实际支付金额(单位分)
*/
@SerializedName("actual_price")
private String actualPrice;
/**
* 计划明细名称
*/
@SerializedName("plan_detail_name")
private String planDetailName;
/**
* 计划明细序号(返回参数)
*/
@SerializedName("plan_detail_no")
private Integer planDetailNo;
}

View File

@@ -0,0 +1,32 @@
package com.github.binarywang.wxpay.bean.payscore;
import com.google.gson.annotations.SerializedName;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
/**
* @author UltramanNoa
* @className UserSignPlanDetailMerchatNo
* @description 签约计划对应的计划详情列表的商户侧单号信息
* @createTime 2023/11/3 15:51
**/
@Data
@NoArgsConstructor
public class UserSignPlanDetailMerchatNo implements Serializable {
private static final long serialVersionUID = 2668791598158720023L;
/**
* 计划明细序号
*/
@SerializedName("plan_detail_no")
private Integer planDetailNo;
/**
* 商户侧计划明细使用订单号
*/
@SerializedName("merchant_plan_detail_no")
private String merchantPlanDetailNo;
}

View File

@@ -0,0 +1,130 @@
package com.github.binarywang.wxpay.bean.payscore;
import com.google.gson.annotations.SerializedName;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import lombok.experimental.SuperBuilder;
import me.chanjar.weixin.common.util.json.WxGsonBuilder;
import java.util.List;
/**
* @author UltramanNoa
* @className WxPartnerPayScoreSignPlanRequest
* @description 支付分计划请求参数
* @createTime 2023/11/3 09:54
**/
@Data
@SuperBuilder
@NoArgsConstructor
@AllArgsConstructor
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = true)
public class WxPartnerPayScoreSignPlanRequest extends WxPayScoreRequest {
private static final long serialVersionUID = 6269843192878112955L;
public String toJson() {
return WxGsonBuilder.create().toJson(this);
}
/**
* 子商户appid
*/
@SerializedName("sub_appid")
private String subAppid;
/**
* 子商户mchid
*/
@SerializedName("sub_mchid")
private String subMchid;
/**
* 子商户公众号下的用户标识
*/
@SerializedName("sub_openid")
private String subOpenid;
/**
* 支付分计划名称
*/
@SerializedName("plan_name")
private String planName;
/**
* 支付分计划有效期(单位天)
*/
@SerializedName("plan_duration")
private Integer planDuration;
/**
* 支付分计划扣费次数
*/
@SerializedName("deduction_quantity")
private Integer deductionQuantity;
/**
* 支付分计划原总金额(单位分)
*/
@SerializedName("total_original_price")
private Integer totalOriginalPrice;
/**
* 支付分计划实际扣费总金额(单位分)
*/
@SerializedName("total_actual_price")
private Integer totalActualPrice;
/**
* 支付分计划明细列表
*/
@SerializedName("plan_detail_list")
private List<PayScorePlanDetail> planDetailList;
/**
* 商户侧计划号
*/
@SerializedName("merchant_plan_no")
private String merchantPlanNo;
/**
* 待创建服务订单对应的用户的签约计划
*/
@SerializedName("sign_plan_id")
private String signPlanId;
/**
* 待创建服务订单对应的用户的签约计划详情序号
*/
@SerializedName("plan_detail_no")
private Integer planDetailNo;
/**
* 商户侧订单号
*/
@SerializedName("out_trade_no")
private String outTradeNo;
/**
* 支付分计划ID
*/
@SerializedName("plan_id")
private String planId;
/**
* 商户签约计划单号
*/
@SerializedName("merchant_sign_plan_no")
private String merchantSignPlanNo;
/**
* 签约计划对应的计划详情列表的商户侧单号信息
*/
@SerializedName("sign_plan_detail")
private List<UserSignPlanDetailMerchatNo> signPlanDetail;
}

View File

@@ -0,0 +1,104 @@
package com.github.binarywang.wxpay.bean.payscore;
import com.google.gson.annotations.SerializedName;
import lombok.Data;
import lombok.NoArgsConstructor;
import me.chanjar.weixin.common.util.json.WxGsonBuilder;
import java.util.List;
/**
* @author UltramanNoa
* @className WxPartnerPayScoreSignPlanResult
* @description 支付分计划响应参数
* @createTime 2023/11/3 10:11
**/
@Data
@NoArgsConstructor
public class WxPartnerPayScoreSignPlanResult extends WxPayScoreResult {
private static final long serialVersionUID = 4048529978029913621L;
public static WxPartnerPayScoreSignPlanResult fromJson(String json) {
return WxGsonBuilder.create().fromJson(json, WxPartnerPayScoreSignPlanResult.class);
}
/**
* 子商户AppID
*/
@SerializedName("sub_appid")
private String subAppid;
/**
* 子商户商户号
*/
@SerializedName("sub_mchid")
private String subMchid;
/**
* 支付分计划ID
*/
@SerializedName("plan_id")
private String planId;
/**
* 商户侧计划号
*/
@SerializedName("merchant_plan_no")
private String merchantPlanNo;
/**
* 支付分计划名称
*/
@SerializedName("plan_name")
private String planName;
/**
* 支付分计划有效期(单位天)
*/
@SerializedName("plan_duration")
private String planDuration;
/**
* 支付分计划状态
*
* @see
*/
@SerializedName("plan_state")
private String planState;
/**
* 支付分计划原总金额(单位分)
*/
@SerializedName("total_original_price")
private String totalOriginalPrice;
/**
* 支付分计划扣费次数
*/
@SerializedName("deduction_quantity")
private String deductionQuantity;
/**
* 支付分计划实际扣费总金额(单位分)
*/
@SerializedName("total_actual_price")
private Integer totalActualPrice;
/**
* 支付分计划明细列表
*/
@SerializedName("plan_detail_list")
private List<PayScorePlanDetail> planDetailList;
/**
* 终止方商户号
*/
@SerializedName("stop_mchid")
private String stopMchid;
/**
* 终止时间
*/
@SerializedName("stop_time")
private String stopTime;
}

View File

@@ -0,0 +1,31 @@
package com.github.binarywang.wxpay.bean.payscore;
import com.google.gson.annotations.SerializedName;
import lombok.Data;
import lombok.NoArgsConstructor;
import me.chanjar.weixin.common.util.json.WxGsonBuilder;
import java.io.Serializable;
/**
* @author UltramanNoa
* @className WxPartnerUserSignPlanResult
* @description 微信支付分用户签约计划返回
* @createTime 2023/11/3 16:38
**/
@Data
@NoArgsConstructor
public class WxPartnerPayScoreUserSignPlanResult implements Serializable {
private static final long serialVersionUID = 4148075707018175845L;
public static WxPartnerPayScoreUserSignPlanResult fromJson(String json) {
return WxGsonBuilder.create().fromJson(json, WxPartnerPayScoreUserSignPlanResult.class);
}
@SerializedName("sign_plan")
private PartnerUserSignPlanEntity signPlan;
@SerializedName("package")
private String pack;
}

View File

@@ -0,0 +1,30 @@
package com.github.binarywang.wxpay.bean.payscore.enums;
/**
* @author UltramanNoa
* @className SignPlanServiceOrderPlanDetailStateEnum
* @description 计划明细状态
* @createTime 2023/11/3 17:43
**/
public enum SignPlanServiceOrderPlanDetailStateEnum {
/**
* 本计划详情还未使用
*/
NOT_USED,
/**
* 本计划详情使用中,已有对应的服务订单
*/
USING,
/**
* 本计划详情已使用,对应的服务订单已完成支付
*/
USED,
/**
* 本计划详情已取消使用,对应的服务订单已取消
*/
SIGN_PLAN_DETAIL_CANCEL,
;
}

View File

@@ -0,0 +1,36 @@
package com.github.binarywang.wxpay.bean.payscore.enums;
/**
* @author UltramanNoa
* @className SignPlanServiceOrderStateEnum
* @description 签约计划服务订单状态
* @createTime 2023/11/3 15:28
**/
public enum SignPlanServiceOrderStateEnum {
/**
* 商户已创建服务订单
*/
CREATED,
/**
* 服务订单进行中
*/
DOING,
/**
* 服务订单完成
*/
DONE,
/**
* 商户取消服务订单
*/
REVOKED,
/**
* 服务订单已失效
*/
EXPIRED,
;
}

View File

@@ -0,0 +1,30 @@
package com.github.binarywang.wxpay.bean.payscore.enums;
/**
* @author UltramanNoa
* @className UserSignPlanCancelSignTypeEnum
* @description 签约计划取消类型
* @createTime 2023/11/3 17:15
**/
public enum UserSignPlanCancelSignTypeEnum {
/**
* 用户已签约协议未取消
*/
NOT_CANCEL,
/**
* 用户取消已签约的协议
*/
USER,
/**
* 商户取消已签约的协议
*/
MERCHANT,
/**
* 用户解除服务授权时取消服务下的已签约协议
*/
REVOKE_SERVICE,
;
}