diff --git a/ghy-common/src/main/java/com/ghy/common/adapay/AdapayService.java b/ghy-common/src/main/java/com/ghy/common/adapay/AdapayService.java index 5bcdad17..669ce698 100644 --- a/ghy-common/src/main/java/com/ghy/common/adapay/AdapayService.java +++ b/ghy-common/src/main/java/com/ghy/common/adapay/AdapayService.java @@ -2,8 +2,10 @@ package com.ghy.common.adapay; import com.ghy.common.adapay.callback.PayCallback; import com.ghy.common.adapay.callback.RefundCallback; -import com.ghy.common.adapay.callback.reply.PayReplyMapping; -import com.ghy.common.adapay.callback.reply.RefundReplyMapping; +import com.ghy.common.adapay.callback.mapping.PayReplyMapping; +import com.ghy.common.adapay.callback.mapping.RefundReplyMapping; +import com.ghy.common.adapay.callback.model.Expend; +import com.ghy.common.adapay.callback.model.WxLiteExpend; import com.huifu.adapay.core.exception.BaseAdaPayException; import com.huifu.adapay.model.Payment; import com.huifu.adapay.model.Refund; @@ -22,6 +24,46 @@ public class AdapayService { AdapayProperties adapayProperties; + /** + * 支付宝正扫支付 + */ + public Map alipayQrPay(PayCallback callback, WxLiteExpend expend, String orderNo, String payAmt, String goodsTittle, String goodsDesc, String description) throws BaseAdaPayException { + return pay(callback, PayChannelEnum.ALIPAY_QR.getCode(), expend, orderNo, payAmt, goodsTittle, goodsDesc, description); + } + + /** + * 微信小程序支付 + */ + public Map wxLitePay(PayCallback callback, WxLiteExpend expend, String orderNo, String payAmt, String goodsTittle, String goodsDesc, String description) throws BaseAdaPayException { + return pay(callback, PayChannelEnum.WX_LITE.getCode(), expend, orderNo, payAmt, goodsTittle, goodsDesc, description); + } + + /** + * @param callback [必填项]处理支付结果的回调接口 + * @param orderNo [必填项]订单号 + * @param payAmt [必填项]交易金额,必须大于0,保留两位小数点,如"0.10"、"100.05" + * @param goodsTittle [必填项]商品名称 + * @param goodsDesc [必填项]商品描述信息,微信小程序和微信公众号该字段最大长度42个字符 + * @param payChannel [必填项]支付渠道,详见 https://docs.adapay.tech/api/appendix.html#id2 + * @param expend 支付渠道额外参数,条件可输入,详见 https://docs.adapay.tech/api/appendix.html#expend + * @param description 订单附加说明 + * @return 同步返回一个 支付对象,详见 https://docs.adapay.tech/api/trade.html#id2 + */ + public Map pay(PayCallback callback, String payChannel, Expend expend, String orderNo, String payAmt, String goodsTittle, String goodsDesc, String description) throws BaseAdaPayException { + Map paymentParams = new HashMap<>(16); + paymentParams.put("app_id", adapayProperties.getAppId()); + paymentParams.put("notify_url", adapayProperties.getNotifyUrl()); + paymentParams.put("order_no", orderNo); + paymentParams.put("pay_channel", payChannel); + paymentParams.put("pay_amt", payAmt); + paymentParams.put("goods_title", goodsTittle); + paymentParams.put("goods_desc", goodsDesc); + paymentParams.put("description", description); + paymentParams.put("expend", expend); + PayReplyMapping.putCallback(orderNo, callback); + return Payment.create(paymentParams); + } + /** * 发起退款 * 当您的业务需要发起退款时,可通过 Adapay 系统提供的创建 Refund对象 方法创建一个退款对象,资金会原路退回用户的支付宝或微信中。 @@ -44,31 +86,6 @@ public class AdapayService { return Refund.create(paymentId, refundParams); } - /** - * 微信小程序支付 - * - * @param callback [必填项]处理支付结果的回调接口 - * @param orderNo [必填项]订单号 - * @param payAmt [必填项]交易金额,必须大于0,保留两位小数点,如0.10、100.05等 - * @param goodsTittle [必填项]商品名称 - * @param goodsDesc [必填项]商品描述信息,微信小程序和微信公众号该字段最大长度42个字符 - * @param description 订单附加说明 - * @return 同步返回一个 支付对象 Payment - */ - public Map wxLitePay(PayCallback callback, String orderNo, String payAmt, String goodsTittle, String goodsDesc, String description) throws BaseAdaPayException { - Map paymentParams = new HashMap<>(16); - paymentParams.put("app_id", adapayProperties.getAppId()); - paymentParams.put("notify_url", adapayProperties.getNotifyUrl()); - paymentParams.put("order_no", orderNo); - paymentParams.put("pay_channel", PayChannelEnum.WX_LITE.getCode()); - paymentParams.put("pay_amt", payAmt); - paymentParams.put("goods_title", goodsTittle); - paymentParams.put("goods_desc", goodsDesc); - paymentParams.put("description", description); - PayReplyMapping.putCallback(orderNo, callback); - return Payment.create(paymentParams); - } - /** * 支付关单 * 针对已经创建的 支付对象,您可以调用关单接口进行交易的关闭。调用此接口后,该用户订单将不再能支付成功。 对于关单功能的使用有如下规则: diff --git a/ghy-common/src/main/java/com/ghy/common/adapay/callback/AdapayCallbackController.java b/ghy-common/src/main/java/com/ghy/common/adapay/callback/AdapayCallbackController.java index 92cd784f..31c77588 100644 --- a/ghy-common/src/main/java/com/ghy/common/adapay/callback/AdapayCallbackController.java +++ b/ghy-common/src/main/java/com/ghy/common/adapay/callback/AdapayCallbackController.java @@ -1,7 +1,7 @@ package com.ghy.common.adapay.callback; -import com.ghy.common.adapay.callback.reply.PayReplyMapping; -import com.ghy.common.adapay.callback.reply.RefundReplyMapping; +import com.ghy.common.adapay.callback.mapping.PayReplyMapping; +import com.ghy.common.adapay.callback.mapping.RefundReplyMapping; import com.huifu.adapay.core.AdapayCore; import com.huifu.adapay.core.util.AdapaySign; import lombok.extern.slf4j.Slf4j; diff --git a/ghy-common/src/main/java/com/ghy/common/adapay/callback/reply/PayReplyMapping.java b/ghy-common/src/main/java/com/ghy/common/adapay/callback/mapping/PayReplyMapping.java similarity index 96% rename from ghy-common/src/main/java/com/ghy/common/adapay/callback/reply/PayReplyMapping.java rename to ghy-common/src/main/java/com/ghy/common/adapay/callback/mapping/PayReplyMapping.java index 65f9991b..f7b8ce94 100644 --- a/ghy-common/src/main/java/com/ghy/common/adapay/callback/reply/PayReplyMapping.java +++ b/ghy-common/src/main/java/com/ghy/common/adapay/callback/mapping/PayReplyMapping.java @@ -1,4 +1,4 @@ -package com.ghy.common.adapay.callback.reply; +package com.ghy.common.adapay.callback.mapping; import com.alibaba.fastjson.JSON; import com.ghy.common.adapay.callback.Event; diff --git a/ghy-common/src/main/java/com/ghy/common/adapay/callback/reply/RefundReplyMapping.java b/ghy-common/src/main/java/com/ghy/common/adapay/callback/mapping/RefundReplyMapping.java similarity index 96% rename from ghy-common/src/main/java/com/ghy/common/adapay/callback/reply/RefundReplyMapping.java rename to ghy-common/src/main/java/com/ghy/common/adapay/callback/mapping/RefundReplyMapping.java index 68340a6a..75c3967a 100644 --- a/ghy-common/src/main/java/com/ghy/common/adapay/callback/reply/RefundReplyMapping.java +++ b/ghy-common/src/main/java/com/ghy/common/adapay/callback/mapping/RefundReplyMapping.java @@ -1,4 +1,4 @@ -package com.ghy.common.adapay.callback.reply; +package com.ghy.common.adapay.callback.mapping; import com.alibaba.fastjson.JSON; import com.ghy.common.adapay.callback.Event; diff --git a/ghy-common/src/main/java/com/ghy/common/adapay/callback/model/AlipayQrExpend.java b/ghy-common/src/main/java/com/ghy/common/adapay/callback/model/AlipayQrExpend.java new file mode 100644 index 00000000..4f37ce5c --- /dev/null +++ b/ghy-common/src/main/java/com/ghy/common/adapay/callback/model/AlipayQrExpend.java @@ -0,0 +1,30 @@ +package com.ghy.common.adapay.callback.model; + +import com.alibaba.fastjson.annotation.JSONField; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 支付宝正扫支付时的expend参数 + * + * @author HH 2022/3/31 + */ +@Data +@EqualsAndHashCode(callSuper = true) +public class AlipayQrExpend extends Expend { + + /** + * 优惠信息 + */ + @JSONField(name = "promotion_detail") + private PromotionDetail promotionDetail; + + /** + * 花呗分期数 + * 支付金额大于等于 100 元时,可不指定分期数,用户可自由选择分期数; + * 支付金额小于 100 元时,必须指定分期数,否则不支持花呗分期支付; + * 指定分期数后用户不能更分期数;分期数目前只支持 3、6、12。花呗分期的手续费由用户自己承担。 + */ + @JSONField(name = "hb_fq_num") + private PromotionDetail hbFqNum; +} diff --git a/ghy-common/src/main/java/com/ghy/common/adapay/callback/model/Expend.java b/ghy-common/src/main/java/com/ghy/common/adapay/callback/model/Expend.java new file mode 100644 index 00000000..1aaa6e49 --- /dev/null +++ b/ghy-common/src/main/java/com/ghy/common/adapay/callback/model/Expend.java @@ -0,0 +1,7 @@ +package com.ghy.common.adapay.callback.model; + +/** + * @author HH 2022/3/31 + */ +public class Expend { +} diff --git a/ghy-common/src/main/java/com/ghy/common/adapay/callback/model/PromotionDetail.java b/ghy-common/src/main/java/com/ghy/common/adapay/callback/model/PromotionDetail.java new file mode 100644 index 00000000..35e630fa --- /dev/null +++ b/ghy-common/src/main/java/com/ghy/common/adapay/callback/model/PromotionDetail.java @@ -0,0 +1,35 @@ +package com.ghy.common.adapay.callback.model; + +import com.alibaba.fastjson.annotation.JSONField; +import lombok.Data; + +/** + * 优惠信息 + * + * @author HH 2022/3/31 + */ +@Data +public class PromotionDetail { + + /** + * 订单原价 + * 商户侧一张小票订单可能被分多次支付,订单原价用于记录整张小票的交易金额 + * 当订单原价与支付金额不相等,则不享受优惠 + * 该字段主要用于防止同一张小票分多次支付,以享受多次优惠的情况,正常支付订单不必上传此参数 + */ + @JSONField(name = "cost_price") + private String costPrice; + + /** + * 商家小票 id + */ + @JSONField(name = "receipt_id") + private String receiptId; + + /** + * 订单包含的商品列表信息 + * 详见 GoodsDetail对象 https://docs.adapay.tech/api/appendix.html#goodsdetail + */ + @JSONField(name = "goods_detail") + private String goodsDetail; +} diff --git a/ghy-common/src/main/java/com/ghy/common/adapay/callback/model/WxLiteExpend.java b/ghy-common/src/main/java/com/ghy/common/adapay/callback/model/WxLiteExpend.java new file mode 100644 index 00000000..5ff4edfe --- /dev/null +++ b/ghy-common/src/main/java/com/ghy/common/adapay/callback/model/WxLiteExpend.java @@ -0,0 +1,42 @@ +package com.ghy.common.adapay.callback.model; + +import com.alibaba.fastjson.annotation.JSONField; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 微信小程序支付时的expend参数 + * + * @author HH 2022/3/31 + */ +@Data +@EqualsAndHashCode(callSuper = true) +public class WxLiteExpend extends Expend{ + + /** + * [必填]微信用户关注商家公众号的 openid + */ + @JSONField(name = "open_id") + private String openId; + /** + * 当前微信小程序的 appid + */ + @JSONField(name = "wx_app_id") + private String wxAppId; + /** + * 是否原生态:”1”-是,”0”-否 + */ + @JSONField(name = "is_raw") + private String isRaw; + /** + * 值为 1 时禁止使用信用卡支付 + */ + @JSONField(name = "limit_pay") + private String limitPay; + /** + * 优惠信息 + */ + @JSONField(name = "promotion_detail") + private PromotionDetail promotionDetail; + +}