PAYATHON 2026

服务商帮商家签约当面付后如何配置交易传参获取返佣?

支付老李

明确结论

“交易传参”不是支付宝“签约助手”中的配置项。服务商系统调用支付宝交易接口时,需要为每笔交易提交相应参数。

如果商家直接使用“签约助手-当面付-查看二维码”收款,交易会通过支付宝官方二维码发起,服务商无法为该二维码附加服务商标识。这类交易通常不能按照服务商通过开发接口发起的交易来归集作业数据或计算返佣。

返佣政策要求交易携带服务商 PID 时,一般需要由服务商调用 alipay.trade.precreate 接口创建订单二维码,并在 extend_params 中传入:

{
  "sys_service_provider_id": "服务商PID"
}

二维码必须随订单动态生成,不能生成一次后长期复用。

这个参数只能解决交易归属识别问题。交易是否产生返佣,还要看服务商与支付宝签订的业务政策、商家是否符合活动条件、交易类型及结算规则。传入参数不等于一定会获得返佣。

为什么签约助手二维码无法直接配置

签约助手中的二维码由支付宝产品侧生成。商户通过该二维码收款时,服务商无法构造交易请求,因此也不能传入以下信息:

  • 服务商 PID;
  • 服务商应用信息;
  • 服务商订单号;
  • 门店、终端等业务信息;
  • 支付宝返佣政策要求的其他交易参数。

即使当面付由服务商协助签约,也不一定意味着每笔交易都由该服务商拓展并发起。返佣统计通常需要通过交易请求中的参数识别服务商身份。

签约助手没有补填 sys_service_provider_id 的入口,也不能通过修改二维码图片来增加这个参数。重新排版二维码、添加 Logo 或拼接字符串,都不会改变支付宝后台收到的交易信息。

推荐的接入流程

1. 准备服务商应用

服务商需要在支付宝开放平台创建和配置应用,并完成以下工作:

  • 配置应用公钥或公钥证书;
  • 保存应用私钥;
  • 申请当面付相关接口能力;
  • 确认服务商 PID;
  • 配置支付结果异步通知地址;
  • 完成支付宝要求的服务商及商户授权流程。

服务商 PID 通常是以 2088 开头的支付宝用户 ID。应用的 app_id、商户 PID 和服务商 PID 含义不同,不能混用。

2. 取得商户授权

通过第三方应用代商户调用接口时,需要先让商户授权服务商应用,并取得对应的 app_auth_token。

调用交易接口时:

  • app_id 填写服务商应用的 AppID;
  • app_auth_token 填写当前商户的授权令牌;
  • sys_service_provider_id 填写符合返佣政策要求的服务商 PID。

授权令牌需要与具体商户绑定保存,同时处理令牌失效、授权撤销和重新授权等情况。

3. 每笔订单调用预下单接口

商户输入金额或收银系统生成订单后,服务商后台调用:

alipay.trade.precreate

关键业务参数示例:

{
  "out_trade_no": "ORDER_202609090001",
  "total_amount": "88.00",
  "subject": "门店消费",
  "timeout_express": "5m",
  "extend_params": {
    "sys_service_provider_id": "2088XXXXXXXXXXXX"
  }
}

参数需要满足以下要求:

  • out_trade_no 在商户订单维度必须唯一;
  • total_amount 使用字符串表示金额,单位为元;
  • sys_service_provider_id 应填写支付宝认可的服务商 PID;
  • 每笔交易都要传入该参数,不能配置一次后永久生效。

4. 展示接口返回的二维码

接口调用成功后会返回 qr_code。服务商系统需要将该字符串生成二维码,供消费者扫码支付。

返回内容的结构大致如下:

{
  "alipay_trade_precreate_response": {
    "code": "10000",
    "msg": "Success",
    "out_trade_no": "ORDER_202609090001",
    "qr_code": "https://qr.alipay.com/..."
  },
  "sign": "..."
}

处理响应时,需要先检查 code 和子错误信息,不能只根据是否收到 HTTP 响应来判断调用是否成功。

Java 调用示例

下面用支付宝 Java SDK 展示核心调用方式。SDK 类名可能随版本变化,请以当前支付宝开放平台文档和实际安装的 SDK 为准。

import com.alipay.api.AlipayApiException;
import com.alipay.api.AlipayClient;
import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.request.AlipayTradePrecreateRequest;
import com.alipay.api.response.AlipayTradePrecreateResponse;

public class AlipayPrecreateExample {

    public static void main(String[] args) throws AlipayApiException {
        String gateway = "https://openapi.alipay.com/gateway.do";
        String appId = "服务商应用APP_ID";
        String privateKey = "应用私钥";
        String alipayPublicKey = "支付宝公钥";
        String appAuthToken = "商户授权后的APP_AUTH_TOKEN";
        String serviceProviderId = "2088XXXXXXXXXXXX";

        AlipayClient alipayClient = new DefaultAlipayClient(
            gateway,
            appId,
            privateKey,
            "json",
            "UTF-8",
            alipayPublicKey,
            "RSA2"
        );

        AlipayTradePrecreateRequest request =
            new AlipayTradePrecreateRequest();

        request.setNotifyUrl(
            "https://example.com/alipay/payment/notify"
        );

        request.putOtherTextParam(
            "app_auth_token",
            appAuthToken
        );

        String bizContent = """
            {
              "out_trade_no": "ORDER_202609090001",
              "total_amount": "88.00",
              "subject": "门店消费",
              "timeout_express": "5m",
              "extend_params": {
                "sys_service_provider_id": "%s"
              }
            }
            """.formatted(serviceProviderId);

        request.setBizContent(bizContent);

        AlipayTradePrecreateResponse response =
            alipayClient.execute(request);

        if (response.isSuccess()) {
            System.out.println("二维码内容:" + response.getQrCode());
        } else {
            System.out.println("调用失败:" + response.getCode());
            System.out.println("错误信息:" + response.getMsg());
            System.out.println("子错误码:" + response.getSubCode());
            System.out.println("子错误信息:" + response.getSubMsg());
        }
    }
}

生产环境中不要直接拼接包含用户输入的 JSON。可以使用 SDK 的模型类或可靠的 JSON 序列化组件,并妥善保管应用私钥和商户授权令牌。

支付成功后的处理

生成二维码只是交易流程的第一步。服务商系统还需要:

  1. 验证支付宝异步通知的签名;
  2. 核对 app_id、商户身份、订单号和金额;
  3. 根据 trade_status 更新订单;
  4. 对没有收到通知的订单调用 alipay.trade.query 主动查询;
  5. 保存支付宝交易号 trade_no;
  6. 对重复通知进行幂等处理。

不能只看前端页面显示“支付成功”就确认到账,也不能使用未经签名验证的通知更新订单状态。

能否生成一个长期使用的返佣二维码

alipay.trade.precreate 返回的二维码对应某一笔具体订单,通常包含明确的订单号、金额和有效期,不适合长期张贴并反复收款。

如果商户没有现成的收银软件,可以开发一个简单的收款页面:

  1. 商户输入收款金额;
  2. 后台创建唯一订单;
  3. 调用 alipay.trade.precreate;
  4. 页面展示接口返回的二维码;
  5. 支付完成后自动刷新结果;
  6. 订单关闭或超时后停用该二维码。

如果希望使用“不预先输入金额的固定码”,需要确认支付宝是否已向当前服务商业务开放相应的间联收款码、商家码或其他产品能力。仅将 sys_service_provider_id 写入普通二维码无法实现这一点,具体应由支付宝服务商运营人员或开放平台支持人员根据签约产品确认。

注意事项

  • 历史交易如果没有携带服务商参数,通常不能通过事后补传参数改变归属。
  • sys_service_provider_id 必须填写真实且符合业务关系的服务商 PID。
  • 不能用商户 PID、应用 AppID 或其他编号代替服务商 PID。
  • 商户授权、接口权限和当面付签约状态都需要具备。
  • 服务商数据看板可能存在统计延迟,接口调用成功后,数据不一定立即显示。
  • 返佣资格还可能受到行业、费率、活动期限、交易真实性和风控规则的影响。
  • 正式上线前,应请支付宝渠道经理或服务商支持人员确认当前返佣政策要求的字段、应用调用模式和商户授权方式。不同的服务商政策可能还会要求传入 sys_service_provider_id 之外的归属参数或活动参数。

备注:内容仅供参考。