求助:基于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
相关产品推荐
相关产品推荐

