package com.walker.pay.allinpaycloud;
|
|
import com.allinpay.sdk.bean.OpenConfig;
|
import com.walker.infrastructure.arguments.Variable;
|
import com.walker.pay.Order;
|
import com.walker.pay.OrderGenerator;
|
import com.walker.pay.OrderStatusQuery;
|
import com.walker.pay.PayChannel;
|
import com.walker.pay.PayContext;
|
import com.walker.pay.PayType;
|
import com.walker.pay.ServiceProvider;
|
import com.walker.pay.allinpaycloud.generator.BankCardOrderGenerator;
|
import com.walker.pay.allinpaycloud.generator.ScanWechatOrderGenerator;
|
import com.walker.pay.allinpaycloud.generator.WechatJsOrderGenerator;
|
import com.walker.pay.allinpaycloud.generator.WechatProgramOrderGenerator;
|
import com.walker.pay.response.OrderStatusResponsePay;
|
import com.walker.pay.support.SimplePayEngineProvider;
|
import org.springframework.web.client.RestTemplate;
|
|
import java.util.HashMap;
|
import java.util.Map;
|
|
/**
|
* 通商云(通联)支付引擎默认实现。
|
* @author 时克英
|
* @date 2023-02-17
|
*/
|
public class DefaultPayEngineProvider extends SimplePayEngineProvider {
|
|
public DefaultPayEngineProvider(){}
|
public DefaultPayEngineProvider(RestTemplate restTemplate){}
|
|
@Override
|
protected String acquireProviderPayType(ServiceProvider serviceProvider, PayType payType, PayChannel payChannel) {
|
if(payType == PayType.AllinPayCloud_QUICKPAY_VSP){
|
return Constants.PAY_TYPE_QUICKPAY_VSP;
|
} else if(payType == PayType.AllinPayCloud_WECHAT_PUBLIC){
|
return Constants.PAY_TYPE_WECHAT_PUBLIC;
|
} else if(payType == PayType.AllinPayCloud_ALIPAY_SERVIC){
|
return Constants.PAY_TYPE_ALIPAY_SERVICE;
|
} else if(payType == PayType.AllinPayCloud_WECHATPAY_MINIPROGRAM){
|
return Constants.PAY_TYPE_WECHATPAY_MINIPROGRAM;
|
} else if(payType == PayType.AllinPayCloud_SCAN_WEIXIN){
|
return Constants.PAY_TYPE_SCAN_WEIXIN;
|
} else if(payType == PayType.AllinPayCloud_SCAN_ALIPAY){
|
return Constants.PAY_TYPE_SCAN_ALIPAY;
|
} else if(payType == PayType.AllinPayCloud_COUPON){
|
return Constants.PAY_TYPE_COUPON;
|
} else {
|
throw new UnsupportedOperationException("代码未实现'通商云'支付类型转换:" + payType.getName());
|
}
|
}
|
|
@Override
|
protected OrderGenerator acquireOrderGenerator(String providerPayType, Order platformOrder, Map<String, Variable> configuration) {
|
return this.orderGeneratorMap.get(providerPayType);
|
}
|
|
@Override
|
protected boolean verifySign(Object notifyData) throws Exception {
|
RequestNotify requestNotify = (RequestNotify) notifyData;
|
String signedValue = requestNotify.toSignSource();
|
logger.debug(signedValue);
|
return this.sdkClient.checkSign(signedValue, requestNotify.getSign());
|
}
|
|
@Override
|
protected PayContext acquirePayContext(String providerPayType, Order platformOrder, Map<String, Variable> configuration) {
|
CloudPayContext context = new CloudPayContext();
|
return context;
|
}
|
|
@Override
|
protected OrderStatusQuery acquireOrderStatusQuery(Order order) {
|
OrderStatusQuery orderStatusQuery = new OrderStatusQuery();
|
orderStatusQuery.setOrderId(order.getId());
|
return orderStatusQuery;
|
}
|
|
@Override
|
protected OrderStatusResponsePay invokeOrderStatus(OrderStatusQuery orderStatusQuery) {
|
return this.sdkClient.searchOrderStatus(String.valueOf(orderStatusQuery.getOrderId()));
|
}
|
|
@Override
|
public String generateNotifyResponse(boolean success) {
|
return Constants.SUB_CODE_OK;
|
}
|
|
@Override
|
public void setConfiguration(Map<String, Variable> configuration){
|
super.setConfiguration(configuration);
|
// 覆盖父类方法,实现初始化sdk
|
OpenConfig openConfig = new OpenConfig();
|
openConfig.setUrl(configuration.get(Constants.CONFIG_KEY_URL).getStringValue());
|
openConfig.setAppId(configuration.get(Constants.CONFIG_KEY_APP_ID).getStringValue());
|
openConfig.setSecretKey(configuration.get(Constants.CONFIG_KEY_SECRET_KEY).getStringValue());
|
openConfig.setCertPath(configuration.get(Constants.CONFIG_KEY_PRIVATE_KEY_PATH).getStringValue());
|
openConfig.setCertPwd(configuration.get(Constants.CONFIG_KEY_PWD).getStringValue());
|
openConfig.setTlCertPath(configuration.get(Constants.CONFIG_KEY_PUBLIC_KEY).getStringValue());
|
this.sdkClient = new SdkClient(openConfig);
|
this.init();
|
logger.info("SdkClient create...");
|
}
|
|
private void init(){
|
this.setServiceProvider(ServiceProvider.AllinPayCloud);
|
this.setVersion(com.walker.pay.Constants.DEFAULT_VERSION);
|
this.setPayChannel(PayChannel.ProviderDirect);
|
|
if(this.sdkClient == null){
|
throw new IllegalArgumentException("SdkClient 未创建,无法构建支付引擎:" + this.getClass().getName());
|
}
|
BankCardOrderGenerator bankCardOrderGenerator = new BankCardOrderGenerator();
|
bankCardOrderGenerator.setSdkClient(this.sdkClient);
|
|
WechatJsOrderGenerator wechatJsOrderGenerator = new WechatJsOrderGenerator();
|
wechatJsOrderGenerator.setSdkClient(this.sdkClient);
|
|
WechatProgramOrderGenerator wechatProgramOrderGenerator = new WechatProgramOrderGenerator();
|
wechatProgramOrderGenerator.setSdkClient(this.sdkClient);
|
|
ScanWechatOrderGenerator scanWechatOrderGenerator = new ScanWechatOrderGenerator();
|
scanWechatOrderGenerator.setSdkClient(this.sdkClient);
|
|
this.orderGeneratorMap.put(Constants.PAY_TYPE_QUICKPAY_VSP, bankCardOrderGenerator);
|
this.orderGeneratorMap.put(Constants.PAY_TYPE_WECHAT_PUBLIC, wechatJsOrderGenerator);
|
this.orderGeneratorMap.put(Constants.PAY_TYPE_WECHATPAY_MINIPROGRAM, wechatProgramOrderGenerator);
|
this.orderGeneratorMap.put(Constants.PAY_TYPE_SCAN_WEIXIN, scanWechatOrderGenerator);
|
}
|
|
private SdkClient sdkClient = null;
|
private Map<String, OrderGenerator> orderGeneratorMap = new HashMap<>(8);
|
|
/**
|
* 用于测试,使用sdk对象。
|
* @return
|
* @date 2023-02-21
|
*/
|
public SdkClient getSdkClient(){
|
return this.sdkClient;
|
}
|
}
|