გადახდის პროცესი
სასტუმრო პანელში წყვეტს, რომელ გადახდის ტიპებს იღებს ონლაინ ჯავშნებისთვის. დაჯავშნის სისტემა ამ სიას აჩვენებს და თითოეული ტიპისთვის განსხვავებულ გზას მიჰყვება. ამ სახელმძღვანელოში აღწერილია გადახდის ოთხი ტიპი და თითოეულისთვის საჭირო ნაბიჯები.
გადახდის ტიპების სია#
curl "https://test.hms.gen.tr/external/online/payment/type?hotelID=1000" \
-H "Authorization: Bearer $HMS_TOKEN"{
"success": true,
"count": 3,
"items": [
{
"title": "Pay at Hotel",
"title_translate": "odeme.otelde_odeme",
"typeID": 1
},
{
"title": "Bank Transfer",
"title_translate": "odeme.havale",
"typeID": 3
},
{
"title": "Online Card Payment",
"title_translate": "odeme.online_odeme",
"typeID": 10
}
]
}| typeID | ტიპი | რა ხდება |
|---|---|---|
1 | გადახდა სასტუმროში | თანხა არ ჩამოიჭრება; ჯავშანი პირდაპირ გადაიცემა. |
3 | საბანკო გადარიცხვა | სტუმარს სასტუმროს საბანკო ანგარიშები ეჩვენება; ჯავშანი გადაიცემა სტატუსით „გადახდის მოლოდინში“. |
9 | საკრედიტო ბარათი (გარანტია) | ბარათის მონაცემები HMS-ს ჯავშანთან ერთად PaymentCard ველში გადაეცემა; თანხას ბარათიდან სასტუმრო ჩამოჭრის. |
10 | ონლაინ გადახდა (ვირტუალური POS) | HMS იწყებს გადახდის სესიას; სტუმარი პროვაიდერის გადახდის გვერდზე გადადის და შემდეგ თქვენს returnUrl მისამართზე ბრუნდება. |
ტიპი 1 · გადახდა სასტუმროში#
დამატებითი ნაბიჯი საჭირო არ არის. დადასტურების მისაღებად შეგიძლიათ ენდპოინტი გამოიძახოთ:
{
"success": true,
"message": "payment_at_the_hotel"
}ტიპი 3 · საბანკო გადარიცხვა#
მიიღეთ საბანკო ანგარიშები, რომლებიც სასტუმრომ ონლაინ გაყიდვებისთვის ჩართო, და აჩვენეთ ისინი სტუმარს:
curl -X POST "https://test.hms.gen.tr/external/online/payment/type/3" \
-H "Authorization: Bearer $HMS_TOKEN" \
-H "Content-Type: application/json" \
-d '{"hotelID": 1000}'{
"success": true,
"message": "payment_by_bank_transfer",
"banks": [
{
"companyName": "Ziraat Bank",
"holder": "Demo Turizm A.Ş.",
"branchName": "Denizli",
"branchNumber": "0123",
"bankAccountNumber": "12345678-5001",
"iban": "TR00 0001 0001 2345 6789 5001 01"
}
]
}თუ ანგარიში კონფიგურირებული არ არის, ბრუნდება bank_info_is_not_found; ამ შემთხვევაში ეს ტიპი სიიდან დამალეთ.
ტიპი 9 · საკრედიტო ბარათი#
ენდპოინტი მხოლოდ გატყობინებთ, რომ ბარათის მონაცემები უნდა შეაგროვოთ:
{
"success": true,
"message": "credit_card_info_should_be_requested"
}შეაგროვეთ ბარათის მონაცემები საკუთარ ფორმაში და ჯავშნის გადაცემისას გაგზავნეთ თითოეული RoomStays ელემენტის PaymentCard ველში:
{
"PaymentCard": {
"CardHolder": {
"fullname": "Ayşe Demir",
"address": "Kumsal Cad. No: 12",
"country": "Türkiye",
"city": "Antalya"
},
"cardNumber": "5571135571135575",
"expireDate": "0329",
"cardCode": "MasterCard",
"seriesCode": "000"
}
}ტიპი 10 · ონლაინ გადახდა#
დაიწყეთ გადახდის სესია სტუმრისა და კალათის მონაცემებით. ყველა ველი სავალდებულოა; გამოტოვებულ ველზე მიგანიშნებთ required_input_info_not_submitted და errors[].
curl -X POST "https://test.hms.gen.tr/external/online/payment/type/10" \
-H "Authorization: Bearer $HMS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"hotelID": 1000,
"totalPrice": 2330.00,
"orderID": "4811174883",
"returnUrl": "https://booking.example.com/payment/result",
"name": "Ayşe", "surname": "Demir",
"email": "[email protected]", "phone": "05551112233",
"city": "Denizli", "address": "Kumsal Cad. No: 12", "countryID": 1,
"baskets": [
{ "id": 2, "name": "Standard Room · Bed & Breakfast", "piece": 1, "price": 1930.00 },
{ "id": 12, "name": "Dinner", "piece": 1, "price": 400.00 }
]
}'const res = await fetch("https://test.hms.gen.tr/external/online/payment/type/10", {
method: "POST",
headers: { "Authorization": `Bearer ${process.env.HMS_TOKEN}`, "Content-Type": "application/json" },
body: JSON.stringify({
hotelID: 1000,
totalPrice: 2330.00,
orderID: "4811174883",
returnUrl: "https://booking.example.com/payment/result",
name: "Ayşe", surname: "Demir",
email: "[email protected]", phone: "05551112233",
city: "Denizli", address: "Kumsal Cad. No: 12", countryID: 1,
baskets: [
{ id: 2, name: "Standard Room · Bed & Breakfast", piece: 1, price: 1930.00 },
{ id: 12, name: "Dinner", piece: 1, price: 400.00 }
]
})
});
const data = await res.json();
if (!data.success) throw new Error(data.message + " " + (data.errors || []).join(", "));
// data.code არის HTML ფრაგმენტი, რომელიც სტუმარს პროვაიდერთან გადაიყვანს: გამოსახეთ იგი უცვლელად თქვენს გადახდის გვერდზე
res.send(paymentPageTemplate({ providerHtml: data.code }));{
"success": true,
"message": "payment_order_code",
"code": "<form method=\"post\" action=\"https://vpos.provider.example/3d\"><input type=\"hidden\" name=\"orderId\" value=\"4811174883\"> … </form><script>document.forms[0].submit()</script>"
}დაბრუნებული code HTML ფრაგმენტია: სასტუმროს ვირტუალური POS-ის პროვაიდერის მიხედვით ეს შეიძლება იყოს ავტომატურად გაგზავნადი 3D Secure ფორმა, window.location გადამისამართების სკრიპტი ან ჩაშენებული გადახდის ფორმა (მაგ. iyzico). გამოსახეთ ფრაგმენტი უცვლელად თქვენს გადახდის გვერდზე; ნუ ეცდებით მის გარჩევას. სტუმარი გადახდას პროვაიდერთან ასრულებს და თქვენს returnUrl მისამართზე ბრუნდება; შედეგი მისამართზე დამატებული მოთხოვნის სტრიქონის პარამეტრებით გადმოიცემა (sonuc=1 წარმატება, sonuc=0 წარუმატებლობა). თქვენი შეკვეთის ნომერი (orderID) გადახდის ჩანაწერთან ერთად ინახება; დაბრუნებისას შეუსაბამეთ იგი თქვენს ჩანაწერს და ჯავშანი მხოლოდ წარმატებული გადახდის შემთხვევაში გადაეცით.
| ველი | შენიშვნა |
|---|---|
totalPrice | უნდა ემთხვეოდეს კალათის ჯამს; სწორედ ეს თანხა გადაეცემა პროვაიდერს. |
orderID | უნდა იყოს უნიკალური. ჯავშნის ID მნიშვნელობის გამოყენება ანგარიშსწორების შეჯერებას ამარტივებს. |
countryID | id ქვეყნების სიიდან. |
baskets[] | ერთი ხაზი თითოეულ ოთახზე ან დამატებით სერვისზე. id ოთახის ტიპის / პაკეტის ID-ია, piece — რაოდენობა, price — ერთეულის ფასი. |
ვირტუალური POS-ის მონაცემების პირდაპირ გამოყენება#
თუ გსურთ, პროვაიდერს HMS-ის გადახდის გვერდის ნაცვლად საკუთარი სერვერიდან დაუკავშირდეთ, ენდპოინტი ვირტუალური POS-ის მონაცემები აბრუნებს მერჩანტის ID-ს, გასაღებებსა და პროვაიდერის კოდს. ეს საიდუმლო მონაცემებია: გამოიყენეთ ისინი მხოლოდ სერვერის მხარეს და ეს მიდგომა წინასწარ შეათანხმეთ HMS-თან.
გადახდის შემდეგ#
- 10 ტიპისთვის ჯავშანი გადაეცით გადახდის დადასტურების შემდეგ; წარუმატებელი გადახდისას ჯავშანს ნუ გადასცემთ.
- 3 ტიპისთვის ჯავშანი დაუყოვნებლივ გადაეცით; გადარიცხვის მიღებისას სასტუმრო მას პანელში აღრიცხავს.
- ჯავშნის გადაცემისას
Total.amountAfterTaxesუნდა ემთხვეოდეს ჩამოჭრილ ან ჩამოსაჭრელ თანხას.