You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用PHP向第三方服务器发起Server-to-Server Postback?

联盟营销Server-to-Server Postback的PHP实现方案

你之前用JavaScript发起请求的方式不符合要求,因为联盟要求的是**服务器到服务器(Server-to-Server)**的postback——也就是你的网站服务器直接向联盟服务器发起请求,而非通过用户浏览器(客户端)发起。客户端请求可能被浏览器拦截、无法通过联盟来源验证,或因用户关闭页面导致请求失败。

核心思路

在你的订单完成逻辑中,直接用PHP在服务器端发起请求,传递联盟要求的参数。

1. 准备必要参数

首先确保你能获取到以下参数:

  • advertiserid:联盟提供的固定ID(示例中为12345)
  • clickid:用户从联盟链接跳转时,联盟URL携带的标识(需提前存入Session或订单记录)
  • orderamount:实际订单金额
  • ordernumber:你的系统生成的唯一订单号

2. PHP实现代码(GET请求方式)

联盟给出的URL格式带查询参数,优先使用GET方式发起请求:

// 从会话或订单数据中获取参数
$clickid = $_SESSION['affiliate_clickid']; // 假设已将clickid存入Session
$orderamount = 199.99; // 替换为实际订单金额
$ordernumber = 'ORDER_20240520_001'; // 替换为你的唯一订单号
$advertiserid = 12345;

// 拼接并编码请求URL
$postbackUrl = sprintf(
    'https://track.myaffiliatecompany.com/da.ashx?advertiserid=%d&clickid=%s&orderamount=%f&ordernumber=%s',
    $advertiserid,
    urlencode($clickid),
    $orderamount,
    urlencode($ordernumber)
);

// 用CURL发起请求
$ch = curl_init($postbackUrl);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// 开发环境可临时关闭SSL验证,生产环境建议开启
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);

$response = curl_exec($ch);

// 记录请求日志,方便排查问题
if (curl_errno($ch)) {
    error_log('联盟Postback请求失败: ' . curl_error($ch));
} else {
    error_log('联盟Postback响应: ' . $response);
}

curl_close($ch);

3. 备选:POST请求方式(部分联盟要求)

如果联盟要求用POST传递参数,可使用以下代码:

$postData = [
    'advertiserid' => 12345,
    'clickid' => $_SESSION['affiliate_clickid'],
    'orderamount' => 199.99,
    'ordernumber' => 'ORDER_20240520_001'
];

$ch = curl_init('https://track.myaffiliatecompany.com/da.ashx');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($postData));
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);

$response = curl_exec($ch);

if (curl_errno($ch)) {
    error_log('联盟Postback请求失败: ' . curl_error($ch));
} else {
    error_log('联盟Postback响应: ' . $response);
}

curl_close($ch);

关键注意事项

  • 必须在服务器端执行:将代码放在订单完成回调脚本、支付成功后的处理逻辑中,确保是服务器主动发起请求,而非前端JS触发。
  • 保存clickid:用户通过联盟链接访问时,立即捕获URL中的clickid参数,存入Session或绑定到用户订单,避免订单完成时丢失。
  • 参数编码:对clickid、ordernumber等字符串参数做urlencode处理,防止特殊字符破坏请求格式。
  • 日志记录:务必记录请求错误信息和响应内容,方便后续排查问题(比如联盟服务器返回错误码时,快速定位原因)。
  • SSL验证:生产环境建议移除CURLOPT_SSL_VERIFYPEER和CURLOPT_SSL_VERIFYHOST的false设置,确保请求安全性。

内容的提问来源于stack exchange,提问作者Mike B

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 19:50:25