PC端 支付宝支付

1.下载支付官网提供demo

	毕竟用公家的东西,所有熟读支付宝官网上的API与demo是顺利完成调用的条件!!!

	https://doc.open.alipay.com/docs/doc.htm?treeId=193&articleId=103419&docType=1

2.支付宝支付成功/退款–异步回调

特别注意:
支付宝退款回调
根据退款的行为可分为全额退款和部分退款。
全额退款,交易状态变为TRADE_CLOSED(交易关闭)。 // 部分退款,交易状态仍为TRADE_SUCCESS(交易成功)。
(1)全额退款:只有App支付和手机网站支付交易状态变为TRADE_CLOSED(交易关闭)会触发异步通知。
(2)部分退款:当面付、电脑网站支付、App支付和手机网站支付交易状态为TRADE_SUCCESS(交易成功)都会触发异步通知。
详情: https://opendocs.alipay.com/support/01raw4?ant_source=opendoc_recommend

 /**
     * 支付宝支付/退款-订单回调接口
     * @param request
     * @return
     */
    @ApiOperation(value = "支付宝支付-订单回调接口")
    @RequestMapping(value="/zfbPay/async", produces="text/html;charset=utf-8")
    @ResponseBody
    public String zfbPayAsyncNotify(HttpServletRequest request) {
    
    
        return stuPlatNotifyService.zfbPayAsyncNotify(request);
    }
//支付宝支付回调 验签 核实订单是否已支付
@Override
public String zfbPayAsyncNotify(HttpServletRequest request) {
    
    
	try {
    
    
		Map<String, String> params = getMapParams(request);
		//log.info(">>>----------------zfbPayAsyncNotify---------------params:{}", params);
		// 对验签结果进行处理
		boolean flag = AlipaySignature.rsaCheckV1(params, AlipayConfig.alipay_public_key, AlipayConfig.charset, "RSA2");
		if (flag) {
    
    
			String outTradeNo = params.get("out_trade_no");      //商户订单号
			//先判断是否存out_biz_no 不存在则为-支付缴费 存在则为-退款
			if(!params.containsKey("out_biz_no")) {
    
    
				//查询支付宝 支付订单是否正常
				JSONObject payJson = AlipayUtils.tradeQueryDetail(outTradeNo);
				if(null!=payJson && null!=payJson.getString("trade_status")){
    
    
					String tradeStatus = payJson.getString("trade_status");
					boolean zfbBool = tradeStatus.equals(AlipayConstants.SUCCESS);
					if (zfbBool) {
    
    
						//String tradeNo = null != payJson.getString("trade_no") ? payJson.getString("trade_no") : null;
						//String sendPayDate = null != payJson.getString("send_pay_date") ? payJson.getString("send_pay_date") : null;
						//在这里处理支付成功的订单: 修改交易表状态,支付成功
						//update status pay success
						return "success";
					}else{
    
    
						//update status pay fail
						log.error("-zfbPayAsyncNotify-tradeQuery-fail!--"+payJson.get("msg"));
					}
				}else{
    
    
					log.error("-zfbPayAsyncNotify-tradeQuery-error!--"+payJson.toString());
				}
			}else{
    
    
				//查询支付宝 退款订单是否正常
				String outRequestNo = params.get("out_biz_no");
				AlipayTradeFastpayRefundQueryResponse alipayRefund = AlipayUtils.refundQueryDetail(outTradeNo, outRequestNo);
				if(alipayRefund.isSuccess()) {
    
    
					String tradeNo = alipayRefund.getTradeNo();
					String refundTime = DateFormatUtils.getDateZfb(params.get("gmt_refund"));  //gmt_refund  refund_time
					//在这里处理退款成功的订单: 修改交易表状态,退款成功
					//update status refund success
					return "success";
				}else{
    
    
					//update status refund fail
					log.error("-zfbPayAsyncNotify-refundQuery-error!--"+alipayRefund.getMsg());
				}
			}
		}else{
    
    
			log.error("---zfbPayAsyncNotify--支付宝支付回调-验签失败:{}",params);
		}
	} catch (AlipayApiException e) {
    
    
		log.error("-------zfbPayAsyncNotify-----------error----"+e.getMessage());
	}
	return "fail";
}

3 为何部分退款会触发TRADE_SUCCESS异步通知

https://opendocs.alipay.com/support/01rawh

在这里插入图片描述

おすすめ

転載: blog.csdn.net/qq_16771097/article/details/113049227