Извините, если вопрос звучит глупо и изобразительно. Я хочу создать интеграцию платежей с 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>
Я хочу выполнить следующие шаги:
- Создание параметров и значений запроса платежа на моем сервере
{
$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
);
}
Сортировка параметров следующим образом: Ascii (значение) Сортировка ключей данных для отправки
Объединить значения в порядке отсортированных ключей, например,
// 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
- Создайте полную строку для хеширования, объединив результат из шага 3 с вашим секретным ключом
// This creates a the full string to be hashed:
$completeHash = $hashedPayload.$seckey;
echo "$completeHash\n";
- Создайте хеш-строку Sha256 и отправьте на страницу своего клиента.
// Generate the sha256 hash of the concatenated strings
$hash = hash('sha256', $completeHash);
echo "$hash";
- Передайте хэш 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>
- Запрос транзакции
Sandbox :
https://xpresspayonlineapisandbox.xpresspayments.com:8680/v1/payments/query
Live :
https://xpresspayonlineapi.xpresspayments.com:8680/v1/payments/query
Как мне добиться этого в моем контроллере и представлении. Я даже не знаю, как его запустить.