Laravel - Интеграция платежей с использованием Laravel - PullRequest
0 голосов
/ 18 июня 2019

Извините, если вопрос звучит глупо и изобразительно. Я хочу создать интеграцию платежей с XpressPayment, используя Laravel. Я новичок в Laravel и даже не знаю, как идти дальше.

Все ответы находятся в объектах JSON. Для каждого ответа отправляются соответствующие коды статуса HTTP.

Http Статус Описание 200 ok Запрос успешно выполнен

При выполнении платежа с карты / счета и запроса с сервера, мне нужно будет использовать шифрование 3DES и нашу функцию getKey для генерации ключа шифрования.

Я создал класс модели и контроллер


<?php

// this is the getKey function that generates an encryption Key for you by passing your Secret Key as a parameter.
function getKey($seckey){
  $hashedkey = md5($seckey);
  $hashedkeylast12 = substr($hashedkey, -12);

  $seckeyadjusted = str_replace("XPSECK-", "", $seckey);
  $seckeyadjustedfirst12 = substr($seckeyadjusted, 0, 12);

  $encryptionkey = $seckeyadjustedfirst12.$hashedkeylast12;
  return $encryptionkey;

}



function encrypt3Des($data, $key)
 {
  $encData = openssl_encrypt($data, 'DES-EDE3', $key, OPENSSL_RAW_DATA);
        return base64_encode($encData);
 }

Модель: PaymentLog

class PaymentLog extends Model
{
    protected $fillable = [
        'publicKey',
        'hash',
        'transactionId',
        'amount',
        'currency',
        'country',
        'email',
        'phone',
        'firstName',
        'lastName',
       'callbackurl',
        'logoURL'
        ];
}

Контроллер:

class PaymentController extends Controller
{

}

Я хочу встроить xpresspayonline на мою страницу с помощью функции xpressPayonlineSetup. Функция возвращает ответ внутри обратного вызова, и вы можете выбрать свой идентификатор транзакции и отправить его на сервер, чтобы выполнить проверку, прежде чем указывать значение для транзакции.

    Inline Code Snippet
       <script>
         const ref = Math.random() + 877298;
             function submitData() {
                 var email = document.getElementById("email").value;
                 const body = {
                                 "publicKey": "XPPUBK-fba882fb30efff88ca35a1c86553fd78-X",
                                 "logoURL": "https://api.elasticemail.com/userfile/5d028e25-bd86-4559-b7c2-31e5870bbbf9/accessnew.jpg",
                                 "transactionId": ref,
                                 "amount": 100,
                                 "currency": "NGN",
                                 "country": "NG",
                                 "email": "aminu.kabunu@xpresspayments.com",
                                 "phoneNumber": "",
                                 "firstName": "Aminu",
                                 "lastName": "Cincin",
                                 "hash": "",
                                 "callbackurl":"https://www.sample.xpresspayments.com/resp"
                             } 
                 xpressPayonlineSetup(body);
             }
       </script>

Я хочу выполнить следующие шаги:

  1. Создание параметров и значений запроса платежа на моем сервере
{
    $pb_key = "XPPUBK-fba882fb30efff88ca35a1c86553fd78-X"; 

      $amount_in_naira = 900; 

      $email = "user@example.com"; 

      $firstname = "user"; 

      $customer_lastname = "example"; 

      $transactionId = "MV-1838383-JH"; 

      $seckey = "XPSECK-ed1742556a97edb6289d88f4f96279ac-X"; 

      $country = "NG"; 

      $currency = "NGN"; 

      $callback_url = "https://www.sample.xpresspayments.com/resp"; 
      $logo_url = "https://www.sample.xpresspayments.com/resp"; 

      $customer_phone = "+2348185615980"; 

      $options = array( 
          "publicKey" => $pb_key, 
          "amount" => $amount_in_naira, 
          "email" => $customer_email, 
          "firstName" => $customer_firstname, 
          "transactionId" => $transactionId, 
          "lastName" => $customer_lastname, 
          "country" => $country, 
          "currency" => $currency, 
          "phoneNumber" => $customer_phone,
          "callbackUrl" =>$callback_url,
          "logoURL"=>$logo_url

      );
}
  1. Сортировка параметров следующим образом: Ascii (значение) Сортировка ключей данных для отправки

  2. Объединить значения в порядке отсортированных ключей, например,

// The payload is rearranged and the values concatenated in the order of the sorted keys.

$hashedPayload = '';

foreach($options as $key => $value){

    $hashedPayload .= $value;
}

// The above sample would output a string that looks like this:

100https://www.sample.xpresspayments.com/respNGNGNaminu.kabunu@xpresspayments.comAminuCincin877298.9539540611

// Concatenate your public key with the output string:

 XPPUBK-fba882fb30efff88ca35a1c86553fd78-X100https://www.sample.xpresspayments.com/respNGNGNaminu.kabunu@xpresspayments.comAminuCincin877298.9539540611 

  1. Создайте полную строку для хеширования, объединив результат из шага 3 с вашим секретным ключом
// This creates a the full string to be hashed:

$completeHash = $hashedPayload.$seckey;

echo "$completeHash\n";
  1. Создайте хеш-строку Sha256 и отправьте на страницу своего клиента.
// Generate the sha256 hash of the concatenated strings

$hash = hash('sha256', $completeHash);

echo "$hash";
  1. Передайте хэш xpresspayonline. При использовании html embed передайте его как data-hash.
<form>
  <button type="button" style="cursor:pointer;" value="Pay Now" id="submit">Pay Now</button>
</form>

<script type="text/javascript" src="https://xpresspayonlinepluginssandbox.xpresspayments.com/js/plugin.js"></script> //replace this with when pointing to live <script type="text/javascript" src="https://plugins.xpresspayonline.com/js/plugin.js"></script>
<script>
  document.addEventListener("DOMContentLoaded", function(event) {

    const paybutton =  document.getElementById("submit");

    paybutton.addEventListener("click", function(e) {

    const API_publicKey = "XPPUBK-fba882fb30efff88ca35a1c86553fd78-X";    
                var email = document.getElementById("email").value;
                const body = {
                    "publicKey": API_publicKey,
                    "transactionId": ref,
                    "amount": 100,
                    "currency": "NGN",
                    "country": "NG",
                    "email": "a@email.com",
                    "phoneNumber": "",
                    "firstName": "Lara",
                    "lastName": "Janice",
                    "hash": "",
                    "callbackurl":"http://localhost:4300"
                }
                xpressPayonlineSetup(body);
                });
    })
</script>
  1. Запрос транзакции
Sandbox :
 https://xpresspayonlineapisandbox.xpresspayments.com:8680/v1/payments/query
 Live :
 https://xpresspayonlineapi.xpresspayments.com:8680/v1/payments/query

Как мне добиться этого в моем контроллере и представлении. Я даже не знаю, как его запустить.

...