faxi-online/sisp-php

该软件包最新版本(dev-main)没有提供许可证信息。

实现一个库,以方便的方式处理SISP vinti4支付。

dev-main 2022-05-17 17:56 UTC

This package is auto-updated.

Last update: 2024-09-17 22:54:59 UTC


README

这是一个库的实现,用于以简单的方式处理SISP https://www.sisp.cv/ vinti4 https://www.vinti4.cv/ 支付。

安装

将项目文件夹下载到您的项目中。或者使用composer安装

composer require faxi-online/sisp-php:dev-main

在您的项目中包含

导入库文件;

include "../Sisp.php";

或包含composer自动加载;

include "vendor/autoload.php";

创建交易对象

Sisp 类创建交易对象。您可以传递三个参数

  • 您的POS Id/标识符
  • 相应的POS认证码
  • VBV API URL,默认设置为 "https://mc.vinti4net.cv/BizMPIOnUsSisp",请记住在生成时不要包含路径 "/CardPayment",因为它将根据交易代码自动添加
use Faxi\Sisp;

$payment = new Sisp(
        "90000045",
        "kfyhhKJH875ndu44"
    );

生成交易ID

生成您的交易ID,最大为15个字符,支付成功后不应重复使用该ID进行新交易。

// sample to generate id from timestamp
$transaction_id = "T" . date('YmdHms');

生成HTML购买表单

您可以通过调用 buyForm 方法生成HTML表单。它接受三个参数

  • 交易ID,您将在交易回调中收到
  • 交易金额
  • 回调URL,交易结果将发送到这里
$buyForm = $payment->buyForm(
		$transaction_id,
		1000,
		"https:///sisp-php/src/Faxi/samples/callback-buy.php"
	);

在HTML页面上放置表单

只需将此表单放入您的HTML页面,并通过调用 document.forms[0].submit(); 提交它

<html>
	<head>
		<title>Do payment</title>
	</head>
	<body>

		<div>

			<h5>Do payment</h5>

			<?= $buyForm ?>
            
                        <button onclick="startTransaction()">
                            Start Transaction
                        </button>

		</div>

		<script>
			
			function startTransaction()
			{
				document.forms[0].submit();
			}

		</script>
	</body>
</html>

提交表单后,您应该被重定向到一个类似以下页面。
Payment form

交易结果回调

要处理回调结果,我们应该使用 onTransactionResult 方法,它接收三个参数

  • 成功回调函数
  • 错误回调函数
  • 取消回调函数
$payment = new Sisp(
        "90000045",
        "kfyhhKJH875ndu44"
    );

$payment->onTransactionResult(

	// success callback
	function ($transaction_id, $clearingPeriod, $sisp_transaction_id){

		echo "<p>Payment sucessfully for $transaction_id</p>";

		// save clearingPeriod and sisp_transaction_id
		// you will need them to do refund later
		echo "<p>merchantRespCP: " . $clearingPeriod. "</p>";
		echo "<p>merchantRespTid: " . $sisp_transaction_id . "</p>";

	},

	// error callback
	function ($transaction_id, $errorDescription, $errorDetail, $errorAdditionalMessage){

		echo "<p>Error on transaction $transaction_id</p>";
		echo "<p>Error: description $errorDescription</p>";
		echo "<p>Error: detail $errorDetail</p>";
		echo "<p>Error: additional $errorAdditionalMessage</p>";

	},

	// cancellation callback
	function (){

		echo "<p>Transaction cancelled</p>";

	}

);

生成手机充值HTML表单

您可以通过调用 phoneRechargeForm 方法生成HTML表单。它接受五个参数

  • 交易ID,您将在交易回调中收到,最大为15个字符
  • 交易金额
  • 您想要充值的手机号码
  • 运营商ID(它将由SISP提供)
  • 回调URL,交易结果将发送到这里
$buyForm = $payment->phoneRechargeForm(
		$transaction_id,
		1000,
		9112233,
		2,
		"https:///sisp-php/src/Faxi/samples/callback-buy.php"
	);

生成服务支付HTML表单

您可以通过调用 servicePaymentForm 方法生成HTML表单。它接受五个参数

  • 交易ID,您将在交易回调中收到,最大为15个字符
  • 交易金额
  • 您想要支付的账单参考号
  • 实体ID(它将由SISP提供)
  • 回调URL,交易结果将发送到这里
$buyForm = $payment->servicePaymentForm(
		$transaction_id,
		1000,
		"123456789",
		"6",
		"https:///sisp-php/src/Faxi/samples/callback-buy.php"
	);

生成退款HTML表单

调用 refundForm 方法。它接收五个参数

  • 交易ID,您将在交易回调中收到,最大为15个字符,(它不能与退款交易相同)
  • 要退回的金额
  • 被退款交易的清算期号,它在交易结果中收到
  • 在交易结果中收到的SISP交易ID
  • 回调URL,退款结果将发送到这里
$transaction_id = "T" . date('YmdHms');

$refundForm = $payment->refundForm(
		$transaction_id,
		1000,
		1765,
		76133,
		"https:///sisp-php/src/Faxi/samples/callback-refund.php"
	);

要处理退款结果,您必须执行以下代码。

$payment->onRefundResult(

	// success callback
	function ($transaction_id){

		echo "<p>Refunded done for $transaction_id</p>";

	},

	// error callback
	function ($transaction_id, $errorDescription, $errorDetail, $errorAdditionalMessage){

		echo "<p>Error on refund for $transaction_id</p>";
		echo "<p>Error: description $errorDescription</p>";
		echo "<p>Error: detail $errorDetail</p>";
		echo "<p>Error: additional $errorAdditionalMessage</p>";

	},

	// cancellation callback
	function (){

		echo "<p>Refund cancelled</p>";

	}

);

国际化

如果您想,您可以更改支付表单的语言,它支持en和pt。

$payment->lang = "pt";