PAYATHON 2026

Skrill Quick Payment API HTML Form 提示商户邮箱错误

支付老李

结论

Wrong merchant email address! 表示 Skrill 当前不认可 pay_to_email 对应的收款商户邮箱。常见原因包括:

  • 该邮箱尚未注册 Skrill 账户;
  • 该账户仍是个人账户,尚未开通商户收款或 Quick Checkout;
  • 表单中的邮箱不是商户账户已验证且可用于收款的邮箱;
  • 正式支付入口使用了测试账户邮箱,或者测试环境使用了正式商户邮箱;
  • 表单仍在使用 Moneybookers 时代的旧提交地址。

示例中的 Gmail 地址本身并不会引发错误,问题在于它是否属于已经启用收款功能的 Skrill 商户账户。status_url 指向 localhost 也不会触发这条邮箱错误,但 Skrill 无法通过公网访问该地址,后续状态通知将无法送达。

应当如何处理

先登录 Skrill 商户后台,逐项确认:

  1. 账户已经完成商户注册和必要的审核。
  2. Quick Checkout 或相应的在线收款功能已经启用。
  3. pay_to_email 与商户后台显示的已验证收款邮箱完全一致。
  4. 测试账户只用于测试环境,正式商户账户只用于正式环境。
  5. 如果刚申请商户功能,需要确认 Skrill 已完成开通。仅创建普通钱包账户还不够。

旧表单提交到:

https://www.moneybookers.com/app/payment.pl

这是 Moneybookers 时代的旧入口。新版 Quick Checkout 通常使用:

https://pay.skrill.com

实际可用的入口和账户权限,应以当前商户后台提供的集成资料为准。

可用的基础 HTML 表单

下面是一个精简的正式环境示例。使用时请将邮箱、订单号和回调地址替换为真实值:

<form action="https://pay.skrill.com" method="post">
    <input type="hidden" name="pay_to_email"
           value="merchant@example.com">

    <input type="hidden" name="transaction_id"
           value="ORDER-20260910-0001">

    <input type="hidden" name="status_url"
           value="https://example.com/payments/skrill/status">

    <input type="hidden" name="return_url"
           value="https://example.com/payments/success">

    <input type="hidden" name="cancel_url"
           value="https://example.com/payments/cancel">

    <input type="hidden" name="language"
           value="EN">

    <input type="hidden" name="amount"
           value="100.00">

    <input type="hidden" name="currency"
           value="USD">

    <input type="hidden" name="detail1_description"
           value="Payment reason">

    <input type="hidden" name="detail1_text"
           value="Donation Due Payment Invoice">

    <button type="submit">Pay Through Skrill</button>
</form>

各字段的含义如下:

  • pay_to_email:已经启用 Skrill 收款功能的商户邮箱;
  • transaction_id:商户系统中的唯一订单号;
  • status_url:用于接收 Skrill 服务器通知的公网 HTTPS 地址;
  • return_url:付款完成后用户返回的页面;
  • cancel_url:用户取消付款后返回的页面;
  • amount:付款金额,建议固定为两位小数;
  • currency:商户账户支持的 ISO 4217 货币代码。

修正 PHP 表单

不要直接使用浏览器提交的 $_POST['amount']。服务器应根据订单重新查询或计算金额和订单信息。将数据写入 HTML 属性前,还需要进行转义:

<?php

$merchantEmail = 'merchant@example.com';
$transactionId = 'ORDER-' . date('YmdHis');

// 实际项目中应从数据库读取订单金额,不能直接采用客户端传入的金额。
$amount = 100.00;

function escapeHtml(string $value): string
{
    return htmlspecialchars($value, ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8');
}
?>

<form action="https://pay.skrill.com" method="post">
    <input type="hidden"
           name="pay_to_email"
           value="<?= escapeHtml($merchantEmail) ?>">

    <input type="hidden"
           name="transaction_id"
           value="<?= escapeHtml($transactionId) ?>">

    <input type="hidden"
           name="status_url"
           value="https://example.com/payments/skrill/status">

    <input type="hidden"
           name="return_url"
           value="https://example.com/payments/success">

    <input type="hidden"
           name="cancel_url"
           value="https://example.com/payments/cancel">

    <input type="hidden"
           name="language"
           value="EN">

    <input type="hidden"
           name="amount"
           value="<?= number_format($amount, 2, '.', '') ?>">

    <input type="hidden"
           name="currency"
           value="USD">

    <input type="hidden"
           name="detail1_description"
           value="Payment reason">

    <input type="hidden"
           name="detail1_text"
           value="Donation Due Payment Invoice">

    <button type="submit">Pay Through Skrill</button>
</form>

回调地址不能使用 localhost

当前表单使用的地址是:

http://localhost/civicrm_development

Skrill 服务器访问这个地址时,localhost 指向的是 Skrill 自己的服务器,并不是开发者的电脑。因此,即使付款页面能够正常打开,状态通知也无法送达。

开发期间需要使用 Skrill 能够通过公网访问的 HTTPS 地址,例如:

https://dev.example.com/payments/skrill/status

如果使用临时隧道服务,回调地址变化后也要及时更新表单配置。

status_url 应指向专门处理服务器通知的接口,不宜只填写目录地址。接口收到通知后,应验证 Skrill 提供的签名或校验字段,再根据 transaction_id 更新订单状态。用户被重定向到 return_url 并不能证明付款成功,不能仅凭这次跳转就将订单标记为已支付。

仍然出现相同错误时

如果已经将提交地址改为 https://pay.skrill.com,但系统仍提示邮箱错误,通常需要检查账户状态,而不是 HTML 语法:

  • 邮箱前后是否有空格;
  • 邮箱是否与商户后台记录完全一致;
  • 邮箱是否已经验证;
  • 商户功能是否已经获批并启用;
  • 账户是否支持接收所选币种;
  • 是否混用了测试账户和正式支付入口;
  • Skrill 是否对该账户、所在国家或业务类型设置了收款限制。

如果无法在后台确认这些信息,需要联系 Skrill 商户支持核查账户权限。修改表单参数不能将普通 Skrill 钱包账户变成可以通过 Quick Checkout 收款的商户账户。

备注:内容仅供参考。