PAYATHON 2026

内网自助设备能否申请支付宝手机H5网站支付

支付老李

结论

技术上可以使用支付宝手机网站支付,但申请能否通过,要看支付宝对商户资质、经营场景和网站内容的实际审核结果。

自助设备位于内网并不会直接影响接入。支付请求、支付页面和异步通知都可以由公网后台处理。自助设备负责生成订单二维码,客户完成支付后,再通过确认码或其他方式核验支付结果。

但如果跳转页面只显示”姓名、费用、立即支付”,很难充分说明实际经营内容和交易标的,可能无法通过手机网站支付的准入审核。建议将其完善为可公开访问的业务和订单页面,清楚展示商户信息、服务或商品名称、订单金额、订单编号、退款规则和客服说明等内容。是否符合准入要求,最终以支付宝开放平台的审核结果为准。

推荐的业务流程

系统可以分为三个部分:

  1. 内网自助设备
  2. 可从互联网访问的业务后台
  3. 支付宝支付系统

具体流程可以这样设计:

  1. 自助设备在本地生成业务订单。
  2. 设备通过允许的网络通道、人工同步机制或其他安全方式,将订单提交给公网后台。
  3. 公网后台为订单生成一个不可预测的访问令牌。
  4. 自助设备展示包含公网订单地址的二维码,例如:
https://pay.example.com/order/8d1f6d0f8af44961992b07ce72d66a4f
  1. 客户扫码进入订单详情页,核对服务名称、付款金额和商户信息。
  2. 客户点击”立即支付”,后台调用支付宝手机网站支付接口。
  3. 支付宝将支付结果异步通知给公网后台。
  4. 后台完成验签,并主动查询订单状态。确认支付成功后,生成一次性确认码。
  5. 客户在自助设备上输入确认码,设备通过本地数据、安全同步数据或受控接口完成核验。

如果自助设备完全不能与公网后台通信,确认码就必须支持离线验证,否则设备无法判断订单是否已经支付。

支付页面应展示哪些内容

网站不必做成完整的网上商城,但要让审核人员和客户看清商户经营什么,以及当前订单购买的是什么。页面建议至少包含:

  • 商户名称和经营主体信息
  • 服务或商品名称
  • 订单编号
  • 应付金额
  • 订单创建时间和有效期
  • 收款用途或服务说明
  • 客服联系方式
  • 退款、取消或售后规则
  • 隐私政策及必要的用户协议
  • “立即支付”按钮

例如,页面不应只显示:

姓名:张三
费用:100 元

更合适的订单信息是:

服务项目:自助体检服务
订单编号:S202609090001
服务对象:张**
应付金额:100.00 元
订单有效期:2026-09-09 15:30
收款方:某某科技有限公司

不要把姓名、证件号、手机号等个人信息直接写入二维码 URL,也不宜在页面上完整展示。二维码只应包含随机订单令牌,具体订单信息由服务器根据令牌查询。

手机网站支付调用示例

手机网站支付通常由服务端调用 alipay.trade.wap.pay。下面的示例只保留关键结构,实际参数和 SDK 用法应以支付宝开放平台当前文档及所用 SDK 版本为准。

AlipayTradeWapPayRequest request = new AlipayTradeWapPayRequest();

request.setReturnUrl("https://pay.example.com/payment/return");
request.setNotifyUrl("https://pay.example.com/payment/notify");

AlipayTradeWapPayModel model = new AlipayTradeWapPayModel();
model.setOutTradeNo("S202609090001");
model.setTotalAmount("100.00");
model.setSubject("自助体检服务");
model.setProductCode("QUICK_WAP_WAY");

request.setBizModel(model);

AlipayTradeWapPayResponse response = alipayClient.pageExecute(request);

if (response.isSuccess()) {
    String paymentForm = response.getBody();
    // 将 paymentForm 返回给手机页面,由浏览器提交到支付宝收银台
}

支付金额和商品名称必须由服务端根据订单数据生成,不能直接采用手机页面提交的金额。

异步通知处理

不能根据手机端的跳转结果判断支付是否成功。return_url 只用于向客户展示结果页面,实际支付结果应以 notify_url 的验签结果为准,必要时还要主动查询订单。

处理异步通知时,至少要检查:

  • 通知签名是否合法
  • app_id 是否属于当前商户应用
  • out_trade_no 是否存在
  • total_amount 是否与本地订单一致
  • seller_id 或收款主体是否正确
  • 订单是否已经处理
  • trade_status 是否符合成功条件

示意代码如下:

Map<String, String> params = getNotifyParams(request);

boolean valid = AlipaySignature.rsaCheckV1(
    params,
    alipayPublicKey,
    "UTF-8",
    "RSA2"
);

if (!valid) {
    return "failure";
}

Order order = orderService.findByOrderNo(params.get("out_trade_no"));
if (order == null) {
    return "failure";
}

if (!order.getAmount().toPlainString().equals(params.get("total_amount"))) {
    return "failure";
}

String tradeStatus = params.get("trade_status");
if ("TRADE_SUCCESS".equals(tradeStatus)
        || "TRADE_FINISHED".equals(tradeStatus)) {
    orderService.markPaidIdempotently(
        order.getOrderNo(),
        params.get("trade_no")
    );
}

return "success";

支付宝可能重复发送异步通知,因此订单更新必须具备幂等性。重复收到通知时,不能重复生成确认码、发放服务或记账。

确认码的设计

如果自助设备能够通过受控方式查询公网后台,建议使用订单号和随机令牌查询支付状态,不必让客户手工输入短确认码。

如果设备必须完全离线,可以使用带数字签名的确认数据。后台生成订单摘要后,使用私钥签名;设备预置公钥,在本地验证签名。二维码或确认数据可以包含:

{
  "order_no": "S202609090001",
  "amount": "100.00",
  "paid_at": 1788937200,
  "expires_at": 1788939000,
  "nonce": "f8c76f57bd944dd8"
}

后台随后对规范化的数据进行数字签名。设备验证时还要检查:

  • 签名是否合法
  • 订单号是否与当前业务一致
  • 金额是否一致
  • 确认数据是否过期
  • nonce 是否已经使用
  • 当前订单是否已经核销

不建议把四位或六位随机数字直接作为确认码。短码容易被猜中,也可能发生碰撞。如果业务必须使用短码,应限制尝试次数,设置较短的有效期,并结合订单号、设备编号等信息进行校验。

还需要解决的关键问题

自助设备如何生成公网订单

如果设备完全不能访问互联网,就无法实时通知公网后台创建订单。因此,必须先确定订单数据如何进入公网系统,例如:

  • 为设备开放仅能访问指定业务网关的受控通道
  • 通过内外网隔离交换系统同步订单
  • 预先生成可使用的订单凭证
  • 由另一个具备联网能力的业务系统创建订单

如果不存在任何数据交换方式,公网后台就无法识别设备刚刚创建的订单,也无法安全生成对应的支付页面。

二维码不能携带敏感信息

不要使用下面这种地址:

https://pay.example.com/pay?name=张三&idCard=...&amount=100

应使用不可预测、可过期且可撤销的随机令牌:

https://pay.example.com/order/8d1f6d0f8af44961992b07ce72d66a4f

后台根据令牌读取订单信息。令牌要设置有效期,并在订单支付完成或取消后失效。

网站必须能从公网正常访问

支付页面、return_url 和 notify_url 都应部署在稳定的公网服务上。通常还需要配置 HTTPS、有效的域名证书,以及与经营主体相符的网站信息。

备案、域名归属和页面审核要求可能会因主体类型、地区和支付宝产品政策而变化。提交申请前,应查看支付宝开放平台当时的规则。

申请接入时的建议

申请材料应完整说明”线下自助设备下单、客户通过手机完成付款”这一实际业务场景,并提供:

  • 自助设备照片或操作流程
  • 二维码扫码页面
  • 完整订单详情页
  • 支付成功页
  • 实际提供的服务或商品说明
  • 商户资质和经营范围
  • 客服及售后规则
  • 内网设备与公网支付后台的系统架构说明

如果现有页面只是一个没有业务说明的支付跳转页,建议完善后再提交审核。也可以先向支付宝开放平台确认,该场景适合手机网站支付,还是更适合当面付等线下收款产品。产品选择既要考虑能否调起支付宝,也要符合实际交易场景和支付宝当前的准入政策。

这套方案在系统架构上可行,但只显示”姓名、费用和支付按钮”的页面有明显的审核风险。申请前应补全经营内容、订单信息和安全核验机制,使页面与手机网站支付的使用场景相符。

备注:内容仅供参考。