package com.walker.pay.allinpaycloud.generator; import com.allinpay.sdk.bean.OpenResponse; import com.walker.infrastructure.arguments.Variable; import com.walker.pay.Order; import com.walker.pay.PayContext; import com.walker.pay.ResponsePay; import com.walker.pay.allinpaycloud.BaseOrderGenerator; import com.walker.pay.allinpaycloud.Constants; import com.walker.pay.allinpaycloud.util.OrderUtils; import com.walker.pay.response.ScanOrderResponsePay; import com.walker.pay.support.allinpaycloud.ScanWechatOrder; import java.util.Map; /** * 微信扫码(正扫)生成动态订单二维码,生成器定义。 * @author 时克英 * @date 2023-03-01 */ public class ScanWechatOrderGenerator extends BaseOrderGenerator { @Override protected ResponsePay invoke(PayContext payContext, Order platformOrder) { this.checkSdkClient(); if(!(platformOrder instanceof ScanWechatOrder)){ throw new IllegalArgumentException("微信扫描(正扫)支付订单类型必须是'ScanWechatOrder'"); } OpenResponse response = this.getSdkClient().consumeApply(platformOrder); if(response == null){ throw new RuntimeException("调用'通商云微信扫码'订单返回空数据, orderId = " + platformOrder.getId()); } if (!Constants.SUB_CODE_OK.equals(response.getSubCode())) { logger.debug("'微信扫码(正扫)'订单返回失败:{}", response.getSubMsg()); return ResponsePay.error(ScanOrderResponsePay.class, response.getSubMsg()); } ScanOrderResponsePay scanOrderResponsePay = new ScanOrderResponsePay(); try { OrderResponsePay responseValue = OrderUtils.getOrderResponsePay(response.getData()); if(responseValue == null){ throw new RuntimeException("orderResponsePay = null!"); } // 生成的二维码结果,统一转换成对象:ScanOrderResponsePay scanOrderResponsePay.setStatus(true); scanOrderResponsePay.setCodeUrl(responseValue.getPayInfo()); return scanOrderResponsePay; } catch (Exception e) { logger.error(e.getMessage(), e); throw new RuntimeException("调用'通商云微信扫码(正扫)'订单数据转换对象失败, orderId = " + platformOrder.getId()); } } @Deprecated @Override protected ResponsePay invoke(String providerPayType, Order platformOrder, Map configuration) { return null; } }