支付宝月扣款签约及 personal_product_code 获取方式
结论
支付宝的月扣款通常对应“周期扣款”或类似的代扣能力。商户需要先在支付宝开放平台或商家平台申请相应产品,完成协议签约、应用绑定和必要的资质审核。
申请入口可能因商户类型或平台页面调整而不同,请以应用控制台实际显示的产品能力为准。如果控制台中没有申请入口,需要联系支付宝技术支持或商务人员,确认商户是否符合准入条件。
personal_product_code 是商户与支付宝签约后,由支付宝确定或分配的个人签约产品码。这个参数不能由应用自行生成,也不是 APPID、product_code 或用户的支付宝账号。在支付宝没有明确提供具体值的情况下,不要自行填写或猜测。
对于 alipay.trade.app.pay,普通 App 支付一般使用:
product_code=QUICK_MSECURITY_PAY
是否需要传入 personal_product_code,取决于商户实际签署的产品协议和支付宝提供的接入参数。仅开通普通 App 支付,通常并不包含月扣款能力。
月扣款能力在哪里签约
可以按以下顺序办理:
- 登录支付宝开放平台或支付宝商家平台。
- 找到准备接入月扣款的应用或商户账号。
- 在“产品能力”“能力管理”或类似入口中搜索“周期扣款”“代扣”等产品。
- 查看准入条件,提交业务场景、扣款周期、用户授权流程等材料。
- 审核通过后完成产品签约,并将该能力绑定到对应应用。
- 在产品详情、签约详情或接入配置中查看支付宝提供的产品参数。
支付宝各类产品的开放范围并不完全相同,部分代扣能力可能采用邀请制、定向开放或行业准入方式。后台搜索不到对应产品,不代表接口一定不可用。此时也不要尝试用普通支付参数绕过签约,而应向支付宝客服、开放平台技术支持或负责该商户的商务人员确认。
用户还需要单独签署扣款协议。商户开通产品能力,只表示具备接入资格,并不意味着可以直接向用户发起周期扣款。
personal_product_code 如何获取
personal_product_code 是商户与支付宝完成特定产品签约后,对应的个人签约产品标识。
一般可以通过以下渠道确认:
- 支付宝开放平台或商家平台中的产品签约详情;
- 产品开通成功通知、接入邮件或签约材料;
- 支付宝技术支持或商务人员提供的接入参数;
- 商户现有接入系统的生产环境配置。使用前应核对其所属商户、应用和产品,不能直接复用其他业务的值。
使用该参数时需要注意:
- 不能通过算法计算;
- 不能根据
APPID推导; - 不能用
QUICK_MSECURITY_PAY随意替代; - 沙箱环境和生产环境的参数可能不同;
- 不能直接复用其他商户、应用或产品的值。
如果签约详情中只有普通产品码,没有显示 personal_product_code,应向支付宝确认当前签约产品是否需要该字段。不要为了通过参数校验而填写任意字符串。
在 alipay.trade.app.pay 中的含义
alipay.trade.app.pay 是 App 支付下单接口。普通 App 支付场景中的销售产品码通常为:
{
"product_code": "QUICK_MSECURITY_PAY"
}
product_code、personal_product_code 和 app_id 的含义不同:
| 参数 | 常见含义 | 获取方式 |
|---|---|---|
product_code | 当前交易使用的支付宝销售产品码 | 根据接口文档和已开通产品填写;普通 App 支付通常为 QUICK_MSECURITY_PAY |
personal_product_code | 商户与支付宝针对特定产品签约后确定的个人签约产品码 | 由支付宝签约配置、产品详情、技术支持或商务渠道提供 |
app_id | 支付宝开放平台应用标识 | 创建应用后由开放平台分配 |
如果当前接口文档、SDK 模型或商户签约说明没有要求传入 personal_product_code,不要自行添加。支付宝接口是否接受该字段,还可能受到网关版本、SDK 版本和已签约产品的影响,请以当前开放平台接口文档及商户签约结果为准。
App 支付请求示例
普通 App 支付请求的业务参数可以写成:
{
"out_trade_no": "ORDER_202609090001",
"total_amount": "99.00",
"subject": "会员服务",
"product_code": "QUICK_MSECURITY_PAY"
}
Java SDK 示例:
AlipayTradeAppPayRequest request = new AlipayTradeAppPayRequest();
AlipayTradeAppPayModel model = new AlipayTradeAppPayModel();
model.setOutTradeNo("ORDER_202609090001");
model.setTotalAmount("99.00");
model.setSubject("会员服务");
model.setProductCode("QUICK_MSECURITY_PAY");
request.setBizModel(model);
request.setNotifyUrl("https://example.com/alipay/notify");
AlipayTradeAppPayResponse response = alipayClient.sdkExecute(request);
String orderString = response.getBody();
这段代码只演示普通 App 支付下单,并未实现月扣款。周期扣款通常还涉及用户协议签约、协议号保存、扣款规则校验、后续扣款调用、异步通知处理和解约管理,需要使用签约产品指定的接口完成。
如果支付宝明确要求某个请求传入 personal_product_code,应填写其提供的真实签约值,例如:
{
"personal_product_code": "支付宝实际提供的签约产品码"
}
该字段没有通用固定值,具体内容取决于商户的实际签约结果。
常见问题排查
遇到“产品未签约”“无权使用该产品”或“产品码不匹配”等错误时,可以依次检查:
- 发起请求的
app_id是否绑定了已签约商户。 - 商户 PID、应用和签约产品是否属于同一主体。
- 月扣款产品是否已审核通过并生效。
- 当前请求使用的是沙箱环境还是生产环境。
product_code是否符合目标接口要求。personal_product_code是否确实由支付宝提供。- 是否误将用户签约协议号当作
personal_product_code。 - SDK 是否支持该字段,以及参数是否已正确序列化到请求中。
月扣款需要用户授权。即使商户已经取得 personal_product_code,也不能省略用户授权、签约确认和解约机制。扣款周期、金额范围、通知方式及退款处理,都应按照实际签约协议和支付宝当前规则执行。
备注:内容仅供参考。
