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 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 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 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 orderGeneratorMap = new HashMap<>(8); /** * 用于测试,使用sdk对象。 * @return * @date 2023-02-21 */ public SdkClient getSdkClient(){ return this.sdkClient; } }