关于自己平台事务回滚而第三方平台不能回滚的处理问题
有这么一个场景,我们平台创建了一个活动,需要发布,发布的时候需要去调用第三方的活动增加接口,才能把我们的活动信息保存到第三方那边,但是在调用活动增加接口之前还需要创建一个活动组接口,也是调用第三方的活动组创建接口,正常流程是第一步活动组创建接口,第二步将活动组id封装到活动信息里面,然后调用活动增加接口,第三步将第三方平台返回的活动id更新到我们本地。
中间有个问题,我们系统的活动校验规则并不和第三方活动校验规则一致,这就有可能我们活动增加成功了,但是在调用他们接口时,因为规则校验不全,他们提示了错误信息。但是在调用第三方活动增加接口前创建了活动组,这个活动组在他们那边有个校验,不允许名称重复。这个时候问题就出现了,第一次我们去走流程,先创建活动组,在调用活动增加接口,结果报错了,提示我们某个信息有误,
然后客户又去改了信息,并没有活动名称,而我们创建活动组的名称就是根据活动名称来的,就会报错,提示活动组名称重复,接口一报错,我们本地的库会进行事务回滚,也不会存一些变更的信息了,这样整个流程就死掉了,创建活动组名称之所以是根据活动名称来的,是因为这个需要展示,不能随便定义,根据产品经理的要求来创建活动组的。
解决方法:在调用活动增加的接口进行异常捕获,如果抛出异常,则进行调用活动组删除接口,这样在第二次进来的时候就不会出现活动组名称重复这个问题了
总结:当调用多个第三方平台接口时,如果是增加修改删除等操作时,最好需要进行捕获,用于调用恢复第三方数据有关接口,避免出现数据重复或者其他校验问题出现,导致流程走不下去