支付宝小程序如何签约预授权?
明确结论
没有公司官网,或者官网尚未设置支付页面,不一定会影响支付宝小程序签约预授权。审核通常更关注预授权场景是否真实、完整并且可以核验,而不是官网有没有支付页。
申请时可以将支付宝小程序作为业务载体,提交小程序名称、AppID、业务页面路径、场景截图、操作流程以及冻结和解冻规则等材料。如果申请页面必须填写网站地址,应填写真实有效的企业官网或业务说明页。不要填写虚假网址或无关页面,也不建议为了通过审核临时制作虚假的支付页面。
预授权产品的准入范围、材料清单和申请入口可能会根据行业、主体类型以及支付宝开放平台规则发生调整,最终以商家后台显示的要求和审核意见为准。
预授权签约通常需要哪些资料
企业申请时,一般需要准备:
- 企业营业执照及统一社会信用代码
- 法定代表人或经办人身份信息
- 支付宝商家账号信息
- 支付宝小程序名称、AppID 和主体信息
- 小程序首页及预授权业务页面路径
- 预授权业务场景说明
- 用户操作流程截图或录屏
- 冻结金额的计算方式和范围
- 冻结、扣款、解冻及退款规则
- 服务协议、隐私政策和用户授权说明
- 客服电话、投诉渠道及售后处理流程
- 商品、设备或服务的履约证明材料
- 特殊行业所需的经营许可证或行业资质
如果小程序尚未正式上线,可能还要提供体验版、测试账号或录屏,方便审核人员完整查看确认授权、冻结资金、履约、结算或解冻的整个流程。
具体补充材料会因业务而异。租赁业务可能需要提供租赁协议、商品照片和归还规则;酒店业务可能需要预订及取消规则;充电、停车等场景则需要说明设备情况、计费方式以及异常订单的处理办法。
没有官网时如何申请
1. 使用小程序证明业务场景
在申请说明中写明,所有业务都在支付宝小程序内完成,公司官网暂不承担交易功能。同时提供:
- 小程序名称和 AppID
- 已上线版本或体验版本
- 预授权页面的访问路径
- 测试账号及必要的测试说明
- 完整业务流程截图或录屏
- 用户协议、预授权协议和隐私政策页面
这些材料应让审核人员看清用户为什么需要冻结资金、冻结金额如何确定、何时扣款,以及剩余金额何时解冻。
2. 补齐小程序内的业务页面
即使没有官网,小程序内也应形成相对完整的交易闭环,至少包含:
- 服务或商品介绍
- 计费标准
- 预授权金额说明
- 用户主动确认授权的页面
- 订单详情和授权状态
- 实际消费金额
- 解冻或退款状态
- 客服与投诉入口
- 用户协议及隐私政策
页面不能只有一个“立即授权”按钮。如果缺少业务说明、计费依据或解冻规则,审核人员很可能认为场景不完整。
3. 如实填写网站字段
如果签约页面要求填写“网站地址”:
- 优先填写真实的企业官网或业务介绍页;
- 没有官网时,查看该字段能否填写小程序相关信息;
- 如果该字段必填,但不接受小程序路径,应通过开放平台工单或商家客服确认可以使用哪些替代材料;
- 如果确实需要网站,可以建设真实的企业及业务说明页,并按照适用法规完成备案,配置隐私政策和联系方式。
官网不一定需要直接提供支付功能,但页面内容必须与申请主体和预授权业务相符。空白网站、建设中的页面、无法访问的地址或与业务无关的网址,通常不能用于证明业务场景。
建议的申请说明
场景说明可以参考以下结构:
我司通过支付宝小程序“某某服务”向用户提供设备租赁服务,业务不通过公司官网进行交易。
用户选择设备后,小程序会明确展示租赁单价、预计使用时间、预授权金额、扣款规则及解冻条件。用户确认后发起支付宝资金预授权。服务结束时,系统根据实际订单金额进行结算,未使用的授权金额及时解冻。
小程序信息:
AppID:2021xxxxxxxxxxxx
业务页面路径:pages/order/confirm
订单页面路径:pages/order/detail
预授权金额:根据设备类型冻结 100~500 元
结算方式:服务结束后按实际费用结算
解冻规则:订单正常结束或取消后发起解冻
异常处理:授权失败不创建有效订单;解冻失败进入重试和人工处理流程
客服电话:400-xxx-xxxx
示例中的金额、路径和业务规则必须替换为真实信息。
接入流程
第一步:确认业务是否适用预授权
预授权适用于需要先冻结一定金额,并在履约后结算的业务,例如租赁、住宿、停车以及其他需要资金担保的场景。
普通商品销售不能只为了“延迟付款”而使用预授权。业务能否准入,以支付宝当前开放的行业范围和最终审核结果为准。
第二步:完成小程序主体和商家信息认证
需要确认以下主体之间的关系清楚:
- 小程序主体
- 支付宝商家账号主体
- 签约主体
- 实际提供服务的主体
如果主体不一致,应准备授权证明、合作证明或服务关系证明。无法说明主体关系,可能会影响产品签约和接口权限的开通。
第三步:申请资金预授权产品
进入支付宝开放平台或商家平台,在对应应用下找到资金预授权相关产品并提交申请。后台入口的名称可能发生调整,请以当前控制台显示的内容为准。
提交申请后,要及时查看审核意见。如果审核提示“网站没有支付页面”,可以说明交易实际发生在支付宝小程序内,并补充页面路径、截图、录屏和测试方式。仅回复“没有官网”通常不足以说明业务场景。
第四步:配置密钥和回调地址
签约完成并开通接口权限后,需要配置:
- 应用公钥或应用公钥证书
- 支付宝公钥或支付宝公钥证书
- 服务端异步通知地址
- 应用网关
- RSA2 签名方式
私钥必须保存在服务端,不能写入小程序前端代码。
第五步:服务端创建预授权订单
线上预授权常见接口包括:
alipay.fund.auth.order.app.freeze
以下代码只展示典型调用结构。字段能否使用、是否需要其他参数,应以当前接口文档和已经签约的产品为准。
AlipayClient alipayClient = new DefaultAlipayClient(
"https://openapi.alipay.com/gateway.do",
appId,
appPrivateKey,
"json",
"UTF-8",
alipayPublicKey,
"RSA2"
);
AlipayFundAuthOrderAppFreezeRequest request =
new AlipayFundAuthOrderAppFreezeRequest();
request.setNotifyUrl("https://api.example.com/alipay/auth/notify");
request.setBizContent("""
{
"out_order_no": "AUTH202609130001",
"out_request_no": "REQ202609130001",
"order_title": "设备租赁预授权",
"amount": "200.00",
"product_code": "PRE_AUTH_ONLINE"
}
""");
AlipayFundAuthOrderAppFreezeResponse response =
alipayClient.execute(request);
if (response.isSuccess()) {
String orderStr = response.getOrderStr();
// 将 orderStr 返回给支付宝小程序,由前端拉起授权。
} else {
// 记录错误码和错误信息,避免直接向用户暴露敏感数据。
System.out.println(response.getSubCode());
System.out.println(response.getSubMsg());
}
订单号必须由服务端生成,并确保全局唯一。金额也应由服务端根据订单计算,不能直接采用前端传入的数值。
第六步:小程序拉起授权
服务端成功创建授权订单后,将返回的订单字符串交给小程序,由小程序调用支付宝收银能力。具体使用哪个前端 API、传入哪些参数,应以当前支付宝小程序文档为准。不要自行拼接或修改服务端返回的签名字符串。
示意代码如下:
my.tradePay({
orderStr: serverResult.orderStr,
success: (result) => {
console.log('授权流程返回:', result);
},
fail: (error) => {
console.error('授权流程失败:', error);
}
});
前端触发成功回调,只能说明客户端流程已经返回,不能单独作为资金冻结成功的依据。服务端还要通过接口查询结果,或者验签后的异步通知,确认最终状态。
第七步:履约后结算或解冻
订单取消、服务结束或不再需要资金担保时,应根据实际业务结果完成结算或解冻。常见的解冻接口是:
alipay.fund.auth.order.unfreeze
示意代码:
AlipayFundAuthOrderUnfreezeRequest request =
new AlipayFundAuthOrderUnfreezeRequest();
request.setBizContent("""
{
"auth_no": "2026xxxxxxxxxxxx",
"out_request_no": "UNFREEZE202609130001",
"amount": "200.00",
"remark": "用户取消订单,解除资金授权"
}
""");
AlipayFundAuthOrderUnfreezeResponse response =
alipayClient.execute(request);
if (!response.isSuccess()) {
System.out.println(response.getSubCode());
System.out.println(response.getSubMsg());
}
实际使用的结算接口由签约产品和业务模式决定,不能只根据示例中的接口名称判断。接入前,应核对当前官方接口文档以及商家后台已经开通的能力。
审核容易出现的问题
场景描述过于简单
只写“用于租赁”或“用于押金”通常不够。申请材料还要说明具体服务内容、冻结金额、计费方式、履约过程和解冻时间。
页面与申请内容不一致
如果申请的是设备租赁,但小程序页面只有商城或企业介绍,审核人员就无法确认实际业务场景。提交前应确保体验版页面可以完整演示预授权流程。
将预授权写成押金
预授权是对资金进行授权冻结,并不等同于直接收取押金。页面文案要准确描述资金状态,避免用户误以为资金已经支付给商家。
缺少主动确认
不能在用户不知情的情况下自动发起授权。发起授权前,应明确展示金额、用途、期限和解除条件,并让用户主动确认。
解冻机制不完整
系统要能够处理正常完成、用户取消、超时关闭、重复通知和接口异常等情况。解冻失败后,应进入自动重试、告警和人工处理流程。
接入时的注意事项
- 生产环境与沙箱环境的网关、密钥和 AppID 应分开管理。
- 所有异步通知都必须验签,同时校验 AppID、金额、订单号和业务状态。
- 同一通知可能重复发送,业务处理必须具备幂等性。
- 不能根据前端回调直接发货、开锁或确认履约。
- 授权订单号、请求号和解冻请求号应分别设计,并保证全局唯一。
- 使用授权资金时,不能超出用户确认的金额和用途。
- 页面应明确说明,冻结金额不等于最终消费金额。
- 服务完成后应及时结算或解冻,不能无理由长期占用授权额度。
- 私钥、签名原文和完整的用户敏感信息不能输出到前端或普通日志。
- 上线前应测试授权成功、授权取消、重复请求、超时、部分结算、全部解冻和解冻失败等场景。
没有公司官网支付页面时,可以先完善支付宝小程序内真实、完整的业务闭环,再用页面路径、截图、录屏和测试账号证明预授权场景。如果后台确实将官网设为硬性准入条件,应先向支付宝确认能否提交替代材料,或者补建合规的业务说明页,然后再提交审核。
备注:内容仅供参考。
