zfhassaan/easypaisa

解锁EasyPaisa支付网关在Laravel 9和Laravel 10中的强大功能。无缝且安全地接受支付,助力您的业务在数字时代蓬勃发展。体验无障碍集成,为您的客户提供顺畅的结账体验。

v1.0.5 2023-05-31 09:29 UTC

This package is auto-updated.

Last update: 2024-09-29 17:55:21 UTC


README

EASYPAISA Payment Gateway

Latest Version on Packagist MIT Licensed Total Downloads Hits

免责声明

这是一个非官方的Easypaisa API支付网关。此仓库仅创建用于帮助开发者简化集成过程。

安装

该包提供两种使用方式。

  • 直接结账
  • 托管结账。

要使用直接结账(REST API),您可以调用已定义的函数sendRequest();要使用托管结账(重定向方法),您可以调用sendHostedRequest()方法将用户重定向到easypaisa支付页面。

要安装EasyPaisa包,请按照以下步骤操作

通过Composer运行以下命令安装包

composer require zfhassaan/easypaisa

运行以下命令发布包配置文件

php artisan vendor:publish

使用所需配置值更新.env文件

EASYPAISA_MODE=sandbox
EASYPAISA_SANDBOX_URL=
EASYPAISA_PRODUCTION_URL=
EASYPAISA_TYPE=direct
EASYPAISA_SANDBOX_USERNAME=
EASYPAISA_SANDBOX_PASSWORD=
EASYPAISA_SANDBOX_STOREID=
EASYPAISA_PRODUCTION_USERNAME=
EASYPAISA_PRODUCTION_PASSWORD=
EASYPAISA_PRODUCTION_STOREID=
EASYPAISA_PAYMENT_TYPE=MA
EASYPAISA_SANDBOX_HASHKEY=
EASYPAISA_PRODUCTION_HASHKEY=
EASYPAISA_CALLBACK_URL=
EASYPAISA_HOSTED_CHECKOUT=

用法

直接结账

要使用EasyPaisa支付网关执行直接结账,请使用以下代码

try {
    $easypaisa = new Easypaisa;
    $response = $easypaisa->sendRequest($request->all());
    $responseCode = $response['responseCode'];
    $responseDesc = $response['responseDesc'];

    if ($responseCode != '0000') {
        return response()->json(['status' => false, 'message' => $responseDesc], Response::HTTP_NOT_ACCEPTABLE);
    }

    $result = [
        'status_code' => '00',
        'status_msg' => $response['responseDesc'],
        'transaction_id' => $response['transactionId'],
        'code' => $response['responseCode'],
        'message' => $response['responseDesc'],
        'basket_id' => strip_tags($request['orderId'])
    ];
    return response()->json($result);
} catch (\Exception $e) {
    return response()->json(['status' => false, 'message' => 'Error Processing Your Request.'], 500);
}

Easypaisa类的sendRequest()方法处理支付请求。它以输入数组的形式接收请求数据,并从EasyPaisa支付网关返回响应。

包文件:Easypaisa.php sendRequest()方法在Easypaisa包文件中定义。它通过将数据发送到EasyPaisa API处理支付请求。

$credentials = $this->getCredentials();

$data = [
    'orderId' => strip_tags($request['orderId']),
    'storeId' => $this->getStoreId(),
    'transactionAmount' => strip_tags($request['amount']),
    'transactionType' => 'MA',
    'mobileAccountNo' => strip_tags($request['mobileAccountNo']),
    'emailAddress' => strip_tags($request['emailAddress'])
];
$response = Http::timeout(60)->withHeaders([
    'credentials' => $credentials,
    'Content-Type' => 'application/json'
])->post($this->getApiUrl(), $data);

$result = $response->json();

return $result;

getCredentials()方法根据配置设置检索凭据

托管结账

要使用EasyPaisa支付网关执行托管结账,请使用以下代码

$data['amount'] = strip_tags($request['amount']);  //Last two digits will be considered as Decimal
        $data['orderRefNum'] = strip_tags($request['orderRefNum']); // You can customize it (only Max 20 Alpha-Numeric characters)
        $data['paymentMethod'] = 'InitialRequest';
        $data['postBackURL'] = $this->getCallbackUrl();
        $data['storeId'] = $this->getStoreId();
        $data['timeStamp'] = $this->getTimestamp();
        $hashk = $this->gethashRequest($data);
        $data['encryptedHashRequest'] = $hashk;
        $data['mobileAccountNo'] = '';
        return $this->getCheckoutUrl($data);

gethashRequest()方法在加密后检索HashKey。getCheckoutUrl()方法检索将用户重定向到Easypaisa门户的结账URL。

Hosted.blade.php

     <form action="" method="POST" target="_blank">
@csrf
        <input name="transactionAmount" value=""/>
        <input name="orderId" value="" hidden = "true"/>
        <input name="storeId" value="" hidden = "true"/>
        <input name="mobileAccountNo" value=""/>
        <input name="emailAddress" value=""/>
        <input name="postBackURL" value="" hidden = "true"/>
        <input type="submit" src=”checkout-button-with-logo.png border=”0” name= “pay”>
    </form>

控制器

public function index(Request $request)
    {

        $easypaisa = new Easypaisa();
        $response = $easypaisa->sendHostedRequest($request->all());
        return redirect()->away($response,302);

    }