PAYATHON 2026

支付宝电脑网站支付2.0成功后未跳转及审核驳回问题

支付阿杰

结论

订单支付成功后没有返回商户页面,通常不会影响交易结果。在支付宝电脑网站支付中,同步地址 return_url 只用于浏览器跳转,不能作为可靠的支付结果通知。商户应以 notify_url 收到的异步通知为准处理订单。

如果页面一直停留在“付款成功,3秒后自动返回商户”,可以重点检查:

  1. 调用 alipay.trade.page.pay 时是否传入了 return_url,而不是只在本地配置或后台页面中填写了地址。
  2. return_url 是否为公网可以访问的完整 URL。
  3. 返回地址是否存在响应超时、重定向循环、证书错误,或被安全策略拦截。
  4. 支付是否在 iframe、内嵌浏览器等可能拦截跳转的环境中完成。
  5. 支付请求是否使用了错误的应用、网关或环境配置。

审核被驳回的具体原因无法仅凭支付截图判断,应查看支付宝商家平台显示的驳回理由。常见原因包括网站无法访问、页面内容不完整、经营内容与申请类目不符,或者网站没有可供验证的真实交易流程。

先确认 return_url 是否进入支付请求

电脑网站支付接口的同步返回地址需要通过请求对象设置。例如使用支付宝 .NET SDK:

using Aop.Api;
using Aop.Api.Request;
using Aop.Api.Response;

IAopClient client = new DefaultAopClient(
    "https://openapi.alipay.com/gateway.do",
    appId,
    merchantPrivateKey,
    "json",
    "1.0",
    "RSA2",
    alipayPublicKey,
    "UTF-8",
    false
);

AlipayTradePagePayRequest request = new AlipayTradePagePayRequest();

request.SetReturnUrl(
    "https://www.xingwp.cn/alipay/Return.aspx"
);

request.SetNotifyUrl(
    "https://www.xingwp.cn/alipay/Notify.aspx"
);

request.BizContent = @"{
    ""out_trade_no"": ""ORDER_202609090001"",
    ""product_code"": ""FAST_INSTANT_TRADE_PAY"",
    ""total_amount"": ""0.01"",
    ""subject"": ""测试订单""
}";

AlipayTradePagePayResponse response = client.PageExecute(request);

Response.ContentType = "text/html; charset=utf-8";
Response.Write(response.Body);

仅把地址写入配置文件,并不会自动将其加入接口参数。程序中必须执行:

request.SetReturnUrl("https://www.xingwp.cn/alipay/Return.aspx");
request.SetNotifyUrl("https://www.xingwp.cn/alipay/Notify.aspx");

建议记录最终提交给支付宝网关的请求参数,确认其中包含经过 URL 编码的 return_url 和 notify_url。不要在日志中记录应用私钥等敏感信息。

检查同步返回地址

使用未登录服务器、没有携带 Cookie 的普通浏览器直接访问同步地址,例如:

https://www.xingwp.cn/alipay/Return.aspx

该地址需要满足以下条件:

  • 可以从公网直接访问,不能使用 localhost、内网 IP 或只能从开发机访问的地址。
  • 不依赖用户登录,也不强制要求特定 Cookie。
  • HTTPS 证书有效,域名与证书匹配,证书链完整。
  • HTTP 与 HTTPS 之间不存在循环跳转。
  • 页面可以及时响应,不会在加载时长时间阻塞。
  • 防火墙、WAF 或 CDN 不会拦截支付宝附带的查询参数。
  • URL 完整,包含 http:// 或 https://。
  • 地址中不要包含未经正确编码的中文、空格或特殊字符。

如果 Return.aspx 收到参数后还会跳转到其他页面,也要确认跳转目标是否正确。在 ASP.NET 中,可以先记录收到的查询参数,再执行后续跳转:

protected void Page_Load(object sender, EventArgs e)
{
    if (IsPostBack)
    {
        return;
    }

    // 先完成支付宝同步返回参数的验签。
    // 验签成功后,可以根据 out_trade_no 查询本地订单。
    // 不要仅凭 trade_status 或页面参数直接修改订单状态。

    Response.Redirect("/Order/PayResult.aspx", false);
    Context.ApplicationInstance.CompleteRequest();
}

同步返回不能作为到账依据

return_url 依赖用户浏览器完成跳转。用户关闭页面、网络中断、浏览器限制或页面脚本异常,都可能导致跳转没有执行。因此,即使同步跳转正常,也不能直接在同步页面中把订单标记为已支付。

正确的处理流程如下:

  1. 商户创建订单并调用 alipay.trade.page.pay。
  2. 用户在支付宝页面完成付款。
  3. 支付宝服务器向 notify_url 发送异步通知。
  4. 商户对通知参数进行 RSA2 验签。
  5. 核对 app_id、seller_id、out_trade_no、total_amount 等重要字段。
  6. 确认交易状态符合业务要求后,以幂等方式更新订单。
  7. 返回纯文本 success。
  8. 同步结果页只用于展示,可以根据订单号查询本地订单状态。

下面是异步通知的处理示例。具体验签方法应以项目实际使用的支付宝 SDK 版本为准:

protected void Page_Load(object sender, EventArgs e)
{
    var parameters = new Dictionary<string, string>();

    foreach (string key in Request.Form.AllKeys)
    {
        parameters[key] = Request.Form[key];
    }

    bool signVerified = AlipaySignature.RSACheckV1(
        parameters,
        alipayPublicKey,
        "UTF-8",
        "RSA2",
        false
    );

    if (!signVerified)
    {
        Response.Write("failure");
        return;
    }

    string appId = parameters.GetValueOrDefault("app_id");
    string sellerId = parameters.GetValueOrDefault("seller_id");
    string outTradeNo = parameters.GetValueOrDefault("out_trade_no");
    string tradeStatus = parameters.GetValueOrDefault("trade_status");
    string totalAmount = parameters.GetValueOrDefault("total_amount");

    // 必须核对 appId、sellerId、订单金额和本地订单信息。
    bool orderMatched = CheckOrder(
        appId,
        sellerId,
        outTradeNo,
        totalAmount
    );

    if (!orderMatched)
    {
        Response.Write("failure");
        return;
    }

    if (tradeStatus == "TRADE_SUCCESS" ||
        tradeStatus == "TRADE_FINISHED")
    {
        // 必须做幂等处理,避免重复通知造成重复发货或重复记账。
        MarkOrderPaid(outTradeNo);
    }

    Response.Write("success");
}

notify_url 必须能被支付宝服务器直接访问,不能要求登录,也不应返回完整的 HTML 页面。处理成功后应输出:

success

排查“停留在成功页”的具体方法

可以按以下顺序排查:

1. 核对实际请求

检查最终生成的支付宝网关表单或请求日志,确认其中包含:

method=alipay.trade.page.pay
return_url=https://www.xingwp.cn/alipay/Return.aspx
notify_url=https://www.xingwp.cn/alipay/Notify.aspx
product_code=FAST_INSTANT_TRADE_PAY

如果请求中没有 return_url,应修改接口调用代码,而不是只修改后台或配置文件。

2. 检查访问日志

查看 Web 服务器日志,确认是否出现了对 Return.aspx 的请求:

  • 完全没有请求:支付请求可能没有携带 return_url,浏览器可能没有执行跳转,或者跳转被拦截。
  • 已收到请求,但返回 4xx 或 5xx:检查应用异常、路由、权限和安全规则。
  • 返回 301 或 302:继续检查跳转目标,排除循环重定向。
  • 返回 200,但用户仍看不到页面:检查页面脚本、iframe、反向代理和浏览器控制台错误。

3. 使用普通浏览器测试

尽量使用桌面版 Chrome、Edge 等常规浏览器测试,不要在 iframe、WebView、远程调试容器或限制页面导航的内嵌环境中完成支付。

如果付款入口位于 iframe 中,建议在顶层窗口打开支付页:

window.top.location.href = payUrl;

如果接口返回的是自动提交表单,应将支付宝 SDK 返回的 HTML 直接输出给浏览器,不要把它当作普通字符串嵌入可能受限的 iframe。

4. 核对环境

正式网关与沙箱环境的应用信息不能混用,需要同时核对:

  • 网关地址;
  • app_id;
  • 商户私钥;
  • 支付宝公钥;
  • 签名类型 RSA2;
  • 应用对应的商户账号;
  • 实际部署所使用的配置文件。

查询订单显示支付成功,只能说明交易已经完成,不能说明浏览器的同步跳转链路正常。

审核被驳回的常见原因

没有具体的驳回文案,就无法判断此次审核被拒的唯一原因。应先进入支付宝商家平台或开放平台查看审核详情,再根据提示逐项处理。申请电脑网站支付时,通常需要检查:

  • 提交的网站能否从公网稳定访问;
  • 域名、网站主体与申请主体的信息是否一致,或者是否具有合理的授权关系;
  • 网站是否只有测试页、空白页或简单的付款按钮;
  • 商品或服务介绍、价格与下单流程是否完整;
  • 用户是否可以实际完成注册、选购、下单和支付;
  • 页面是否包含必要的商户信息、联系方式、服务说明和退款规则;
  • 实际经营内容是否符合申请的行业类目;
  • 网站是否存在明显报错、失效链接或证书安全警告;
  • 如果审核人员需要登录,申请材料中是否提供了可用的测试账号;
  • 申请材料、网站截图与线上实际页面是否一致;
  • 所售商品或服务是否属于需要额外资质或受限制的范围。

如果当前地址只是接口演示页或技术测试页,没有完整的业务内容,审核人员可能无法确认真实经营场景。建议补充首页、商品详情、订单确认、支付结果、联系方式、服务协议和退款说明,并保证审核期间网站始终可以正常访问。

注意事项

  • return_url 没有跳转,不代表支付失败。
  • notify_url 与 return_url 的用途不同,不能相互替代。
  • 同步返回和异步返回的所有参数都需要验签。
  • 订单金额、商户身份和订单号必须与本地数据核对。
  • 支付宝可能重复发送异步通知,因此订单更新必须具备幂等性。
  • 不要仅凭浏览器显示的“付款成功”文字直接发货。
  • 如果暂时没有收到异步通知,可以调用 alipay.trade.query 主动查询,但不能因此忽略异步通知的验签。
  • 审核问题应以平台显示的具体驳回理由为准。支付跳转异常与产品审核被驳回未必是同一个问题。

备注:内容仅供参考。