Laravel 9 银行 Alfalah 包

v1.0.1 2022-10-12 19:40 UTC

This package is auto-updated.

Last update: 2024-09-16 10:32:47 UTC


README

Latest Version on Packagist MIT Licensed Total Downloads

这是Bank Alfalah支付网关包,用于通过Alfa钱包、银行账户号码或信用卡(信用卡尚未实现)进行支付。您可以通过composer使用此包与Laravel或任何PHP框架。

安装

您可以通过composer安装此包

composer require zfhassaan/alfa

设置.env配置

您可以从Bank Alfalah商户门户获取这些值

ALFAPAY_URL=
ALFAPAY_MODE=sandbox
ALFAPAY_CHANNEL_ID=
ALFAPAY_MERCHANT_ID=
ALFAPAY_STORE_ID=
ALFAPAY_RETURN_URL=
ALFAPAY_MERCHANT_USERNAME=
ALFAPAY_MERCHANT_PASSWORD=
ALFAPAY_MERCHANT_HASH=
ALFAPAY_KEY_1=
ALFAPAY_KEY_2=

配置

将这些文件添加到app/config.php

        /*
         * Package Service Providers...
         */
        \zfhassaan\Alfapay\AlfapayServiceProvider::class,

并在app/config.php中添加别名

    'aliases' => Facade::defaultAliases()->merge([
        'Alfapay' => \zfhassaan\Alfapay\AlfapayFacade::class,
    ])->toArray(),

用法

首先,您需要通过提供唯一的交易号码或订单号码来获取认证令牌,然后可以提交请求以获取金额信息,并附带一些验证。请参考YouTube视频以获取完整理解。

use zfhassaan\Alfapay\AlfaPay;

public function get_token(){
    // generate random transaction/order number
    $transNum = rand(0,17866120);
            
    // get AuthToken from AlfaPay API
    $alfa       = new AlfaPay();
    $response   = $alfa->setTransactionReferenceNumber($transNum)->getToken();
    //
    if( $response != null && $response->success == 'true' ) {
        return $response->AuthToken;
    } else {
        // log error
        if( $response == null ) {
            abort(403, 'Error: Timeout connection. Auth Token not generated.');
        } else {
            abort(403, 'Error: '.$response->ErrorMessage.'. Auth Token does not generated.');
        }
    }
}

交易进行中的代码片段

public function process(){
     $alfa->setAuthToken($this->get_token());
     $alfa->setCurrency('PKR');
     $alfa->setTransactionReferenceNumber($request->TransctionReferenceNumber);
     $alfa->setTransactionType($request->TransactionTypeId);
     $alfa->setAmount($request->Amount);
     $alfa->setMobileNumber($request->MobileNumber);
     $alfa->setEmail($request->Email);
     $alfa->setCountryCode('164'); // Pakistan = 164
     $alfa->sendTransactionRequest();
    //  return $alfa->sendTransactionRequest();
    $transactionResponse = $alfa->sendTransactionRequest();
    if($transactionResponse != null && $transactionResponse->success = 'true') {
        $TransactionReferenceNumber = $transactionResponse->TransactionReferenceNumber;
        $TransactionTypeId = $transactionResponse->TransactionTypeId;
        $HashKey = $transactionResponse->HashKey;
        $AuthToken = $request->AuthToken;
        // Can return it in a view to send next request for OTP
        // It depends on the developer how to utilize it. 
    }
    abort(404,$transactionResponse);
}

OTP请求(或继续支付)

public function otp(Request $request) {
    $this->validate($request,[
        'OTP' => 'required',
        'HashKey' => 'required',
        'TransactionTypeId'=>'required', 
        'TransactionReferenceNumber'=>'required',
    ]);

    $alfa = new AlfaPay();
    $alfa->setCurrency('PKR');
    $alfa->setTransactionReferenceNumber($request->TransactionReferenceNumber);
    $alfa->setTransactionType($request->TransactionTypeId);
    $alfa->setHashKey($request->HashKey);
    $alfa->setSMSOTP($request->OTP);
    $alfa->setAuthToken($request->AuthToken);

    $processResponse = $alfa->processTransaction();
    if($processResponse != null && property_exists($processResposne, 'response_code')) 
    {
        try{
            $currency = $alfa->getCurrency('PKR');
            $paidAmount = $processResponse->transaction_amount;
            $apiResponse = serialize($processResponse);
            session()->flash('success', 'Payment Success');
            // Return with currency, paid Amount , apiResponse, ProcessResponse or 
            // compact it in views to show Thank you ( Order Confirmation page )
        } catch(\Exception $e) {
            abort(403, 'Error: ', $e->getMessage());
        }
    } else {
        abort(403, 'Error: '.$processResponse->ErrorMessage.'. Transaction OTP not completed');
    }
}

测试

composer test

变更日志

请参阅CHANGELOG以获取有关最近更改的更多信息。

安全性

如果您发现任何安全相关的问题,请通过naeemins@gmail.com发送电子邮件,而不是使用问题跟踪器。

致谢

The repository is forked from codesocolock and fixed to work with PHP 8.1 and Laravel 9

许可证

MIT许可证(MIT)。有关更多信息,请参阅许可证文件