Докинг платежного интерфейса Пакистана с помощью PHP/Node.js
Руководство по подбору платежного интерфейса Пакистана (PHP/Node.js)
Распространенные пакистанские платежные шлюзы
Основные платежные шлюзы в Пакистане включают:
- JazzCash
- EasyPaisa
- HBL Pay
- UBL Omni
- MCB Lite
Я собираюсь использовать JazzCash в качестве примера, чтобы показать, как взаимодействовать с PHP и Node.js.
Докинг API JazzCash (реализация на PHP)
1. параметры конфигурации
$merchant_id = "YOUR_MERCHANT_ID";
$password = "YOUR_PASSWORD";
$integrity_salt = "YOUR_INTEGRITY_SALT";
$return_url = "https://yourwebsite.com/return.php";
2. Создание функций запроса
function createJazzCashRequest($amount, $orderId) {
глобальные $merchant_id, $password, $integrity_salt, $return_url;
date_default_timezone_set('Asia/Karachi').
$dateTime = new DateTime();
$pp_TxnDateTime = $dateTime->format('YmdHis');
// Истечение срока действия сделки в часах (необязательно)
$expiryHours = '24';
// Подготовьте массив данных для генерации хэша
$dataToHash = array(
'pp_Version' => '1.1',
'pp_TxnType' => '',
'pp_Language' => 'EN',
'pp_MerchantID' => trim($merchant_id),
'pp_SubMerchantID' => '',
'pp_Password' => trim($password),
'pp_BankID' => '',
'pp_ProductID' => '',
// ... Другие необходимые поля...
);
return json_encode(array(
...
));
}
Пример реализации на Node.js
Установите необходимые зависимости
npm install axios crypto-js uuid moment express body-parser dotenv cors helmet morgan winston express-validator http-status-codes bcryptjs jsonwebtoken mongoose joi pm2 compression rate-limit-redis redis connect-redis session-file-store express-session cookie-parser csurf node- cache request-promise tough-cookie cheerio puppeteer sharp multer aws-sdk nodemailer socket.io passport passport-local passport-jwt @hapi/joi@ 17.x.x helmet xss-clean hpp express-mongo-sanitize toobusy-js node-fetch form-data xml2js fast-xml-parser soap q libphonenumber-js country-list countries-list currency-formatter accounting money decimal.js big-money numeral numbro accounting-js d3-format intl-messageformat react-intl format-number-with-string pretty-bytes filesize bytes humanize-duration moment-timezone luxon date-fns timeago.js chrono-node later node- schedule agenda bull kue bee-queue rabbitmq amqplib ioredis pg mysql mysql2 sqlite3 tedious mssql oracledb knex bookshelf sequelize typeorm mongoose mongodb rethinkdb couchbase dynamodb elasticsearch firebase-admin pouchdb rxjs lodash underscore ramda immutable async bluebird q promise p-retry p -limit p-map p-progress p-defer delay sleep-promise retry axios-retry superagent got needle request request request-promise-native fetch isomorphic- fetch cross-fetch ky bent undici ws websocket socket.io-client sockette feathers faye pusher pusher
Докинг API JazzCash (реализация на Node.js)
1. установка необходимых зависимостей
npm install axios crypto moment uuid qs
2. параметры конфигурации (создание .env
Документация)
JAZZCASH_MERCHANT_ID=ваш_коммерческий_ид
JAZZCASH_PASSWORD=ваш_пароль
JAZZCASH_INTEGRITY_SALT=ваша_соль
JAZZCASH_RETURN_URL=https://yourdomain.com/payment/callback
3. Код реализации ядра Node.js
const crypto = require('crypto');
const moment = require('moment');
const axios = require('axios');
require('dotenv').config();
класс JazzCashPayment {
constructor() {
this.config = {
merchantId: process.env.JAZZCASH_MERCHANT_ID,
пароль: process.env.JAZZCASH_PASSWORD,
integritySalt: process.env.JAZZCASH_INTEGRITY_SALT,
returnUrl: process.env.JAZZCASH_RETURN_URL,
apiUrl: 'https://sandbox.jazzcash.com.pk/ApplicationAPI/API/Payment/DoTransaction'
};
}
// Сгенерируйте безопасный хэш, необходимый для JazzCash
generateSecureHash(data) {
const sortedKeys = Object.keys(data).sort();
let message = '';
sortedKeys.forEach(key => {
if(key ! == 'pp_SecureHash') {
message += `${key}=${data[key]}&`;
}
});
message += this.config.integritySalt;
return crypto.createHash('sha256')
.update(message)
.digest('hex')
.toUpperCase();
}
// Создание полезной нагрузки запроса на оплату
async createPaymentRequest(orderData) {
const dateTimeString = moment().format('YYYYMMDDHHmmss');
const payload = {
pp_Version: "1.1",
pp_TxnType: "MWALLET",
pp_Language: "EN".
// ... Другие необходимые поля...
pp_Amount : orderData.amount.toString(),
pp_BillReference : orderData.orderId,
// ... Другие поля ...
};
payload.pp_SecureHash = this.generateSecureHash(payload);
попробуйте {
const response await axios.post(this.config.apiUrl, qs.stringify(payload),{
заголовки:{
'Content-Type':'application/x-www-form-urlencoded'
}
});
return response.data;
} catch(error){
throw new Error(`Запрос на оплату не прошел ${error.message}`);
}
}
}
module.exports=new JazzCashPayment();
Пример обработки обратного вызова в PHP
Когда платеж будет завершен, JazzCash перезвонит вам с помощью return_url.
<?php
function verifyCallback($postData){
$received_hash=$post_data['pp_Secure_Hash'];
unset($post_data['pp_Secure_Hash']);
ksort($post_data).
$message='';
foreach ($post_data as $key => $value){
if(!empty($value)){
$message . = "$key=$value&" ;
}
}
$message.=INTEGRITY_SALT;
// Проверьте, совпадает ли хэш...
если(strtoupper(hash("sha256",$message))==$received_hash){
//Проверьте успешность, обработайте логику заказа...
} else{
header("HTTP/1.0 Invalid Request"); exit();
}
? >
Пример обработки обратных вызовов в Node.js
router.post('/payment/callback',async(req,res)=>{
попытка{
const receivedHash=req.body.pp_Secure_Hash;
удалить req.body.pp.Secure.Hash;
// Сортировка и построение строк сообщений...
const calculatedhash=crypto.createHah(...) ;
if(calculatedhash===receivedhash.toUpperCase()){
await Order.updateOne(
{orderid}.
{$set:{status: "paid"}}
);
res.sendStatus(200);
}else{
res.status(400).send("Неверный обратный вызов");
}
}catch(err){
console.error(err);
res.sendStatus(500);}
});
Рекомендации по безопасности
Будьте внимательны во время выполнения:
✅ HTTPS -Убедитесь, что все соединения передают данные с использованием шифрования SSL/TLS.
✅ проверка ввода -Строго проверяет все входящие параметры и значения сумм.
✅ Ведение журнала -Подробное протоколирование запросов и ответов на транзакции для аудита и устранения неполадок.
✅ обработка ошибок -Элегантно перехватывайте и обрабатывайте исключения, чтобы избежать раскрытия конфиденциальной информации.
Надеюсь, эти фрагменты кода помогут вам интегрировать пакистанскую платежную систему без проблем! Для получения более подробной документации или при возникновении специфических проблем вы можете обсудить их далее.