fall1600/suntech

SunTech(紅陽科技)的支付解决方案,纯PHP实现

v1.0.2 2020-09-11 03:55 UTC

This package is auto-updated.

Last update: 2024-09-23 20:47:25 UTC


README

官方文档

简介: 在紅陽金流中绑定商城与付款方式,一个商城ID代表一种付款方式,在跳转到结账页面时也只会显示一种付款方式

支持的付款方式

  • 信用卡
  • 银联卡
  • 虚拟ATM
  • 超商代收(条码缴费单)
  • 超商代号
  • WebATM
  • 台湾pay
  • 超商取货付款

如何使用

控制交易方式

  • $merchantId: 你在紅陽申请的商店代号
  • $order: 你的订单对象,务必实现package中的OrderInterface
  • $payer: 你的付款人对象,务必实现package中的PayerInterface
// 信用卡付款
$info = new CreditInfo($creditMerchantId, $order, $payer);
// 銀聯卡付款, 與信用卡共用merchantId, webhook url設定; 文件第7頁
$info = new UnionPayInfo($unionMerchantId, $order, $payer);
// 虛擬Atm 付款, 與超商代收(條碼繳費單) 共用merchantId, webhook url設定; 文件第8頁
$info = (new AtmInfo($atmMerchantId, $order, $payer))
        ->appendProduct($product1)
        ->appendProduct($product2);
// 超商代收(條碼繳費單)
$info = (new CvsBarcodeInfo($barcodeMerchantId, $order, $payer))
        ->appendProduct($product1)
        ->appendProduct($product2);
// 超商代碼(ibon, FamiPort 那種)
$info = new CvsPaycodeInfo($paycodeMerchantId, $order, $payer);
// 台灣pay
$info = new TaiwanPayInfo($twpayMerchantId, $order, $payer);

创建Suntech对象,注入商店信息,带着交易信息前往紅陽付款

  • $merchantId: 你在紅陽商店代号
  • $tradePassword: 交易密码
$suntech = new Suntech();
$suntech
    ->setIsProduction(false) // 設定環境, 預設就是走正式機
    ->setMerchant(new Merchant($merchantId, $tradePassword))
    ->checkout($info);

请在你订单对象实现 OrderInterface

<?php

namespace Your\Namespace;

use fall1600\Package\Suntech\Contracts\OrderInterface;

class Order implements OrderInterface
{
    // your order detail...
}

请在你付款人(假设是Member), 实现PayerInterface

<?php

namespace Your\Namespace;

use fall1600\Package\Suntech\Contracts\PayerInterface;

class Member implements PayerInterface
{
    // your member detail...
}

解析来自红阳的交易通知

// 信用卡的交易結果
$isValid = $merchant->setRawData($request->all(), ServiceType::CREDIT)->validateResponse();
// 超商代碼的交易結果
$isValid = $merchant->setRawData($request->all(), ServiceType::CVS_PAYCODE)->validateResponse();
// 超商代收(條碼繳費單)的交易結果
$isValid = $merchant->setRawData($request->all(), ServiceType::CVS_BARCODE)->validateResponse();
// 虛擬ATM 的交易結果
$isValid = $merchant->setRawData($request->all(), ServiceType::ATM)->validateResponse();
// WebATM 的交易結果
$isValid = $merchant->setRawData($request->all(), ServiceType::WEB_ATM)->validateResponse();
// 台灣pay 的交易結果
$isValid = $merchant->setRawData($request->all(), ServiceType::TAIWAN_PAY)->validateResponse();

// response 封裝了通知交易的結果, 以下僅列常用methods
$resp = $merchant->getResponse();
// 商城id
$resp->getMerchantId();
// 紅陽提供的交易代碼
$resp->getBuySafeNo();
// 交易金額
$resp->getAmount();
// 此回傳的檢核碼
$resp->getChecksum();
// 整包payload
$resp->getData();

单笔交易查询

$resp = $suntech
    ->setMerchant($merchant)
    ->query(new QueryRequest($merchantId, $order, $buySafeNo = null, $orderNumber = null, $note1 = null, $note2 = null));

$isValid = $merchant->setRawData($resp, 'query')->validResponse(); // 查詢的response, 有需要也可以validate