Air
2024-11-04 29c405353029f033e187e8dc033b93385365ee43
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
package com.nova.sankuai.service;
 
import com.alipay.api.AlipayApiException;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.nova.sankuai.domain.dto.*;
import com.nova.sankuai.domain.entity.AlipayRefundRecord;
import com.nova.sankuai.domain.entity.SysAlipayAccount;
import com.nova.sankuai.domain.vo.AlipayOrderInfoVO;
import com.nova.sankuai.security.UserDetail;
 
import java.math.BigDecimal;
import java.util.Map;
 
public interface IAlipayPlatformService {
 
    /**
     * 创建支付宝订单,返回手机网页支付的表单内容
     */
    String orderCreate(AlipayOrderCreateDTO createDTO);
 
    /**
     * 生成支付宝订单创建的表单
     *
     * @param account   要使用的支付宝账户实例
     * @param orderId   商户订单号
     * @param amount    订单金额
     * @param subject   订单主体
     * @param returnURL 页面返回URL
     * @param notifyURL 回调URL
     * @return 表单
     * @throws AlipayApiException 生成支付表单时产生的异常
     */
    String generateAlipayForm(SysAlipayAccount account,
                              String orderId, String amount, String subject,
                              String returnURL, String notifyURL) throws AlipayApiException;
 
    /**
     * 判断支付宝账户是否达到当日限额,若没有达到则检查是否需要满额预警,然后返回生成的usageId;否则抛出异常
     *
     * @param orderId 订单号
     * @param amount  金额
     * @return 返回 usageID
     */
    long accountDecision(String orderId, BigDecimal amount);
 
    /**
     * 处理支付宝回调
     *
     * @param paramMap 支付宝回调参数
     */
    void handleNotify(Map<String, String[]> paramMap);
 
    /**
     * RSA私钥解密
     *
     * @param encodedString 加密字符串
     * @param type          解密后 JSON 解析类型
     * @param <T>           类型泛型
     * @return 解密后实例
     */
    <T> T decode(String encodedString, Class<T> type);
 
    /**
     * RSA私钥加密
     *
     * @param inst 原始内容
     * @return 解密后实例
     */
    String encode(String inst);
 
    /**
     * 订单查询
     *
     * @param queryDTO 查询参数
     * @return 查询后结果
     */
    AlipayOrderInfoVO orderQuery(AlipayOrderQueryDTO queryDTO);
 
    /**
     * 序列化为JSON字符串
     *
     * @param obj 实例
     * @return 字符串
     */
    String toJsonString(Object obj);
 
    /**
     * 对入参加签,然后返回结构体
     *
     * @param content 内容
     * @return 结构体
     */
    Map<String, String> sign(String content);
 
    /**
     * 商户向指定支付宝账户转账
     *
     * @param param 入参
     */
    void transferAccount(AlipayTransferAccountDTO param);
 
    /**
     * 用户退款
     *
     * @param refundDTO 入参
     */
    void refund(AlipayRefundDTO refundDTO);
 
    /**
     * 分页查询退款记录
     *
     * @param queryDTO 入参
     * @return 结果页
     */
    IPage<AlipayRefundRecord> refundList(AlipayRefundQueryDTO queryDTO);
 
    /**
     * 退款处理提交
     *
     * @param finishDTO 入参
     */
    void refundFinish(AlipayRefundFinishDTO finishDTO);
 
    /**
     * 查询当前登录用户会员有效期内可退款金额
     *
     * @param user 当前登录用户
     * @return 金额(分)
     */
    BigDecimal refundAmountCalculate(UserDetail user);
 
    /**
     * RSA公钥解密
     *
     * @param encodedString 加密字符串
     * @param type          解密后 JSON 解析类型
     * @param <T>           类型泛型
     * @return 解密后实例
     */
    <T> T decodeByPublicKey(String encodedString, Class<T> type);
}