waad/zaincash

ZainCash支付网关集成包API Laravel

v11.0.0 2024-04-04 21:53 UTC

README

这是一个用于集成ZainCash支付网关API的Laravel包。用于伊拉克第纳尔在伊拉克的本地金融交易。此包基于官方ZainCash API文档。您可以在(https://docs.zaincash.iq)找到官方文档。

Total Downloads Latest Stable Version License

🎀 要求

📌 安装

composer require waad/zaincash

将配置文件发布到 config/zaincash.php

php artisan vendor:publish --tag="zaincash"

config/zaincash.php 中更新zaincash配置或从 .env 文件


配置到 .env 文件

ZAINCASH_MSISDN=9647835077893                  # Test Credentials
ZAINCASH_MERCHANT_ID=5ffacf6612b5777c6d44266f  # Test Credentials
ZAINCASH_SECRET=$2y$10$h................       # Test Credentials
ZAINCASH_TEST=true                             # default true 
ZAINCASH_PREFIX_ORDER_ID=wa3d_                 # default wa3d_
ZAINCASH_LANGUAGE=ar                           # optional default ar
ZAINCASH_IS_REDIRECT=false                     # optional default false
ZAINCASH_MIN_AMOUNT=1000                       # optional default 1000
ZAINCASH_TEST_URL=https://test.zaincash.iq/    # optional
ZAINCASH_LIVE_URL=https://api.zaincash.iq/     # optional
ZAINCASH_TIMEOUT=10                            # optional
ZAINCASH_VERIFY_SSL=true                       # optional
php artisan optimize


🍔 使用

使用 ZainCash 面板或类示例

面板
<?php

namespace App\Http\Controllers\Api;

use App\Http\Controllers\Controller;
use App\Http\Requests\Payment
\InitialPaymentRequest;
use Illuminate\Support\Str;
use Waad\ZainCash\Facades\ZainCash;

class PaymentController extends Controller
{
    /**
     * Create Request Transaction
     *
     * @param InitialPaymentRequest $request
     * @return \Illuminate\Http\JsonResponse
     */
    public function initialTransaction
    (InitialPaymentRequest $request)
    {
        $zainCashPayment = 
            ZainCash::setAmount($request->amount)
            ->setServiceType('Book')
            ->setOrderId(Str::random(36))
            ->setIsTest(true)
            ->setIsReturnArray(true);

        return response()->json( 
            $zainCashPayment->createTransaction()
            );
    }
}
<?php

namespace App\Http\Controllers\Api;

use App\Http\Controllers\Controller;
use App\Http\Requests\Payment
\InitialPaymentRequest;
use Illuminate\Support\Str;
use Waad\ZainCash\ZainCash;

class PaymentController extends Controller
{
    /**
     * Create Request Transaction
     *
     * @param InitialPaymentRequest $request
     * @return \Illuminate\Http\JsonResponse
     */
    public function initialTransaction
    (InitialPaymentRequest $request)
    {
        $zainCashPayment = ZainCash::make()
            ->setAmount($request->amount)
            ->setServiceType('Book')
            ->setOrderId(Str::random(36))
            ->setIsTest(true)
            ->setIsReturnArray(true);

        return response()->json( 
        $zainCashPayment->createTransaction()
        );
    }
}

- 获取器设置器 属性表

⚠️ 重要 列表示该属性经常使用且没有默认值。相反,我们可以更改它,但它将采用来自 config/zaincash.php 的默认值。


- 从创建交易到完成支付步骤

步骤 1 - 创建交易

    $zainCashPayment = ZainCash::make()
        ->setAmount($request->amount)
        ->setServiceType('Book')
        ->setOrderId(Str::random(36))
        ->setIsTest(true);
  • setAmount($amount) : 设置交易的金额(伊拉克第纳尔)。金额必须大于或等于配置文件中指定的最小金额。
  • setServiceType($serviceType) : 设置交易的服务类型。服务类型必须是以下之一:BookFoodGroceryPharmacyTransportationOther
  • setOrderId($orderId) : 设置交易的订单ID。订单ID对于每笔交易必须是唯一的。
  • setIsTest($isTest) : 设置使用ZainCash API的环境。测试环境设置为 true,生产环境设置为 false
  • setIsReturnArray(bool) : 设置交易的返回类型。设置为 true 以返回 数组,设置为 false 以返回 object stdClass。默认值为 false
  • createTransaction() : 创建交易并返回交易详情(《数组》或《object stdClass》)。

    $transaction = $zainCashPayment->createTransaction();

响应示例

{
  "source": "web",
  "type": "MERCHANT_PAYMENT",
  "amount": "1000",
  "to": "5ffacf6612b5777c6d44266f",
  "serviceType": "Book",
  "lang": "ar",
  "orderId": "wa3d_Q9IpdkNw7EVypwLRuE2PDDoVLA4FPhAjhlyO",
  "currencyConversion": {},
  "referenceNumber": "RGUR9Q",
  "credit": false,
  "status": "pending",
  "reversed": false,
  "createdAt": "2023-11-18T08:24:32.467Z",
  "updatedAt": "2023-11-18T08:24:32.467Z",
  "id": "655874c00227c4d2ec58f710"
}
// if return array use ->setIsReturnArray(true);

    $transactionId = $transaction['id'];

// if return object use ->setIsReturnArray(false); -- default
    $transactionId = $transaction->id;


步骤 2 - 检查交易

    $zainCashPayment = ZainCash::make()
        ->setTransactionID($transactionID)
        ->setIsReturnArray(true);
  • setTransactionID($transactionID) : 设置交易的交易ID。
  • setIsReturnArray(bool) : 设置交易的返回类型。设置为 true 以返回 数组,设置为 false 以返回 object stdClass。默认值为 false
  • checkTransaction() : 检查交易并返回交易详情(《数组》或《object stdClass》)。

    $transactionDetails = $zainCashPayment->checkTransaction();

根据状态响应示例

{
    "to": {
        "name": "Karrar",
        "msisdn": "9647835077893",
        "currency": "IQD",
        "deleted": false,
        "pay_by_reference": "1",
        "createdAt": "2021-01-10T09:56:54.180Z",
        "updatedAt": "2021-12-22T13:01:02.531Z",
        "id": "5ffacf6612b5777c6d44266f"
    },
    "source": "web",
    "type": "MERCHANT_PAYMENT",
    "amount": "1000",
    "serviceType": "Book",
    "lang": "ar",
    "orderId": "wa3d_2eTDlz8umPE3DwtocL5O8Xpe10yLH4pepci2",
    "currencyConversion": [],
    "referenceNumber": "MDJN1I",
    "credit": false,
    "status": "pending",  // pending, pending_otp, completed, failed, cancel
    "reversed": false,
    "createdAt": "2023-11-18T11:37:16.574Z",
    "updatedAt": "2023-11-18T11:37:16.574Z",
    "id": "6558a1ec0227c4d2ec58f717"
}
*****************************************
{
  "to": {
    ....
  },
  ...
  "status": "pending_otp", // <--- status pending_otp after processing
  "sofOwnerId": 18482,
  "traveldiscount": "10000",
  "from": "9647802999569",
  "onCustomerFees": "50000000",
  "onMerchantFees": "0",
  "totalFees": 500,
  ...
}
*****************************************
{
  "to": {
    ...
  },
  ...
  "status": "completed", // <--- status completed after complete (Payment)
  "sofOwnerId": 18482,
    "traveldiscount": "1000",
    "from": "9647802999569",
    "onCustomerFees": "50000000",
    "onMerchantFees": "0",
    "totalFees": 500,
    "operationDate": "2023-11-22T18:23:52.270Z",
    "operationId": "1173300",
  ...
}
*****************************************
{
  "to": {
    ...
  },
  ...
  "status": "failed", // <--- status failed that mean there is (expiration or a wrong)
  "sofOwnerId": 18482,
  "traveldiscount": "9900",
  "from": "9647802999569",
  "onCustomerFees": "50000000",
  "onMerchantFees": "0",
  "totalFees": 500,
  "due": "Not enough credit on balance",
  ...
}
*****************************************
{
  "to": {
    ...
  },
  ...
  "status": "cancel", // <--- status cancel it mean the user cancel the transaction
  "sofOwnerId": 18482,
  "traveldiscount": "10000",
  "from": "9647802999569",
  "onCustomerFees": "50000000",
  "onMerchantFees": "0",
  "totalFees": 500,
  "due": "transaction_already_submitted",
  ...
}
// if return array use ->setIsReturnArray(true);

    $status = $transactionDetails['status'];
    $name = $transactionDetails['to']['name'];

// if return object use ->setIsReturnArray(false); -- default
    $status = $transactionDetails->status;
    $name = $transactionDetails->to->name;


步骤 3 - 处理交易

    $zainCashPayment = ZainCash::make()
        ->setTransactionID($transactionID)
        ->setIsReturnArray(true);
  • setTransactionID($transactionID) : 设置交易的交易ID。
  • setIsReturnArray(bool) : 设置交易的返回类型。设置为 true 以返回 数组,设置为 false 以返回 object stdClass。默认值为 false
  • processingTransaction($phonenumber, $pin) : 处理交易并返回交易详情(《数组》或《object stdClass》)。

$processingDetails = $zainCashPayment->processingTransaction("9647802999569", '1234');

根据成功响应示例

{
  "success": 1,
  "transactionid": "655883cd0227c4d2ec58f712",
  "initialAmount": "1000",
  "totalFees": 500,
  "discount": "1000",
  "total": 1500,
  "onCustomerFees": "50000000",
  "onMerchantFees": "0"
}
********************************************
{
  "success": 0,
  "error": "العملية قد قدمت من قبل"
}
********************************************
{
  "success": 0,
  "error": "رقم المحفظة-الهاتف أو الرمز السري غير صحيح"
}
// if return array use ->setIsReturnArray(true);

    $success = $processingDetails['success'];

// if return object use ->setIsReturnArray(false); -- default
    $success = $processingDetails->success;


步骤 4 - 完成交易

    $zainCashPayment = ZainCash::make()
        ->setTransactionID($transactionID)
        ->setIsReturnArray(true);
  • setTransactionID($transactionID) : 设置交易的交易ID。
  • setIsReturnArray(bool) : 设置交易的返回类型。设置为 true 以返回 数组,设置为 false 以返回 object stdClass。默认值为 false
  • payTransaction($phonenumber, $pin, $otp) : 完成支付交易并返回交易详情(《数组》或《object stdClass》)。

$payDetails = $zainCashPayment->payTransaction("9647802999569", '1234', '1111');

根据成功响应示例

{
  "success": 1,
  "msg": "succesful_transaction"
}
********************************************
{
  "success": 0,
  "msg": "You have entered an incorrect OTP. In the next try, please enter the correct PIN delivered to your mobile by SMS "
}
********************************************
{
  "success": 0,
  "msg": "Not enough credit on balance"
}
// if return array use ->setIsReturnArray(true);

    $success = $payDetails['success'];

// if return object use ->setIsReturnArray(false); -- default
    $success = $payDetails->success;


步骤 5 - 取消交易

    $zainCashPayment = ZainCash::make()
        ->setTransactionID($transactionID)
        ->setIsReturnArray(true);
  • setTransactionID($transactionID) : 设置交易的交易ID。
  • setIsReturnArray(bool) : 设置交易的返回类型。设置为 true 以返回 数组,设置为 false 以返回 object stdClass。默认值为 false
  • cancelTransaction() : 取消交易并返回交易详情(《数组》或《object stdClass》)。

$cancelDetails = $zainCashPayment->cancelTransaction();

根据成功响应示例

{
  "success":0,
  "msg":"لقد قمت بالغاء العملية"
}
************************************
{
  "success":0,
  "msg":"العملية قد قدمت من قبل"
}
// if return array use ->setIsReturnArray(true);

    $success = $cancelDetails['success'];

// if return object use ->setIsReturnArray(false); -- default
    $success = $cancelDetails->success;


🧔 作者

作者: Waad Mawlood

Email: waad_mawlood@outlook.com

⚖️ 许可证

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