shikeying
2024-01-11 3b67e947e36133e2a40eb2737b15ea375e157ea0
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
package com.walker.pay.wechat;
 
import com.walker.infrastructure.utils.ClassUtils;
import com.walker.pay.AbstractPayEngineManager;
import com.walker.pay.AbstractPayEngineProvider;
import com.walker.pay.Order;
import com.walker.pay.PayChannel;
import com.walker.pay.PayDefinition;
import com.walker.pay.PayEngineNotFoundException;
import com.walker.pay.PayEngineProvider;
import com.walker.pay.ServiceProvider;
import com.walker.pay.support.DefaultOrder;
import com.walker.pay.support.DefaultPayDefinition;
import com.walker.pay.wechat.v2.WechatV2OrderCallback;
import org.springframework.web.client.RestTemplate;
 
import java.lang.reflect.Constructor;
import java.util.ArrayList;
import java.util.List;
 
public class DemoPayEngineManager extends AbstractPayEngineManager {
 
    private RestTemplate restTemplate;
 
    public DemoPayEngineManager(RestTemplate restTemplate){
        this.restTemplate = restTemplate;
    }
 
    @Override
    protected List<PayDefinition> acquirePayDefinitionList() {
        return this.createTestPayDefinitionList();
    }
 
    @Override
    protected PayEngineProvider acquirePayEngineProvider(PayDefinition payDefinition) throws PayEngineNotFoundException {
        boolean exist = ClassUtils.isPresent(payDefinition.getPayEngineProviderClass(), this.getClass().getClassLoader());
        if(!exist){
            throw new PayEngineNotFoundException(payDefinition.getId(), "PayEngineProviderClass不存在:" + payDefinition.getPayEngineProviderClass(), null);
        }
        try {
            logger.info("PayEngineProviderClass = " + payDefinition.getPayEngineProviderClass());
            Class<?> payEngineProviderClass = ClassUtils.forName(payDefinition.getPayEngineProviderClass(), this.getClass().getClassLoader());
            Constructor<AbstractPayEngineProvider> constructor = (Constructor<AbstractPayEngineProvider>)payEngineProviderClass.getConstructor(RestTemplate.class);
 
            AbstractPayEngineProvider payEngineProvider = constructor.newInstance(this.restTemplate);
            payEngineProvider.setConfiguration(this.getConfiguration());
            payEngineProvider.setPayDefinition(payDefinition);
//            payEngineProvider.setServiceProvider(payDefinition.getServiceProvider());
//            payEngineProvider.setPayChannel(payDefinition.getPayChannel());
//            payEngineProvider.setVersion(payDefinition.getVersion());
            // 设置通知数据转换器,暂时还没有实现。
//            payEngineProvider.setOrderNotifyConvertor();
            // 设置定义的订单回调业务实现。
            payEngineProvider.setOrderCallback(payDefinition.getOrderCallback());
            return payEngineProvider;
 
        } catch (ClassNotFoundException e) {
            throw new PayEngineNotFoundException(payDefinition.getId(), "未找到'PayEngineProviderClass':" + payDefinition.getPayEngineProviderClass(), e);
        } catch (NoSuchMethodException e){
            throw new PayEngineNotFoundException(payDefinition.getId(), "未找到构造方法:getConstructor(RestTemplate.class)", e);
        } catch (Exception ex){
            throw new PayEngineNotFoundException(payDefinition.getId(), "创建'PayEngineProvider'失败:" + ex.getMessage(), ex);
        }
    }
 
    @Override
    protected Order acquireOrder(String orderId) {
        // 2023-02-23 目前获取订单只是要支付定义id
        DefaultOrder order = new DefaultOrder();
        order.setPayDefinitionId("Wechat_v2");
        return order;
    }
 
    private List<PayDefinition> createTestPayDefinitionList(){
//        Map<String, Variable> configuration = new HashMap<>();
//        configuration.put(Constants.CONFIG_KEY_APP_ID, new DefaultVariable(VariableType.String, "wx8e4834af01a60a32", null));
//        configuration.put(Constants.CONFIG_KEY_MCH_ID, new DefaultVariable(VariableType.String, "1630059373", null));
//        configuration.put(Constants.CONFIG_KEY_API_KEY, new DefaultVariable(VariableType.String, "Zhongzhouzhihuishuili12345678901", null));
 
        DefaultPayDefinition d1 = new DefaultPayDefinition();
        d1.setServiceProvider(ServiceProvider.Wechat);
        d1.setVersion("v2");
        d1.setPayChannel(PayChannel.ProviderDirect);
        d1.setName("定义: 微信支付v2");
        d1.setEnabled(true);
        d1.setPayEngineProviderClass("com.walker.pay.wechat.WechatV2PayEngineProvider");
        d1.setConfiguration(this.getConfiguration());
        d1.setOrderCallback(new WechatV2OrderCallback());
 
        DefaultPayDefinition d2 = new DefaultPayDefinition();
        d2.setServiceProvider(ServiceProvider.Wechat);
        d2.setVersion("v3");
        d2.setPayChannel(PayChannel.ProviderDirect);
        d2.setName("定义: 微信支付v3");
        d2.setEnabled(true);
        d2.setPayEngineProviderClass("com.walker.pay.wechat.WechatV3PayEngineProvider");
        d2.setConfiguration(this.getConfiguration());
 
        List<PayDefinition> list = new ArrayList<>(8);
        list.add(d1);
//        list.add(d2);
        return list;
    }
}