ghy-all/ghy-common/src/main/java/com/ghy/common/adapay/AdapayService.java

110 lines
5.9 KiB
Java
Raw Normal View History

package com.ghy.common.adapay;
import com.ghy.common.adapay.callback.PayCallback;
2022-03-29 20:17:36 +08:00
import com.ghy.common.adapay.callback.RefundCallback;
2022-03-31 10:38:34 +08:00
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;
2022-03-29 20:17:36 +08:00
import com.huifu.adapay.model.Refund;
import lombok.Setter;
import lombok.extern.slf4j.Slf4j;
import java.util.HashMap;
import java.util.Map;
/**
* @author HH 2022/3/25
*/
@Slf4j
@Setter
public class AdapayService {
AdapayProperties adapayProperties;
/**
2022-03-31 10:38:34 +08:00
* 支付宝正扫支付
2022-03-29 20:17:36 +08:00
*/
2022-03-31 10:38:34 +08:00
public Map<String, Object> 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);
2022-03-29 20:17:36 +08:00
}
/**
* 微信小程序支付
2022-03-31 10:38:34 +08:00
*/
public Map<String, Object> 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);
}
/**
2022-03-29 20:17:36 +08:00
* @param callback [必填项]处理支付结果的回调接口
* @param orderNo [必填项]订单号
2022-03-31 10:38:34 +08:00
* @param payAmt [必填项]交易金额必须大于0保留两位小数点"0.10""100.05"
2022-03-29 20:17:36 +08:00
* @param goodsTittle [必填项]商品名称
* @param goodsDesc [必填项]商品描述信息微信小程序和微信公众号该字段最大长度42个字符
2022-03-31 10:38:34 +08:00
* @param payChannel [必填项]支付渠道详见 https://docs.adapay.tech/api/appendix.html#id2
* @param expend 支付渠道额外参数条件可输入详见 https://docs.adapay.tech/api/appendix.html#expend
* @param description 订单附加说明
2022-03-31 10:38:34 +08:00
* @return 同步返回一个 支付对象详见 https://docs.adapay.tech/api/trade.html#id2
*/
2022-03-31 10:38:34 +08:00
public Map<String, Object> pay(PayCallback callback, String payChannel, Expend expend, String orderNo, String payAmt, String goodsTittle, String goodsDesc, String description) throws BaseAdaPayException {
2022-03-29 20:17:36 +08:00
Map<String, Object> paymentParams = new HashMap<>(16);
paymentParams.put("app_id", adapayProperties.getAppId());
paymentParams.put("notify_url", adapayProperties.getNotifyUrl());
paymentParams.put("order_no", orderNo);
2022-03-31 10:38:34 +08:00
paymentParams.put("pay_channel", payChannel);
paymentParams.put("pay_amt", payAmt);
paymentParams.put("goods_title", goodsTittle);
paymentParams.put("goods_desc", goodsDesc);
paymentParams.put("description", description);
2022-03-31 10:38:34 +08:00
paymentParams.put("expend", expend);
2022-03-29 20:17:36 +08:00
PayReplyMapping.putCallback(orderNo, callback);
return Payment.create(paymentParams);
}
2022-03-31 10:38:34 +08:00
/**
* 发起退款
* 当您的业务需要发起退款时可通过 Adapay 系统提供的创建 Refund对象 方法创建一个退款对象资金会原路退回用户的支付宝或微信中
* 支持一次全额或多次部分退款退款次数最多不超过10次多次部分退款时当前退款金额 + 已退款金额不能大于原支付金额
* 对于每次撤销交易Adapay 都会通过 异步消息通知 告知结果
* 退款对象同步返回成功表示Adapay受理成功退款结果以异步通知为准支持退款最长时间为178天
* 若返回码是order_id_not_exists 订单记录不存在既超过退款期限无法退款成功
*
* @param callback [必填项]处理退款结果的回调接口
* @param paymentId [必填项]支付确认对象的id
* @param refundOrderNo [必填项]订单号
* @param refundAmt [必填项]退款金额若退款金额小于原交易金额则认为是部分退款必须大于0保留两位小数点如0.10100.05等
* @return 同步返回一个 退款对象
*/
public Map<String, Object> refund(RefundCallback callback, String paymentId, String refundOrderNo, String refundAmt) throws BaseAdaPayException {
Map<String, Object> refundParams = new HashMap<>(4);
refundParams.put("refund_amt", refundAmt);
refundParams.put("refund_order_no", refundOrderNo);
RefundReplyMapping.putCallback(paymentId, callback);
return Refund.create(paymentId, refundParams);
}
2022-03-29 20:17:36 +08:00
/**
* 支付关单
* 针对已经创建的 支付对象您可以调用关单接口进行交易的关闭调用此接口后该用户订单将不再能支付成功 对于关单功能的使用有如下规则
* 1.存在关单记录不能再次关单
* 2.交易时间 1分钟 内无法关单成功
* 3.正扫交易时间超过 2小时 无法关单成功
* 4.支付宝正扫接口如果用户没有扫码订单不能关闭成功二维码给用户展示如果用户没有用手机去扫码那这笔就不能关单 如果用户扫过了的话无需支付成功就可以关单了-微信正扫无此条限制
* 5.网银和快捷类交易都不支持关单操作
*
* @param paymentId [必填项] Adapay 生成的支付对象 id
* @param reason 关单描述
* @param expend 扩展域
*/
public Map<String, Object> close(String paymentId, String reason, String expend) throws BaseAdaPayException {
Map<String, Object> paymentParams = new HashMap<>(4);
paymentParams.put("payment_id", paymentId);
paymentParams.put("reason", reason);
paymentParams.put("expend", expend);
return Payment.close(paymentParams);
}
}