Примеры выполнения запросов
cURL
- cURL unix
- curl --key crt/bspb_test.key --cert crt/bspb_test.pem \ -H "Content-Type: application/json" \ -H "Authorization:Basic base64Credentials" \ -d "{ \"order\": { \"typeRid\": \"Purchase\", \"amount\": \"100.00\", \"currency\": \"RUB\", \"title\": \"Название заказа\", \"description\": \"Описание заказа\", \"hppRedirectUrl\":\"https://pgtest.bspb.ru/status\" } }" https://pgtest.bspb.ru:5443/order
base64Credentials: username:password в Base64-URL (Аутентификация)#!/bin/bash # Проверка установлен ли jq if ! command -v jq &> /dev/null; then echo "Ошибка: jq не установлен" echo "Установите jq для обработки JSON-ответов:" echo " - Ubuntu/Debian: sudo apt-get install jq" echo " - macOS: brew install jq" echo " - Fedora/CentOS: sudo yum install jq" exit 1 fi RESPONSE=$(curl --key crt/bspb_test.key --cert crt/bspb_test.pem \ -H "Content-Type: application/json" \ -H "Authorization: Basic $(echo -n 'username:password' | base64)" \ -d @- https://pgtest.bspb.ru:5443/order <<'EOF' { "order": { "typeRid": "Purchase", "amount": "100.00", "currency": "RUB", "title": "Название заказа", "description": "Описание заказа", "hppRedirectUrl": "https://pgtest.bspb.ru/status" } } EOF ) # Проверка успешности запроса if [ $? -eq 0 ]; then # Извлечение данных через jq HPP_URL=$(echo "$RESPONSE" | jq -r '.order.hppUrl') ORDER_ID=$(echo "$RESPONSE" | jq -r '.order.id') PASSWORD=$(echo "$RESPONSE" | jq -r '.order.password') FINAL_URL="${HPP_URL}?id=${ORDER_ID}&password=${PASSWORD}" echo "Итоговая ссылка: $FINAL_URL" else echo "Ошибка при выполнении запроса" fi - cURL Windows
- curl --key crt/bspb_test.key --cert crt/bspb_test.pem -H "Content-Type: application/json" -H "Authorization:Basic base64Credentials" -d "{"order": {"typeRid": "Purchase", "amount": "100.00", "currency": "RUB", "title": "Название заказа", "description": "Описание заказа", "hppRedirectUrl":"https://pgtest.bspb.ru/status"}}" https://pgtest.bspb.ru:5443/order
base64Credentials: username:password в Base64-URL (Аутентификация)@echo off setlocal enabledelayedexpansion REM Проверка установлен ли jq where jq >nul 2>nul if %ERRORLEVEL% NEQ 0 ( echo Ошибка: jq не установлен echo Установите jq для обработки JSON-ответов: echo - Скачайте с https://stedolan.github.io/jq/download/ echo - Или используйте: choco install jq exit /b 1 ) REM Выполнение запроса и сохранение ответа curl --key crt/bspb_test.key --cert crt/bspb_test.pem ^ -H "Content-Type: application/json" ^ -H "Authorization: Basic base64Credentials" ^ -d "{\"order\": {\"typeRid\": \"Purchase\", \"amount\": \"100.00\", \"currency\": \"RUB\", \"title\": \"Название заказа\", \"description\": \"Описание заказа\", \"hppRedirectUrl\":\"https://pgtest.bspb.ru/status\"}}" ^ https://pgtest.bspb.ru:5443/order > response.json REM Проверка успешности запроса if %ERRORLEVEL% EQU 0 ( REM Извлечение данных через jq for /f "delims=" %%i in ('jq -r ".order.hppUrl" response.json') do set HPP_URL=%%i for /f "delims=" %%i in ('jq -r ".order.id" response.json') do set ORDER_ID=%%i for /f "delims=" %%i in ('jq -r ".order.password" response.json') do set PASSWORD=%%i REM Формирование итоговой ссылки set FINAL_URL=!HPP_URL!?id=!ORDER_ID!^&password=!PASSWORD! echo Итоговая ссылка: !FINAL_URL! REM Удаление временного файла del response.json ) else ( echo Ошибка при выполнении запроса ) endlocal
base64Credentials: username:password в Base64-URL (Аутентификация)
Языки программирования
<?php
// URL, на который нужно отправить запрос
$pay_url = "https://pgtest.bspb.ru:5443/order";
// Данные для авторизации
$username = '';
$password = '';
$credentials = $username . ':' . $password;
$base64Credentials = base64_encode($credentials);
// Путь к ключу и сертификату
$certificate_path = './crt/bspb_test.pem';
$private_key_path = './crt/bspb_test.key';
// Данные для отправки в формате JSON
$body_request = [
'order' => [
'typeRid' => 'Purchase',
'amount' => 100.00,
'currency' => 'RUB',
'title' => 'Название заказа',
'description' => 'Описание заказа',
'hppRedirectUrl' => 'https://pgtest.bspb.ru/status'
]
];
// Инициализация cURL-сессии
$ch = curl_init($pay_url);
// Настройки POST-запроса
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($body_request));
// Установка заголовков для отправки JSON и базовой авторизации
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Content-Type: application/json',
'Authorization: Basic ' . $base64Credentials
]);
// Настройка для использования сертификата и ключа при выполнении запроса
curl_setopt($ch, CURLOPT_SSLCERT, $certificate_path);
curl_setopt($ch, CURLOPT_SSLKEY, $private_key_path);
// Настройка для получения ответа от сервера
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
// Выполнение запроса и получение результата
$response = curl_exec($ch);
// Проверка на наличие ошибок
if(curl_errno($ch)) {
echo 'Ошибка cURL: ' . curl_error($ch);
} else {
// Обработка полученного ответа
$responseData = json_decode($response, true);
if ($responseData) {
// Проверка наличия объекта order в ответе
if (isset($responseData['order'])) {
$order = $responseData['order'];
// Проверка наличия необходимых полей в объекте order
if (isset($order['hppUrl'], $order['id'], $order['password'])) {
// Формирование итоговой ссылки
$hppUrl = $responseData['order']['hppUrl'];
$order_id = $responseData['order']['id'];
$order_password = $responseData['order']['password'];
$finalUrl = "$hppUrl?id=$order_id&password=$order_password";
// Использование итоговой ссылки
echo "Итоговая ссылка: $finalUrl<br>";
} else {
echo 'Объект order не содержит необходимых данных.';
}
} else {
echo 'Ответ не содержит объекта order.';
}
} else {
echo 'Ошибка разбора JSON-ответа.';
}
}
// Закрытие cURL-сессии
curl_close($ch);
import requests
from requests.auth import HTTPBasicAuth
# URL, на который нужно отправить запрос
pay_url = 'https://pgtest.bspb.ru:5443'
# Заголовки запроса
headers = {'Content-Type': 'application/json'}
# Данные для авторизации: username, password
auth = HTTPBasicAuth('', '')
# Путь к ключу и сертификату
certificate_path = 'crt/bspb_test.pem'
private_key_path = 'crt/bspb_test.key'
# Тело запроса
create_order = {
'order': {
'typeRid': 'Purchase',
'amount': 100.00,
'currency': 'RUB',
'title': 'Название заказа',
'description': 'Описание заказа',
'hppRedirectUrl': 'https://pgtest.bspb.ru/status'
}
}
# Выполнение запроса и получение результата
response = requests.post(f'{pay_url}/order', headers=headers, auth=auth, cert=(certificate_path, private_key_path),
json=create_order)
# Проверка кода ответа
if response.status_code == 200:
responseData = response.json()
# Проверка наличия объекта order в ответе
if 'order' in responseData:
order = responseData['order']
# Проверка наличия необходимых полей в объекте order
if 'hppUrl' in order and 'id' in order and 'password' in order:
hppUrl = order['hppUrl']
order_id = order['id']
order_password = order['password']
# Формирование итоговой ссылки
final_url = f'{hppUrl}?id={order_id}&password={order_password}'
# Использование итоговой ссылки
print(f'Итоговая ссылка: {final_url}')
else:
print('Объект order не содержит необходимых данных.')
else:
print('Ответ не содержит объекта order.')
else:
print(f'Ошибка {response.status_code} при запросе: {response.text}')
const https = require('https');
const fs = require('fs');
// URL, на который отправляется запрос
const url = 'https://pgtest.bspb.ru:5443/order';
// Данные для отправки в формате JSON
const data = {
order: {
typeRid: 'Purchase',
amount: 100,
currency: 'RUB',
title: 'Название заказа',
description: 'Описание заказа',
hppRedirectUrl: 'https://pgtest.bspb.ru/status'
}
};
const options = {
method: 'POST',
// Путь к ключу и сертификату
key: fs.readFileSync('./crt/bspb_test.key'),
cert: fs.readFileSync('./crt/bspb_test.pem'),
// Установка заголовков для отправки JSON и базовой авторизации
headers: {
'Content-Type': 'application/json',
'Authorization': 'Basic ' + Buffer.from('' + ':' + '').toString('base64')
}
};
// Отправка запроса и обработка ответа
const req = https.request(url, options, (res) => {
let responseData = '';
res.on('data', (chunk) => {
responseData += chunk;
});
res.on('end', () => {
// Проверка кода ответа
if (res.statusCode === 200) {
try {
const parsedData = JSON.parse(responseData);
// Проверка наличия объекта order в ответе
if (parsedData.order) {
const order = parsedData.order;
// Проверка наличия необходимых полей в объекте order
if (order.hppUrl && order.id && order.password) {
// Формирование итоговой ссылки
const finalUrl = `${order.hppUrl}?orderid=${order.id}&password=${order.password}`;
// Использование итоговой ссылки
console.log(`Итоговая ссылка: ${finalUrl}`);
} else {
console.log('Объект order не содержит необходимых данных.');
}
} else {
console.log('Ответ не содержит объекта order.');
}
} catch (error) {
console.error('Ошибка:', error);
}
} else {
console.error(`Ошибка ${res.statusCode} при запросе: ${responseData}`);
}
});
});
req.on('error', (error) => {
console.error('Ошибка запроса:', error);
});
req.write(JSON.stringify(data));
req.end();
package main
import (
"bytes"
"crypto/tls"
"encoding/base64"
"encoding/json"
"fmt"
"io/ioutil"
"net/http"
"strconv"
)
func main() {
// URL, на который отправляется запрос
url := "https://pgtest.bspb.ru:5443/order"
// Данные для отправки в формате JSON
data := map[string]interface{}{
"order": map[string]interface{}{
"typeRid": "Purchase",
"amount": 100,
"currency": "RUB",
"title": "Название заказа",
"description": "Описание заказа",
"hppRedirectUrl": "https://pgtest.bspb.ru/status",
},
}
jsonData, err := json.Marshal(data)
if err != nil {
fmt.Println("Ошибка при кодировании в JSON:", err)
return
}
req, err := http.NewRequest("POST", url, bytes.NewBuffer(jsonData))
if err != nil {
fmt.Println("Ошибка при создании запроса:", err)
return
}
// Данные для авторизации: username:password
auth := "" + ":" + ""
basicAuth := "Basic " + base64.StdEncoding.EncodeToString([]byte(auth))
// Заголовки запроса
req.Header.Set("Authorization", basicAuth)
req.Header.Set("Content-Type", "application/json")
// Путь к ключу и сертификату
cert, err := tls.LoadX509KeyPair("./crt/bspb_test.pem", "./crt/bspb_test.key")
if err != nil {
fmt.Println("Ошибка при загрузке ключа и сертификата:", err)
return
}
tlsConfig := &tls.Config{
Certificates: []tls.Certificate{cert},
}
transport := &http.Transport{
TLSClientConfig: tlsConfig,
}
client := &http.Client{
Transport: transport,
}
resp, err := client.Do(req)
if err != nil {
fmt.Println("Ошибка при отправке запроса:", err)
return
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
fmt.Println("Ошибка при чтении ответа:", err)
return
}
// Проверка кода ответа
if resp.StatusCode == http.StatusOK {
var responseData map[string]interface{}
if err := json.Unmarshal(body, &responseData); err != nil {
fmt.Println("Ошибка при разборе JSON:", err)
return
}
// Проверка наличия объекта order в ответе
order, ok := responseData["order"].(map[string]interface{})
if !ok {
fmt.Println("Ответ не содержит объекта order")
return
}
// Проверка наличия hppUrl, password в объекте order
hppUrl, hppUrlExists := order["hppUrl"].(string)
password, passwordExists := order["password"].(string)
// Проверка наличия id в объекте order
rawID, idIsNumber := order["id"]
var id string
// Проверка типа (float, string) id в объекте order
if idIsNumber {
idFloat, ok := rawID.(float64)
if !ok {
fmt.Println("ID не является числом")
return
}
id = strconv.FormatFloat(idFloat, 'f', -1, 64)
} else {
idString, ok := rawID.(string)
if !ok {
fmt.Println("ID не является строкой")
return
}
id = idString
}
if hppUrlExists && passwordExists {
// Формирование итоговой ссылки
finalURL := fmt.Sprintf("%s?orderid=%s&password=%s", hppUrl, id, password)
// Использование итоговой ссылки
fmt.Println("Итоговая ссылка:", finalURL)
} else {
fmt.Println("Объект order не содержит необходимых данных")
}
} else {
fmt.Printf("Ошибка %d при запросе: %s\n", resp.StatusCode, string(body))
}
}
// Зависимости (Maven / Gradle):
// Source: https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind
package ru.bspb.example;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import javax.net.ssl.KeyManagerFactory;
import javax.net.ssl.SSLContext;
import java.io.FileInputStream;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.nio.charset.StandardCharsets;
import java.security.KeyStore;
import java.util.Base64;
import java.util.logging.Logger;
public class RequestExample {
private static final Logger LOGGER = Logger.getLogger(RequestExample.class.getName());
static void main() {
try {
// URL, на который нужно отправить запрос
String payUrl = "https://pgtest.bspb.ru:5443/order";
// Данные для авторизации
String username = "";
String password = "";
String credentials = username + ":" + password;
String base64Credentials = Base64.getEncoder().encodeToString(credentials.getBytes(StandardCharsets.UTF_8));
// Путь к ключу и сертификату (PKCS12 формат)
String certificatePath = "./crt/bspb_test.p12";
String certificatePassword = "";
// Данные для отправки в формате JSON
String jsonBody = """
{
"order": {
"typeRid": "Purchase",
"amount": 100.00,
"currency": "RUB",
"title": "Название заказа",
"description": "Описание заказа",
"hppRedirectUrl": "https://pgtest.bspb.ru/status"
}
}
""";
// Загрузка клиентского сертификата
KeyStore keyStore = KeyStore.getInstance("PKCS12");
try (FileInputStream fis = new FileInputStream(certificatePath)) {
keyStore.load(fis, certificatePassword.toCharArray());
}
KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
kmf.init(keyStore, certificatePassword.toCharArray());
SSLContext sslContext = SSLContext.getInstance("TLS");
sslContext.init(kmf.getKeyManagers(), null, null);
// Создание HTTP клиента с SSL контекстом
HttpClient client = HttpClient.newBuilder()
.sslContext(sslContext)
.build();
// Создание запроса
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create(payUrl))
.header("Content-Type", "application/json")
.header("Authorization", "Basic " + base64Credentials)
.POST(HttpRequest.BodyPublishers.ofString(jsonBody))
.build();
// Выполнение запроса и получение результата
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
// Проверка кода ответа
if (response.statusCode() == 200) {
String responseBody = response.body();
// Парсинг JSON с помощью Jackson
ObjectMapper objectMapper = new ObjectMapper();
JsonNode rootNode = objectMapper.readTree(responseBody);
// Проверка наличия объекта order в ответе
if (rootNode.has("order")) {
JsonNode orderNode = rootNode.get("order");
// Проверка наличия необходимых полей в объекте order
if (orderNode.has("hppUrl") && orderNode.has("id") && orderNode.has("password")) {
String hppUrl = orderNode.get("hppUrl").asText();
String orderId = orderNode.get("id").asText();
String orderPassword = orderNode.get("password").asText();
// Формирование итоговой ссылки
String finalUrl = String.format("%s?id=%s&password=%s", hppUrl, orderId, orderPassword);
LOGGER.info(() -> String.format("Итоговая ссылка: %s", finalUrl));
} else {
LOGGER.severe("Объект order не содержит необходимых данных.");
}
} else {
LOGGER.severe("Ответ не содержит объекта order.");
}
} else {
LOGGER.severe(() -> String.format("Ошибка %d при запросе: %s%n", response.statusCode(), response.body()));
}
} catch (InterruptedException e) {
LOGGER.severe(() -> String.format("Ошибка при выполнении запроса: %s", e.getMessage()));
Thread.currentThread().interrupt();
} catch (Exception e) {
LOGGER.severe(() -> String.format("Ошибка при выполнении запроса: %s", e.getMessage()));
}
}
}
# URL, на который отправляется запрос
$url = "https://pgtest.bspb.ru:5443/order"
# Данные для авторизации
$username = ""
$password = ""
$base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes("$($username):$($password)"))
# Путь к ключу и сертификату
$certPath = ".\crt\bspb_test.pem"
$keyPath = ".\crt\bspb_test.key"
# Создание сертификата из PEM и KEY файлов
# Примечание: PowerShell требует .pfx формат, необходима конвертация
# openssl pkcs12 -export -out bspb_test.pfx -inkey bspb_test.key -in bspb_test.pem
$pfxPath = ".\crt\bspb_test.pfx"
$pfxPassword = "" # Пароль, указанный при создании .pfx
try {
# Загрузка сертификата
$cert = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2($pfxPath, $pfxPassword)
# Данные для отправки в формате JSON
$body = @{
order = @{
typeRid = "Purchase"
amount = 100.00
currency = "RUB"
title = "Название заказа"
description = "Описание заказа"
hppRedirectUrl = "https://pgtest.bspb.ru/status"
}
} | ConvertTo-Json
# Заголовки запроса
$headers = @{
"Content-Type" = "application/json"
"Authorization" = "Basic $base64AuthInfo"
}
# Выполнение запроса
$response = Invoke-RestMethod -Uri $url -Method Post -Body $body -Headers $headers -Certificate $cert -ContentType "application/json"
# Проверка наличия объекта order в ответе
if ($response.order) {
$order = $response.order
# Проверка наличия необходимых полей в объекте order
if ($order.hppUrl -and $order.id -and $order.password) {
# Формирование итоговой ссылки
$finalUrl = "$($order.hppUrl)?id=$($order.id)&password=$($order.password)"
# Использование итоговой ссылки
Write-Host "Итоговая ссылка: $finalUrl"
} else {
Write-Host "Объект order не содержит необходимых данных."
}
} else {
Write-Host "Ответ не содержит объекта order."
}
}
catch {
Write-Host "Ошибка при выполнении запроса: $($_.Exception.Message)"
# Детальная информация об ошибке
if ($_.Exception.Response) {
$statusCode = $_.Exception.Response.StatusCode.value__
Write-Host "Код ошибки: $statusCode"
}
}
21 мая 2026