项目作者: asika32764

项目描述 :
PHP 3rd party SDK for Spgateway (智富通).
高级语言: PHP
项目地址: git://github.com/asika32764/spgateway-sdk.git
创建时间: 2017-04-16T15:24:19Z
项目社区:https://github.com/asika32764/spgateway-sdk

开源协议:

下载


A Spgateway PHP Package (智富通)

Beta 中,因開發倉促,有錯誤請回報,或者發 PR 協助修改。

安裝

  1. composer require asika/spgateway

如要使用 Receiver 的 render 功能,請安裝 windwalker/renderer

使用範例

  1. $spgateway = new \Asika\Spgateway\Spgateway('MerchantID', 'key', 'iv');
  2. // Basic options
  3. $spgateway->setTest(true) // Use Test Platform
  4. ->setMerchantOrderNo($orderNo)
  5. ->setVersion('1.2')
  6. ->setAmt((int) $price)
  7. ->setRespondType(Spgateway::RESPONSE_TYPE_STRING) // Use String response
  8. ->setItemDesc($desc)
  9. ->setEmail($email)
  10. ->setLoginType(0)
  11. ->setNotifyURL($notifyUrl)
  12. ->setReturnURL($returnUrl)
  13. ->setCustomerURL($customUrl);
  14. $spgateway->atm->enable(); // 啟用 ATM
  15. $spgateway->barcode->enable(); // 啟用條碼
  16. $spgateway->cvs->enable(); // 啟用超商代碼
  17. $spgateway->webATM->enable(); // 啟用 Web ATM
  18. // 啟用信用卡
  19. $spgateway->creditCard->enable()
  20. ->setUNIONPAY(1)
  21. ->installment('3, 6, 12');
  22. // 啟用支付寶
  23. $spgateway->alipay->enable()
  24. ->setReceiver('Sakura')
  25. ->setTel1('123-12312-123')
  26. ->setTel2('123-123-123')
  27. ->setCount(1)
  28. ->addProduct(
  29. $item->id,
  30. $item->title,
  31. $desc,
  32. $item->price,
  33. 1
  34. );
  35. // 啟用財富通
  36. $spgateway->tenpay->enable()
  37. ->setReceiver('Flower')
  38. ->setTel1('123-12312-123')
  39. ->setTel2('123-123-123')
  40. ->setCount(1)
  41. ->addProduct(
  42. $item->id,
  43. $item->title,
  44. $desc,
  45. (int) $price,
  46. 1
  47. );
  48. // 輸出成 <form> 直接 POST 即可繳費
  49. echo $spgateway->redner('<button>Submit</button>'); // Render HTML Form
  50. // 或是立即 POST (會印出 form 然後用 JS 立即 submit)
  51. $spgateway->post();

獲取繳費資訊

在你的 ReturnUrl 中,直接呼叫 PaidReceiver 取得回應資料。

  1. $receiver = new \Asika\Spgateway\PaidReceiver('MerchantID', 'key', 'iv');
  2. $receiver->setData($_POST);
  3. // You can log data here
  4. // Check transaction status
  5. if ($receiver->getStatus() !== \Asika\Spgateway\Payment\AbstractPayment::STATUS_SUCCESS)
  6. {
  7. // SDK 會幫您自動翻譯 Status Code 成為中文
  8. throw new \RuntimeException($receiver->getMessage(), 400);
  9. }
  10. // Validate transaction
  11. if (!$receiver->validate())
  12. {
  13. throw new \RuntimeException('訂單驗證失敗', 403);
  14. }
  15. // 以下的 $myOrder 是模擬資料,請代換成您所用框架的寫法
  16. // WebATM & 信用卡 屬於立即繳費完成的管道,可以直接將 order 設為成功
  17. if ($receiver->payment->isInstantPayment())
  18. {
  19. $myOrder->state = 'success';
  20. }
  21. // 不然就屬於 Deferral payment,將 order 設為 pending 等待使用者付費
  22. else
  23. {
  24. $myOrder->state = 'pending';
  25. }
  26. $myOrder->id = $receiver->getMerchantOrderNo();
  27. $myOrder->expired = $receiver->getExpireDate();
  28. $myOrder->payment = $receiver->getPaymentType();
  29. $myOrder->returned_data = json_encode($_POST); // Save return data for future use.
  30. // Save order
  31. $myOrder->save();

用相同的方法寫在 NotifyUrl 中

  1. $receiver = new \Asika\Spgateway\PaidReceiver('MerchantID', 'key', 'iv');
  2. $receiver->setData($_POST);
  3. // Validate transaction
  4. if (!$receiver->validate())
  5. {
  6. // Log error
  7. throw new \RuntimeException('訂單驗證失敗', 403);
  8. }
  9. if ($receiver->getStatus() !== \Asika\Spgateway\Payment\AbstractPayment::STATUS_SUCCESS)
  10. {
  11. // Log error
  12. throw new \RuntimeException($receiver->getMessage(), 400);
  13. }
  14. // 直接設 order 為繳費成功
  15. $myOrder->id = $receiver->getMerchantOrderNo();
  16. $myOrder->state = 'success';
  17. $myOrder->expired = '';
  18. $myOrder->returned_data = json_encode($_POST); // Save return data for future use.
  19. // Save order (Use your own framework method)
  20. $myOrder->save();

在訂單內顯示等待繳款資訊

如果您要在尚未付款的訂單頁面中,產生一個 table 來顯示等待繳款資訊,提醒使用者目前選用的付款方式,可以用 PendingReceiver

  1. $receiver = new \Asika\Spgateway\PendingReceiver;
  2. // 在 ReutnrUrl 就要存好 returned_data
  3. $receiver->setData(json_decode($myOrder->returned_data, true));
  4. echo $receiver->render((['table_class' => 'table table-striped', 'title_width' => '200']);

在已繳款訂單內顯示繳款資訊

如果訂單已經繳款成功,我們改用 PaidReceiver 來印 table

  1. $receiver = new \Asika\Spgateway\PaidReceiver; // 不需要 api key
  2. $receiver->setData(json_decode($myOrder->returned_data, true));
  3. echo $receiver->render((['table_class' => 'table table-striped', 'title_width' => '200']);