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;
|
}
|
}
|