devinweb/payment

1.0.0 2020-05-19 16:08 UTC

This package is auto-updated.

Last update: 2024-08-30 01:14:43 UTC


README

支付包提供了一种简单的方法来处理MENA地区的支付网关。

安装

此包需要Laravel 5.4或更高版本。如果您的Laravel版本大于5.4,则可以跳过以下两个步骤(2、3)(包自动发现5.5+)。

  1. 您可以通过Composer安装此包
composer require devinweb/payment
  1. 打开您的 config/app.php 并将以下内容添加到providers数组中
Devinweb\Payment\PaymentServiceProvider::class,
  1. 在相同的 config/app.php 中,将以下内容添加到aliases数组中
'Payment'   => Devinweb\Payment\Facades\Payment::class,
  1. 运行以下命令以发布包配置文件 config/payfort-payment.php
php artisan vendor:publish --provider="Devinweb\Payment\PaymentServiceProvider" --tag="config"

Payfort

要通过Payfort进行支付很简单,但在处理支付之前,需要设置您的 FrontEnd,您可以在 payment-boilerplate 仓库中检查。

配置(Payfort)

现在您可以将Payfort凭据添加到 app/config/payments/php

<?php

  'payfort' => [

        'callback_urls' => [
            'error-page' => '/api/error',
            'success-page' => '/api/success',
        ],
        'sandboxMode' => env('PAYFORT_SAND_BOX_MODE', true),

        /**
         * language used to specify the response language returned from payfort
         */
        'language' => env('LANGUAGE', 'en'),

        /**
         * your Merchant Identifier account (mid)
         */
        'merchantIdentifier' => env('MERCHANT_IDENTIFIER', ''),

        /**
         * your access code
         */
        'accessCode' => env('ACCESS_CODE', ''),

        /**
         * SHA Request passphrase
         */
        'SHARequestPhrase' => env('SHA_REQUEST_PASSPHRASE', ''),

        /**
         * SHA Response passphrase
         */
        'SHAResponsePhrase' => env('SHA_RESPONSE_PASSPHRASE', ''),

        /**
         * SHA Type (Hash Algorith)
         * expected Values ("sha1", "sha256", "sha512")
         */
        'SHAType' => env('SHA_TYPE', 'sha256'),

        /**
         * command
         * expected Values ("AUTHORIZATION", "PURCHASE")
         */
        'command' => env('COMMAND', 'AUTHORIZATION'),

        /**
         * order currency
         */
        'currency'   => env('CURRENCY', 'USD'),
    ]

路由(Payfort)

要使用Payfort,您需要三个路由

  1. 用于从前端提交数据到后端。
  2. 如果支付成功。
  3. 如果Payfort响应错误,则进行重定向。
<?php

  // App\Config\payments.php

  // you can configure you callback routes here

  'payfort' => [

        'callback_urls' => [
            'error-page' => '', // redirection to error page
            'success-page' => '', // redirection to success page
        ],
        // ...
  ]

您可以通过 Payment 门面访问支付。

<?php

  use Illuminate\Http\Request;

  Route::post('/payment', function (Request $request) {

    // ...

    $merchant_reference = rand(0, getrandmax());

    return Payment::use('payfort', $merchant_reference)->pay();

  });

所需参数(Payfort)

每个请求应包含 amountemailhold_name

<?php

  $request->add([
    'amount' => '',
    'email' => '',
    'hold_name' => ''
  ])

Payfort Apple Pay

您可以使用此包通过Payfort处理Apple Pay交易。

配置(Payfort Apple Pay)

您应将Payfort Apple Pay凭据添加到 app/confing/payments/php

<?php

'payfort_apple_pay' => [

        'sandboxMode'           => true,

        'language'              => 'ar',

        'merchantIdentifier'    => '',

        'accessCode'            => '',

        'SHARequestPhrase'      => '',

        'SHAResponsePhrase'     => '',

        'SHAType'               => 'sha256',

        'command'               => 'PURCHASE',

        'currency'              => 'SAR',

    ]

用法(Payfort Apple Pay)

要通过Payfort Apple Pay进行支付,与之前的方法相同,您可以使用。

 return Payment::use('payfort_apple_pay', $merchant_reference)->pay();

所需参数(Payfort Apple Pay)

要在请求负载中附加以使用Apple Pay的参数

{
    "apple_data": "",
    "apple_header": {
        "apple_ephemeralPublicKey": "",
        "apple_publicKeyHash": "",
        "apple_transactionId": "-"
    },
    "apple_paymentMethod": {
        "apple_displayName": "",
        "apple_network": "",
        "apple_type": ""
    },
    "apple_signature": "",
    "apple_version": "EC_v1",
    "digital_wallet": "APPLE_PAY",

    //package requirements
    "amount": 240,

    // optional data if you need them
    "email": "",
    "name": "",
    "phone": ""
}

通过ReactNative支付

如果您想通过webView在您的React Native移动应用中处理支付

function onNavigationStateChange() {
    // this method will be invoked each time the url changed
}

function onMessage() {
    // here you can handle the final result
}

return (
    <WebView
        source={{ html: html() }}
        onNavigationStateChange={onNavigationStateChange}
        javaScriptEnabled={true}
        domStorageEnabled={true}
        onMessage={onMessage}
        startInLoadingState
    />
);

在您的PHP控制器或路由中,您可以使用

<?php

  return Payment::use('payfort')->viaReactNative()->pay();

Payfort事件

我们知道Payfort可以通知商户,对于所有在交易上订阅的事件。我们需要首先将您的回调添加到Payfort仪表板中,然后您可以在应用程序中实现此回调。

<?php

  use Illuminate\Http\Request;

  Route::match(['get', 'post'], '/payfort-callback', function(Request $request) {

    return Payment::use('payfort')->webHook();

  });

此webHook可以调用两个内置事件。有两个事件可供您监听。

示例

查看此存储库 payment-boilerplate

成功响应

[
  "response_code" => "18000",
  "card_number" => "400555******0001",
  "card_holder_name" => "CUSTOMER_HOLDER_NAME",
  "signature" => "d641d71c13da959cba92371d70c686b602e2b62796dfca5286c760c6b5d9e3b1",
  "merchant_identifier" => "YOUR_MERCHANT_IDENTIFIER",
  "expiry_date" => "2105",
  "access_code" => "YOUR_ACCESS_CODE",
  "language" => "ar",
  "service_command" => "TOKENIZATION",
  "response_message" => "عملية ناجحة",
  "merchant_reference" => "278245857",
  "token_name" => "dced12c0eeeb444185dcc450b917d987",
  "return_url" => "YOUR_RETURN_URL"
  "card_bin" => "400555"
  "status" => "18"
]

失败响应

[
"response_code" => "00016",
"card_number" => "400550******0001",
"card_holder_name" => "CUSTOMER_HOLDER_NAME",
"signature" => "signature_value",
"merchant_identifier" => "YOUR_MERCHANT_IDENTIFIER",
"expiry_date" => "2105",
"access_code" => "YOUR_ACCESS_CODE",
"language" => "ar",
"service_command" => "TOKENIZATION",
"response_message" => "رقم البطاقة غير صحيح",
"merchant_reference" => "158151963",
"return_url" => "YOUR_RETURN_URL",
"status" => "00",
"error_msg" => "رقم البطاقة غير صحيح",
]

测试

composer test

变更日志

有关最近更改的更多信息,请参阅CHANGELOG

贡献

有关详细信息,请参阅CONTRIBUTING

致谢

关于Devinweb

Devinweb是一家位于摩洛哥泰图安的Web应用程序公司。我们的网站

许可证

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