asika / spgateway
PHP Spgateway 包
1.0.0-beta8
2017-04-16 16:18 UTC
Requires
- php: >=5.3.10
Suggests
- windwalker/renderer: Install 3.x to support template render.
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']);