订单退款&重复支付需求疑问点归纳整理

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了订单退款&重复支付需求疑问点归纳整理相关的知识,希望对你有一定的参考价值。

参考技术A 全部订单/已完成订单

1. 当前退款操作入口有哪些地方?

答:当前只有全部订单、已完成订单显示退款按钮操作

2. 订单管理—全部订单/已完成订单 全额退款结束是否显示退款按钮? or仍然正常显示?

例如:原订单用户已支付100元,第一次退款50、第二次退款50 ,第三次退款0 ?退款>0 ?

注意:携带有2位小数的退款操作

答:遵守可退款金额=实付金额-已退款金额 逻辑;即使0元退款按钮也正常显示

3. 0元免费领取公开课、单科目会员购买成功直接报名公开课成功(不创建订单)?

答:0元商品同问题2一样,遵循退款金额不能大于原订单金额

4. 已发放商品失效时间如何计算,从当前时间点 or 明天的00:00:00点?如果当前订单发生多笔退款操作,以哪一笔为基准?

答:失效时间计算:明天的00:00:00点算起;如订单发起多笔退款,异常处理:订单发起退款时,“已发放商品”处理状态曾选择过“立即失效”状态,则不可选择“正常使用”状态,反之选择“正常使用”状态则不受限制。

5. 多子订单号显示多子订单号 (单个显示订单号)  

6. 正常退款完成,用户已完成订单(公开课、会员卡是否显示退款通知消息or订单更新通知?)

答:暂无设计

退款:

0. 退款方式有自动退款、平台手工退款 ;用户发起退款?争议:用户发起退款场景?  

答:暂时只有自动退款和平台手工退款 ;用户发起退款场景暂时不存在

1. 退款多次:标识原订单的商品订单号、买家账号、是商品名称(运营后台更新)是否同步更新?年级、商品类型、退款方式保持一致?

答:已下单商品运营后台更新后不再更新

2. 注意退款金额汇总方式? 汇总当前删选条件下的金额

答:默认显示所有金额,根据筛选条件查找以后显示筛选后的退款订单列表金额汇总  

3. 会员权益商品:退款详情多个子商品 ,详情明细列表如何显示?

答:多子商品显示多子明细记录,单个商品按原样显示。

4. 退款详情:退款完成多表关联如何?原订单金额如何显示 ?二次退款如何记录可退款金额?显示在可退款金额中?

答:原订单金额依次扣减,多次退款剩余金额只会在弹框中显示,外面的订单列表中不显示剩余金额。

5. 退款详情:失效时间锁定日期(HH:mm:ss仅锁定23:59:59):以具体的时分为准?or 只定位到日期?

答:失效时间根据 天数换算对应显示为天数,具体时间写死23:59:59

6. 自动退款:系统根据实际支付成功时间先后顺序,将最接近当前时间的交易进行自动退款并创建退款记录 ?

问题争议:退出发起操作和交易明细有何关联关系,一笔退款对应一笔交易明细?

答:实际用户支付过程中有可能多次进行付款,但是只会始终有一笔订单对应多笔明细 ,系统根据最近时间的一笔进行自动退款处理; 退款原因“重复支付”),退款方式远路退回。

7. 退款明细:返回状态失败场景?网络错误 or 系统错误 or 卖家余额不足?  

答:退款失败看具体第三方公司返回的错误信息而定;

8 . 商品类型为“公开课”属性商品不可发起退款请求

争议:这里的公开课商品有两种类型:

1. 会员课报名同时直接报名公开课2. 公开课花钱购买(0元购买也算),只要花钱购买就存在重复支付;  

这里的不支持公开课退款是系统自动退款和手工退款都不支持吗?

答:这里公开课不支持a手动退款,和重复支付没关系;重复支付的订单仍然会由系统发起自动退款 ,并且退款的退款明细不会再退款订单里展示,只会在退款的交易明细里展示。

一句话:如果是公开课重复支付也要能自动发起退款 。

用户账户(只是相对于学豆而言)

1. 用户账户明细:相对学豆充值和退款增加符号?

答:优化内容:充值及退款需显示正向“+”符号

2. 学豆详情:显示交易记录同步更新用户账户中明细记录

答:学豆在明细中展示,同时会在用户账户中明细同步显示,同时在app端学豆记录中显示

异常状态:

1. 发起了多次退款操作都是在途状态如何处理?or在途状态是否允许超过退款最大金额显示?

例如:原订单100元,第一笔退款50,第二笔退款50,第三退款50,且都是在途状态?

答:发起第一笔退款会处于冻结状态,自动扣减剩余金额;

2. 退款逻辑处理:手工发起退款,通过第三方处理->到达用户手中 显示完成? or  

理解:用户通过微信or支付宝发起付款,支付宝扣留一部分手续费,然后到我们的账号;我们退款也原路返回?中间过程中:扣除的手续费如何结算?

答:退款是直接到用户手中的,第三方扣减的手续费是由我们垫资处理的。

3. 订单叠加退款

答:同问题1一致,会自动冻结进行扣减。

附录:测试点

权益失效:权益x日失效

1. 重复退款,时间只会递减

2. x日失效时间之内再次续费:按照续费扩增的时间退款依次递减

备注 :时间时间叠加跨天影响

测试场景条件:

子订单笔数: 单笔、 多笔、

会员时效:会员失效、会员到期、会员在期、会员续费

退款次数:退款、  单次、多次、

权益类别:多学科多权益、

退款测试场景:

单笔订单单次退款

1. 单笔订单(会员有效期)单次退款场景

2. 单笔订单会员过期(失效)退款场景

3. 单笔订单会员续费场景退款场景

  备注:注意此时退款执行动作有两个地方一个是已过期的订单入口,另外一个是新续费的订单入口

单笔订单多次退款

4. 单笔订单已退过一次款,会员(会员有效期)多次退款场景

5. 单笔订单已退过一次款,会员已过期再次退款场景

6. 单笔订单已退过一次款,会员已到期后又续费,再次退款场景 ;重复退款

   备注:注意此时退款执行动作有两个地方一个是已过期的订单入口,另外一个是新续费的订单入口

7.  0会员订单  0元退款 -> 续费订单退款入口 ; 非0元订单0元退款场景。

   备注:意味着只能从非0元订单进行退款

8. 会员订单全额退款场景

分批订单累计退款场景

一. 订单分次退(0元订单场景) ——有效期

T1: 第一笔订单  7天0元  :10.01  - 10.07 ;

T2: 第二笔订单 半月卡 15元: 10:07 - 10:22 ;

解:

T1订单: 不能退,只能从第T2订单退所有 :

二. 订单分次退(非0元订单场景)——有效期

T1: 第一笔订单  7天7元  :10.01  - 10.07 ;

T2: 第二笔订单 半月卡 15元: 10:07 - 10:22 ;

解:

T1订单全额退,时间扣减7天: 10.15日

T2订单退额一半:时间扣减10天 :10.05日

三. 订单分次退(非0元订单场景)——T1失效

T1: 第一笔订单  7天7元  :10.01  - 10.07 ; —过期

T2: 第二笔订单 半月卡 15元: 10:07 - 10:22 ;

解:

只能从第二笔订单退

四. 订单分次退(非0元订单场景)——T2失效

T1: 第一笔订单  7天7元  :10.01  - 10.07 ;

T2: 第二笔订单 半月卡 15元: 10:07 - 10:22 ; —过期

解: 场景不存在 ,由于时间是递增迭代增加

H5购买、三个入口购买  增加会员权益失效:

Java 支付宝支付,退款,单笔转账到支付宝账户(支付宝订单退款)

   上一篇写到支付宝的支付,这代码copy下来就能直接用了,   我写学习文档时会经常贴 官方参数文档的案例地址, 因为我觉得 请求参数,响应参数说明 官方文档整理的很好,毕竟官方不会误导大家.

  我学一个新技术的时候最喜欢做的就是把案例代码copy到自己的项目里面跑一遍,  然后再一 一分析每段代码的作用.

  昨天忘说了 别忘了引入支付宝的SDK : 
  在这里说一下,一般接入第三方都会有第三方的SDK包,要把他们放在自己项目里我们才能接入他们的API.
  支付宝SDK下载地址: https://docs.open.alipay.com/54/103419/

         然后我们需要把这个jar包引入到所需要的地方,这里不做过多的描述。

  1.查看支付订单

  该接口提供所有支付宝支付订单的查询,商户可以通过该接口主动查询订单状态,获取这个订单的信息.

  重要参数 Out_Trade_No : 商户网站唯一订单号,也就是自己项目生成订单号      Trade_No 支付宝交易号, 是支付宝端给这个交易生成的订单交易号.
贴代码:

   

	/**
	 * 
	 * 说明:查看支付订单
	 * @param Out_Trade_No   商户网站唯一订单号
	 * @param Trade_No  支付宝交易号
	 * @return  公共响应参数 code,msg    响应参数: https://docs.open.alipay.com/api_1/alipay.trade.query
	 * @author 许奥伦
	 * @time:2018年12月11日 下午2:19:44
	 */
	@Override
	public  String queryPayment(String Out_Trade_No,String Trade_No) {      

 //填写自己创建的app的对应参数
      AlipayClient alipayClient = new DefaultAlipayClient("支付宝网关", "appid", "私钥", "json", "utf-8", "公钥","RSA2");

		AlipayTradeQueryRequest alipay_request = new AlipayTradeQueryRequest();
		 AlipayTradeQueryModel model=new AlipayTradeQueryModel();
	     model.setOutTradeNo(Out_Trade_No);
	     model.setTradeNo(Trade_No);
	     alipay_request.setBizModel(model);
	     
		try {
			AlipayTradeQueryResponse	alipay_response = alipayClient.execute(alipay_request);
			String queryPaymentStr = alipay_response.getBody();
			
		     System.out.println(queryPaymentStr);
		     return queryPaymentStr;
		} catch (AlipayApiException e) {
			e.printStackTrace();
		}
		return null;
		
	}

 会返回 订单金额,订单状态,买家支付宝账号等很多数据, 官方参数字典: https://docs.open.alipay.com/api_1/alipay.trade.query

 

  2.支付宝订单退款 

  当交易发生之后一段时间内,由于买家或者卖家的原因需要退款时,卖家可以通过退款接口将支付款退还给买家,支付宝将在收到退款请求并且验证成功之后,按照退款规则将支付款按原路退到买家帐号上。 交易超过约定时间(签约时设置的可退款时间)的订单无法进行退款 支付宝退款支持单笔交易分多次退款,多次退款需要提交原支付订单的商户订单号和设置不同的退款单号。一笔退款失败后重新提交,要采用原来的退款单号。总退款金额不能超过用户实际支付金额

 

	/**
	 * 
	 * 说明: 支付宝订单退款
	 * @param out_trade_no  订单编号
	 * @param trade_no  支付宝订单交易号
	 * @param refund_amount 退款金额 不得大于订单金额
	 * @param refund_reason 退款说明
	 * @param out_request_no 标识一次退款请求,同一笔交易多次退款需要保证唯一,如需部分退款,则此参数必传。
	 * @return  公共返回参数 code,msg,   响应参数实例: https://docs.open.alipay.com/api_1/alipay.trade.refund
	 * @author 许奥伦
	 * @time:2018年12月11日 下午2:29:13
	 */
	@Override
public String alipayRefund(String out_trade_no,
		String trade_no,
		String refund_amount,
		String refund_reason,
		String out_request_no) {
		
//填写自己创建的app的对应参数 AlipayClient alipayClient = new DefaultAlipayClient("支付宝网关", "appid", "私钥", "json", "utf-8", "公钥","RSA2");
           //订单编号 支付宝交易号不为空 if(out_trade_no!=null&& trade_no!=null) { AlipayTradeRefundRequest alipay_request = new AlipayTradeRefundRequest(); AlipayTradeRefundModel model=new AlipayTradeRefundModel(); model.setOutTradeNo(out_trade_no); model.setTradeNo(trade_no); model.setRefundAmount(refund_amount); model.setRefundReason(refund_reason); model.setOutRequestNo(out_request_no); alipay_request.setBizModel(model); try { AlipayTradeRefundResponse alipay_response = alipayClient.execute(alipay_request); String alipayRefundStr = alipay_response.getBody(); System.out.println(alipayRefundStr); return alipayRefundStr; } catch (AlipayApiException e) { e.printStackTrace(); } } return null; }

    会返回公共参数  code,msg  等状态提示你 退款成功或者退款失败  官方响应参数: https://docs.open.alipay.com/api_1/alipay.trade.refund/

个人觉得没有什么比 简洁,通俗,易懂,有注释的代码能让读者更容易看懂的了.

  然后我还接触到一个功能就是单笔转账到支付宝账户,  因为客户说 如果能直接提现到支付宝 或者微信 就暂时不做提现到银行卡的操作,  所以就直接从商户支付宝单笔转账到用户支付宝里实现了这个功能, 有时间 再贴出来.( ? 3?)技术分享图片

 









以上是关于订单退款&重复支付需求疑问点归纳整理的主要内容,如果未能解决你的问题,请参考以下文章

微信支付宝各种支付退款

九年级英语语法知识点整理归纳

RocketMQ - 基于延迟消息机制优化大量订单的定时退款扫描问题

聚合支付系统设计

聚合支付系统设计

聚合支付系统设计