package com.iplatform.pay.notify; import com.iplatform.pay.BasePayApi; import com.iplatform.pay.Constants; import com.walker.infrastructure.utils.JsonUtils; import com.walker.infrastructure.utils.StringUtils; import com.walker.pay.allinpaycloud.DefaultPayEngineProvider; import com.walker.pay.allinpaycloud.RequestNotify; import com.walker.pay.allinpaycloud.pojo.ResponseSignAcctNotify; import com.walker.pay.allinpaycloud.util.TextUtils; import com.walker.pay.exception.NotifyException; import com.walker.web.ResponseValue; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; /** * 通商云通知进入接口。 * @author 时克英 * @date 2023-02-25 */ @RestController @RequestMapping("/pay/notify/allinpayCloud") @ConditionalOnClass({DefaultPayEngineProvider.class}) public class AllinpayCloudApi extends BasePayApi { /** * 提现签约通知(接收) * @param raw * @return * @date 2023-02-27 */ @PostMapping("/signAcctNotify") public ResponseValue signAcctNotify(RequestNotify raw){ logger.debug(raw.toString()); if(StringUtils.isEmpty(raw.getBizContent())){ throw new IllegalArgumentException("通商云'提现签约'通知,未接收到 bizContent 业务数据:" + raw, null); } String decodeBizContent = TextUtils.decodeFormUrlParameter(raw.getBizContent()); logger.debug(decodeBizContent); try { ResponseSignAcctNotify responseSignAcctNotify = JsonUtils.jsonStringToObject(decodeBizContent, ResponseSignAcctNotify.class); if(StringUtils.isNotEmpty(responseSignAcctNotify.getResult()) && responseSignAcctNotify.getResult().equals(com.walker.pay.allinpaycloud.Constants.SUB_CODE_OK)){ logger.info("提现签约成功,这里处理业务状态更新: " + responseSignAcctNotify.getAcctProtocolNo()); } } catch (Exception e) { throw new RuntimeException("ResponseSignAcctNotify转换对象错误, bizContent=" + decodeBizContent, e); } return ResponseValue.success(); } /** * 订单支付通知(接收) * @param raw * @return * @date 2023-02-26 */ @PostMapping("/orderNotify") public ResponseValue orderPayNotify(RequestNotify raw){ logger.debug(raw.toString()); if(StringUtils.isEmpty(raw.getBizContent())){ // logger.error("通商云支付通知,未接收到 bizContent 业务数据: {}", raw); throw new IllegalArgumentException("通商云支付通知,未接收到 bizContent 业务数据:" + raw, null); } // 通过支付管理器的通知方法调用。 try { String error = this.getPayEngineManager().notifyOrder(Constants.PAY_DEFINITION_ID_ALLINPAY_CLOUD, raw); if(StringUtils.isNotEmpty(error)){ throw new RuntimeException("支付通知引擎返回错误:" + error, null); } } catch (NotifyException e) { throw new RuntimeException("通商云支付结果通知异常:" + e.getMessage() + ", raw = " + raw , e); } return ResponseValue.success(); } }