coder79/laravel-paymob

Laravel-paymob 是一个用于通过 Paymob 支付网关处理支付的简单包。

dev-master 2019-05-31 14:02 UTC

This package is auto-updated.

Last update: 2024-09-11 07:04:31 UTC


README

PayMob(We Accept) 集成

目录

  1. 安装

  2. 在 PayMob 服务器上进行交易步骤

    1. API 身份验证请求(服务器端)
    2. 订单注册请求(服务器端)
    3. 支付密钥生成请求(服务器端)
    4. 准备客户端代码以执行支付请求(Web 客户端和移动应用程序)(客户端)
      1. 网站/网络应用程序的 Iframe
      2. 移动客户端
  3. PayMobController

  4. 其他 PayMob 方法

  5. 待办事项

  6. 许可

安装

通过 composer 需要

$ composer require coder79/laravel-paymob:dev-master

config/app.php 文件中

'providers' => [
    ...
    Coder79\PayMob\PayMobServiceProvider::class,
    ...
];

'aliases' => [
    ...
    'PayMob' => Coder79\PayMob\Facades\PayMob::class,
    ...
];

首先,在 WeAccept 门户 上创建一个账户,运行以下命令以生成 PayMob 配置文件

$ php artisan vendor:publish    

然后,在 config/paymob.php 文件中填写凭据。确保在仪表板上创建一个 iframe 并获取用于支付请求的集成 ID。

在集成详细信息中填写处理回调和响应回调路由,使用 PayMobController 中的 processedCallbackinvoice 方法中的路由

在 PayMob 服务器上进行交易步骤

  1. API 身份验证请求
  2. 订单注册请求
  3. 支付密钥生成请求
  4. 准备客户端代码以执行支付请求(Web 客户端和移动应用程序)
  5. 商家通知端点
  6. 交易响应端点

您可以通过参考PayMob 在线指南 获取更多信息。

1. API 身份验证请求(服务器端)

在此步骤中,您需要向 PayMob 的身份验证 API 发送 POST 请求以获取身份验证令牌

使用 PayMob Facade 来发送请求。

$auth = PayMob::authPaymob();
// Run this method to get a sample response of auth request.
PayMob::sample('authPaymob');

此方法从 config/paymob.php 文件中获取凭据,因此首先填写 usernamepassword 以进行此身份验证请求。

2. 订单注册请求(服务器端)

在此步骤中,您将在 Paymob Accept 上注册一个订单,以便您可以稍后使用交易支付。

$paymobOrder = PayMob::makeOrderPaymob(
    $auth->token, // this is token from step 1.
    $auth->profile->id, // this is the merchant id from step 1.
    $order->totalCost * 100, // total amount by cents/piasters.
    $order->id, // your (merchant) order id.
	$request->user()->name, // Order User Name.
    $request->user()->phone,// Order User phone.
    $request->user()->email // Order User email.

);
// Run this method to get a sample response of make order request.
PayMob::sample('makeOrderPaymob');

将返回的 paymob 订单 ID 存储在您的数据库中,以便您将来使用此 ID 进行交易。

3. 支付密钥生成请求(服务器端)

在此步骤中,您将获得一个 payment_key 令牌。此密钥将用于对您的支付请求进行身份验证。

$paymentKey = PayMob::getPaymentKeyPaymob(
    $auth->token, // from step 1.
    $order->totalCost * 100, // total amount by cents/piasters.
    $order->paymob_order_id, // paymob order id from step 2.
    // For billing data
    $user->email, // optional
    $user->firstname, // optional
    $user->lastname, // optional
    $user->phone, // optional
    $city->name, // optional
    $country->name // optional
);
// Run this method to get a sample response of payment key request.
PayMob::sample('getPaymentKeyPaymob');

4. 准备客户端代码以执行支付请求(Web 客户端和移动应用程序)(客户端)

既然您已经获得了支付密钥,您需要准备您的结账体验(即客户端代码)。

网站/网络应用程序的 Iframe

PayMob 推荐的 iframe

<form id="paymob_checkout">
    <label for="">Card number</label>
      <input type="text" value="4987654321098769" paymob_field="card_number">
      <br>
      <label for="">Card holdername</label>
      <input type="text" value="Test Account" paymob_field="card_holdername">
      <br>
      <label for="">Card month</label>
      <input type="text" value="05" paymob_field="card_expiry_mm">
      <br>
      <label for="">Card year</label>
      <input type="text" value="21" paymob_field="card_expiry_yy">
      <br>
      <label for="">Card cvn</label>
      <input type="text" value="123" paymob_field="card_cvn">
      <input type="hidden" value="CARD" paymob_field="subtype">
      <input type="checkbox" value="tokenize" name="save card"> <label for="save card">save card</label>

      <input type="submit" value="Pay">
      <br>
</form>
<iframe src="https://accept.paymobsolutions.com/api/acceptance/iframes/{{config('paymob.iframe_id')}}?payment_token={{$paymentKey->token}}"></iframe>

移动客户端

对于移动应用程序,您需要导入 Accept 原生 iOS 或 Android SDK 以进行支付和/或保存卡详细信息。

请通过电子邮件 support@weaccept.co 请求所需的 SDK。有关更多信息,请访问 PayMob 移动指南

$payment = PayMob::makePayment(
    $paymentKey->token, // payment key token from step 3.
    $request->card_number,
    $request->card_holdername,
    $request->card_expiry_mm,
    $request->card_expiry_yy,
    $request->card_cvn,
    $order->paymob_order_id, // PayMob order id from step 2.
    $user->firstname,
    $user->lastname,
    $user->email,
    $user->phone
);
// Run this method to get a sample response of make payment for API request.
// processedCallback is for the post response to your processed callback route from PayMob.
PayMob::sample('processedCallback');
// responseCallback is for the Get response to your response callback route from PayMob.
PayMob::sample('responseCallback');

您可以使用一些 测试卡 进行测试支付。

您可以通过运行 PayMob::sample() 来查看可用的示例。

PayMobController

我们在 PayMobController 中有 4 个方法。

首先使用 checkingOut 方法显示带有 iframe 的支付表单页面。或者,对于移动客户端,简单地使用 payAPI 方法进行支付。

然后,我们有一个用于捕获 PayMob 服务器 POST 回调响应的 processedCallback 方法,以及用于捕获 GET 回调响应并显示您的发票页面的 invoice 方法。

将所有 #code ... 替换为您的逻辑。

别忘了为这些方法创建路由,并在 PayMob 控制面板的集成详情中保存 processedCallbackinvoice 路由。

其他 PayMob 方法

有一些 GET 方法可以从 PayMob 获取您的数据。

1. 获取所有订单

PayMob::getOrders(
    $auth->token, // token from step 1.
    $page // optional for pagination, by default set to 1
);

2. 获取特定订单

PayMob::getOrder(
    $auth->token, // token from step 1.
    $order->paymob_order_id // PayMob order id from step 2.
);

3. 获取所有交易

PayMob::getTransactions(
    $auth->token, // token from step 1.
    $page // optional for pagination, by default set to 1
);

4. 获取特定交易

PayMob::getTransaction(
    $auth->token, // token from step 1.
    $transactionId // PayMob transaction id from step 4.
);

5. 对授权交易进行捕获

如果您的交易类型是 auth(不是 standalone),那么您必须通过 capture 方法捕获您的付款。

PayMob::capture(
    $auth->token, // token from step 1.
    $transactionId, // the returned id from step 4.
    $totalCost * 100 // total price/cost in cents/piasters.
);

待办事项

  1. 发票页面。
  2. 示例交易周期。
  3. 获取所有订单/交易页面。
  4. 后端退款。
  5. 带有 JS 验证的 Iframe。
  6. 3D secure 顶级重定向请求。

许可

Laravel PayMob 是一个在 MIT 许可条款下免费分发的软件。