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

求助:基于wysow-postfinance库编写PostFinance支付请求示例代码

基于wysow-postfinance的PostFinance支付集成示例(index.php)

我明白PostFinance的官方文档确实有点晦涩,刚上手容易卡壳。既然你已经通过Composer装好了wysow-postfinance库,下面给你一个干净的index.php示例,涵盖发起测试支付和处理支付回调的核心逻辑,你可以直接复用和调整:

<?php
require __DIR__ . '/vendor/autoload.php';

use Wysow\PostFinance\Client;
use Wysow\PostFinance\Sign\ShaSigner;

// --------------------------
// 1. 基础配置(替换成你的商户信息)
// --------------------------
$pspId = '你的PSPID';
$shaInKey = '你的SHA-IN签名密钥';
$shaOutKey = '你的SHA-OUT签名密钥';
$callbackUrl = 'https://你的域名/index.php'; // 回调地址,需在PostFinance后台配置

// 初始化客户端和签名器
$signer = new ShaSigner($shaInKey, ShaSigner::SHA256); // 算法要和后台设置一致(SHA1/SHA256)
$client = new Client($pspId, $signer);
$client->setTestMode(true); // 开启测试模式,正式环境请注释掉

// --------------------------
// 2. 处理PostFinance支付回调
// --------------------------
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['STATUS'])) {
    // 验证回调签名,确保请求来自PostFinance
    $outSigner = new ShaSigner($shaOutKey, ShaSigner::SHA256);
    if (!$outSigner->validateCallback($_POST)) {
        die('无效的回调签名');
    }

    // 处理支付结果
    $status = $_POST['STATUS'];
    $orderId = $_POST['ORDERID'];
    $amount = $_POST['AMOUNT'];

    switch ($status) {
        case 9: // 支付成功
            echo "订单 $orderId 支付成功,金额:$amount 生丁";
            // 这里可以写更新订单状态、发送通知等业务逻辑
            break;
        case 0: // 支付待处理
            echo "订单 $orderId 支付待处理,请稍后查看";
            break;
        default: // 支付失败/取消
            echo "订单 $orderId 支付失败,状态码:$status";
            break;
    }
    exit;
}

// --------------------------
// 3. 发起测试支付请求
// --------------------------
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['submit_payment'])) {
    // 构建支付参数
    $paymentParams = [
        'ORDERID' => 'TEST_ORDER_' . time(), // 唯一订单ID
        'AMOUNT' => 1000, // 10.00 CHF(单位:生丁)
        'CURRENCY' => 'CHF',
        'LANGUAGE' => 'en_US',
        'ACCEPTURL' => $callbackUrl, // 支付成功跳转地址
        'DECLINEURL' => $callbackUrl, // 支付失败跳转地址
        'EXCEPTIONURL' => $callbackUrl, // 异常跳转地址
        'CANCELURL' => $callbackUrl, // 用户取消跳转地址
    ];

    // 生成支付跳转URL
    $paymentUrl = $client->createPaymentUrl($paymentParams);

    // 跳转到PostFinance支付页面
    header('Location: ' . $paymentUrl);
    exit;
}
?>

<!-- 前端支付按钮 -->
<!DOCTYPE html>
<html>
<head>
    <title>PostFinance测试支付</title>
</head>
<body>
    <h1>测试PostFinance支付</h1>
    <form method="POST">
        <button type="submit" name="submit_payment">发起10CHF测试支付</button>
    </form>
</body>
</html>

关键注意事项:

  • 商户信息替换:一定要把$pspId、$shaInKey、$shaOutKey替换成你从PostFinance商户后台获取的真实值
  • 签名算法匹配:ShaSigner的第二个参数(SHA1/SHA256)必须和你在PostFinance后台设置的签名算法完全一致
  • 测试模式:setTestMode(true)会把请求导向PostFinance的测试环境,上线前记得关闭
  • 回调地址配置:$callbackUrl必须是公网可访问的地址,并且要在PostFinance后台的“Technical Settings”里配置好对应的SHA-OUT密钥
  • 金额单位:PostFinance要求金额以最小货币单位提交(比如CHF用生丁,EUR用欧分),所以10瑞士法郎要传1000

如果测试时遇到签名验证失败的问题,先检查密钥是否正确、算法是否匹配,或者用PostFinance提供的签名验证工具核对一下生成的签名值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:12:54