twohill/silverstripe-pxpay

支付Express控制器

安装: 472

依赖项: 0

建议者: 0

安全: 0

星标: 1

关注者: 2

分支: 1

开放问题: 0

类型:silverstripe-vendormodule

v1.0.4 2020-10-20 06:20 UTC

This package is auto-updated.

Last update: 2024-09-20 14:55:46 UTC


README

一个将您的控制器与Payment Express集成的模块。

需求

  • SilverStripe ^4
  • php-curl
  • php-simplexml

安装

使用composer

composer require twohill/silverstripe-pxpay

许可证

BSD 3-Clause "New" 或 "Revised" 许可证。见 许可证

示例配置

在config yml文件中配置您的PxPayment详细信息。您可以针对devlive模式指定不同的设置。在dev模式下,使用沙盒凭据进行此操作是一个有用的选项。

---
Only:
  environment: 'live'
---
Twohill\PXPay\PxPaymentController:
  PxPayURL: https://sec.paymentexpress.com/pxaccess/pxpay.aspx
  PxPayUserId: MyUserID
  PxPayKey: xxxxxx

---
Only:
  environment: 'dev'
---
Twohill\PXPay\PxPaymentController:
  PxPayURL: https://sec.paymentexpress.com/pxaccess/pxpay.aspx
  PxPayUserId: MyUserID_dev
  PxPayKey: xxxxxx
  

示例用法

PxPaymentController作为支付方式的返回结果

class MyPageController extends PageController
{
    private static $allowed_actions = [
        'thankyou',
        'pay_order',
        'unsuccessful',
    ];
    
    public function thankyou(HTTPRequest $request)
    {
        $content = '';
        if ($request->getSession()->get('OrderID')) {
            $order = Order::get()->byID($request->getSession()->get('OrderID'));

            if ($order) {
           
                $payment = $order->Payment();

                if ($payment && $payment->TxnId) {
                    if ($payment->Processed) {
                        $sendEmail = false;
                    } else {
                        $payment->Processed = true;
                        $payment->write();
                    }
                } else {
                    $this->redirect($this->Link('pay-order/submit'));
                }
                $content = $this->ThankYouForPayingContent; // From MyPage $db
            }

            $request->getSession()->clear("OrderID");
            return $this->customise(new ArrayData([
                'Content' => DBField::create_field('HTMLFragment', $content),
                'Form' => ''
            ]));
        }
        return $this->redirect($this->Link());
    }
    /**
     * Process the payment
     *
     * @param HTTPRequest $request
     * @return PxPaymentController
     * @throws ValidationException
     */
    public function pay_order(HTTPRequest $request)
    {
    
        // Load the payment details somehow
        $payment = null;

        if ($request->getSession()->get('OrderID')) {
           
            $order = Order::get()->byID($request->getSession()->get('OrderID'));

            if ($order) {
                $payment = new PxPayment();
                $payment->TxnType = "Purchase";
                $payment->MerchantReference = $order->InvoiceNumber;
                $payment->TxnData1 = $order->CompanyName;
                $payment->TxnData2 = $order->Address;
                $payment->TxnData3 = $order->City;
                $payment->EmailAddress = $order->Contact()->Email;
                $payment->AmountInput = $order->Total;
                $payment->CurrencyInput = "NZD";
                $payment->InvoiceID = $order->ID;
                $payment->write();
                }
            }
        }
        return new PxPaymentController($this, $request, $payment, $this->Link("thankyou"), $this->Link("unsuccessful"));
    }

    /** 
     * Action when payment is unsuccessful. 
     */
    public function unsuccessful(HTTPRequest $request)
    {
        if ($request->getSession()->get('OrderID')) {
            $order = Order::get()->byID($request->getSession()->get('OrderID'));
            if ($order) {
                return $this->customise([
                    'Content' => DBField::create_field('HTMLFragment', $this->UnsuccessfulContent),
                    'Form' => ''
                ]);
            }
        }
        return $this->redirect($this->Link());
    }


}

维护者

错误追踪器

错误在此存储库的问题部分进行跟踪。在提交问题之前,请阅读现有问题以确保您的独特性。

如果问题看起来像是一个新错误

  • 创建一个新问题
  • 描述重现问题的步骤和预期结果。单元测试、截图和屏幕录制在此处可能会有所帮助。
  • 尽可能详细地描述您的环境:SilverStripe版本、浏览器、PHP版本、操作系统、安装的任何SilverStripe模块。

请直接向模块维护者报告安全问题。请勿在错误追踪器中提交安全问题。

开发和贡献

如果您想对该模块做出贡献,请确保提出一个拉取请求并与模块维护者讨论。