asika/spgateway

PHP Spgateway 包

安装: 966

依赖者: 0

建议者: 0

安全性: 0

星标: 10

关注者: 5

分支: 5

开放问题: 1

类型:spgateway-3rd-party-sdk

1.0.0-beta8 2017-04-16 16:18 UTC

This package is auto-updated.

Last update: 2024-09-15 00:20:05 UTC


README

测试版,由于开发匆忙,如有错误请反馈,或通过PR协助修改。

安装

composer require asika/spgateway

如要使用Receiver的render功能,请安装windwalker/renderer

使用示例

$spgateway = new \Asika\Spgateway\Spgateway('MerchantID', 'key', 'iv');

// Basic options
$spgateway->setTest(true) // Use Test Platform
	->setMerchantOrderNo($orderNo)
	->setVersion('1.2')
	->setAmt((int) $price)
	->setRespondType(Spgateway::RESPONSE_TYPE_STRING) // Use String response
	->setItemDesc($desc)
	->setEmail($email)
	->setLoginType(0)
	->setNotifyURL($notifyUrl)
	->setReturnURL($returnUrl)
	->setCustomerURL($customUrl);

$spgateway->atm->enable();     // 啟用 ATM
$spgateway->barcode->enable(); // 啟用條碼
$spgateway->cvs->enable();     // 啟用超商代碼
$spgateway->webATM->enable();  // 啟用 Web ATM

// 啟用信用卡
$spgateway->creditCard->enable()
	->setUNIONPAY(1)
	->installment('3, 6, 12');

// 啟用支付寶
$spgateway->alipay->enable()
	->setReceiver('Sakura')
	->setTel1('123-12312-123')
	->setTel2('123-123-123')
	->setCount(1)
	->addProduct(
		$item->id,
		$item->title,
		$desc,
		$item->price,
		1
	);

// 啟用財富通
$spgateway->tenpay->enable()
	->setReceiver('Flower')
	->setTel1('123-12312-123')
	->setTel2('123-123-123')
	->setCount(1)
	->addProduct(
		$item->id,
		$item->title,
		$desc,
		(int) $price,
		1
	);

// 輸出成 <form> 直接 POST 即可繳費
echo $spgateway->redner('<button>Submit</button>'); // Render HTML Form

// 或是立即 POST (會印出 form 然後用 JS 立即 submit)
$spgateway->post();

获取缴费信息

在你的ReturnUrl中,直接调用PaidReceiver获取响应数据。

$receiver = new \Asika\Spgateway\PaidReceiver('MerchantID', 'key', 'iv');
$receiver->setData($_POST);

// You can log data here

// Check transaction status 
if ($receiver->getStatus() !== \Asika\Spgateway\Payment\AbstractPayment::STATUS_SUCCESS)
{
    // SDK 會幫您自動翻譯 Status Code 成為中文
    throw new \RuntimeException($receiver->getMessage(), 400);
}

// Validate transaction
if (!$receiver->validate())
{
    throw new \RuntimeException('訂單驗證失敗', 403);
}

// 以下的 $myOrder 是模擬資料,請代換成您所用框架的寫法

// WebATM & 信用卡 屬於立即繳費完成的管道,可以直接將 order 設為成功
if ($receiver->payment->isInstantPayment())
{
    $myOrder->state = 'success';
}
// 不然就屬於 Deferral payment,將 order 設為 pending 等待使用者付費
else
{
    $myOrder->state = 'pending';
}

$myOrder->id      = $receiver->getMerchantOrderNo();
$myOrder->expired = $receiver->getExpireDate();
$myOrder->payment = $receiver->getPaymentType();
$myOrder->returned_data = json_encode($_POST); // Save return data for future use.

// Save order
$myOrder->save();

用相同的方法写在NotifyUrl中

$receiver = new \Asika\Spgateway\PaidReceiver('MerchantID', 'key', 'iv');
$receiver->setData($_POST);

// Validate transaction
if (!$receiver->validate())
{
    // Log error

    throw new \RuntimeException('訂單驗證失敗', 403);
}

if ($receiver->getStatus() !== \Asika\Spgateway\Payment\AbstractPayment::STATUS_SUCCESS)
{
    // Log error

    throw new \RuntimeException($receiver->getMessage(), 400);
}

// 直接設 order 為繳費成功
$myOrder->id      = $receiver->getMerchantOrderNo();
$myOrder->state   = 'success';
$myOrder->expired = '';
$myOrder->returned_data = json_encode($_POST); // Save return data for future use.

// Save order (Use your own framework method)
$myOrder->save();

在订单内显示等待缴费信息

如果您要在尚未缴费的订单页面中,生成一个table来显示等待缴费信息,提醒使用者目前选用的缴费方式,可以用PendingReceiver

$receiver = new \Asika\Spgateway\PendingReceiver;

// 在 ReutnrUrl 就要存好 returned_data
$receiver->setData(json_decode($myOrder->returned_data, true));

echo $receiver->render((['table_class' => 'table table-striped', 'title_width' => '200']);

在已缴费订单内显示缴费信息

如果订单已经缴费成功,我们改用PaidReceiver来打印table

$receiver = new \Asika\Spgateway\PaidReceiver; // 不需要 api key

$receiver->setData(json_decode($myOrder->returned_data, true));

echo $receiver->render((['table_class' => 'table table-striped', 'title_width' => '200']);