go get -u github.com/Ferrany1/yookassa-go-sdk
Простая программа для создания платежа и проверки его статуса. Данный способ вводит ограничение на метод платежа и подтверждение для клиента, но убирает необходимость приведения типов. Подойдет если на стороне сервиса будет реализован механизм определена фабрика для создания необходимых наборов методов платежей и подтверждений
package main
import (
"context"
"time"
"github.com/Ferrany1/yookassa-go-sdk/pkg/adapter"
"github.com/Ferrany1/yookassa-go-sdk/pkg/model/payment"
"github.com/Ferrany1/yookassa-go-sdk/pkg/model/payment/amount"
"github.com/Ferrany1/yookassa-go-sdk/pkg/model/payment/confirmation"
"github.com/Ferrany1/yookassa-go-sdk/pkg/model/payment/payment_method"
"github.com/Ferrany1/yookassa-go-sdk/pkg/model/payment/status"
)
func main() {
ctx, cancel := context.WithTimeout(context.Background(), time.Minute*10)
defer cancel()
kassa := adapter.NewKassaAdapter[payment_method.YooMoneyPaymentMethod, confirmation.RedirectConfirmation](
&adapter.Config{
ShopID: "ИДЕНТИФИКАТОР_МАГАЗИНА",
Token: "ПРИВАТНЫЙ_КЛЮЧ",
},
)
// Создание и настройка платежа.
request := payment.NewPaymentRequest[payment_method.YooMoneyPaymentMethod, confirmation.RedirectConfirmation]().
WithAmount(amount.NewAmount().WithFloatValue(10).WithCurrency(amount.RubCurrency)).
WithDescription("тестовый заказ").
WithSavePaymentMethod().
WithCapture().
WithPaymentMethodData(payment_method.NewYooMoneyPaymentMethod()).
WithConfirmation(confirmation.NewRedirectConfirmation().WithLocale(confirmation.RussianLocale))
// Отправка конфига и получение экземпляра платежа в ответ.
paymentResponse, err := kassa.PaymentRequest(ctx, request)
if err != nil {
panic(err)
}
// Вывод ссылки для оплаты.
println(paymentResponse.Confirmation.ConfirmationURL)
paymentID := paymentResponse.ID
// Ожидание оплаты и опрос сервера на предмет её совершения.
// Опрос заканчивается, если истекло время оплаты.
for i := 0; i < 100; i++ {
paymentResponse, err = kassa.GetPayment(ctx, paymentID)
if err != nil {
panic(err)
}
if paymentResponse.Paid {
println("Оплата прошла успешно.")
break
} else if paymentResponse.Status == status.Canceled {
println("Пользователь отменил оплату...")
}
time.Sleep(time.Second * 10)
}
}
package main
import (
"context"
"time"
"github.com/Ferrany1/yookassa-go-sdk/pkg/adapter"
"github.com/Ferrany1/yookassa-go-sdk/pkg/model/payment"
"github.com/Ferrany1/yookassa-go-sdk/pkg/model/payment/amount"
"github.com/Ferrany1/yookassa-go-sdk/pkg/model/payment/confirmation"
"github.com/Ferrany1/yookassa-go-sdk/pkg/model/payment/payment_method"
"github.com/Ferrany1/yookassa-go-sdk/pkg/model/payment/status"
)
func main() {
ctx, cancel := context.WithTimeout(context.Background(), time.Minute*10)
defer cancel()
kassa := adapter.NewKassaAdapter[payment_method.YooMoneyPaymentMethod, confirmation.RedirectConfirmation](
&adapter.Config{
ShopID: "ИДЕНТИФИКАТОР_МАГАЗИНА",
Token: "ПРИВАТНЫЙ_КЛЮЧ",
},
)
// Создание и настройка платежа.
request := payment.NewPaymentRequest[payment_method.YooMoneyPaymentMethod, confirmation.RedirectConfirmation]().
WithAmount(amount.NewAmount().WithFloatValue(10).WithCurrency(amount.RubCurrency)).
WithDescription("тестовый заказ").
WithSavePaymentMethod().
WithCapture().
WithPaymentMethodData(payment_method.NewYooMoneyPaymentMethod()).
WithConfirmation(confirmation.NewRedirectConfirmation().WithLocale(confirmation.RussianLocale))
// Отправка конфига и получение экземпляра платежа в ответ.
paymentResponse, err := kassa.PaymentRequest(ctx, request)
if err != nil {
panic(err)
}
// Вывод ссылки для оплаты.
println(paymentResponse.Confirmation.ConfirmationURL)
paymentID := paymentResponse.ID
paymentMethodID := ""
for i := 0; i < 100; i++ {
paymentResponse, err = kassa.GetPayment(ctx, paymentID)
if err != nil {
panic(err)
}
if paymentResponse.Paid {
paymentMethodID = paymentResponse.PaymentMethod.ID
println("Оплата прошла успешно 1.")
break
} else if paymentResponse.Status == status.Canceled {
println("Пользователь отменил оплату...")
}
time.Sleep(time.Second * 10)
}
request = payment.NewPaymentRequest[payment_method.YooMoneyPaymentMethod, confirmation.RedirectConfirmation]().
WithAmount(amount.NewAmount().WithFloatValue(10).WithCurrency(amount.RubCurrency)).
WithDescription("тестовый заказ 1.1").
WithSavePaymentMethod().
WithCapture().
WithPaymentMethodID(paymentMethodID)
paymentResponse, err = kassa.PaymentRequest(context.Background(), request)
if err != nil {
panic(err)
}
paymentID = paymentResponse.ID
for i := 0; i < 100; i++ {
paymentResponse, err = kassa.GetPayment(ctx, paymentID)
if err != nil {
panic(err)
}
if paymentResponse.Paid {
paymentMethodID = paymentResponse.PaymentMethod.ID
println("Оплата прошла успешно 1.1")
break
} else if paymentResponse.Status == status.Canceled {
println("Пользователь отменил оплату...")
}
time.Sleep(time.Second * 10)
}
}
Простая программа для создания платежа и проверки его статуса.
package main
import (
"context"
"time"
"github.com/Ferrany1/yookassa-go-sdk/pkg/adapter"
"github.com/Ferrany1/yookassa-go-sdk/pkg/model/payment"
"github.com/Ferrany1/yookassa-go-sdk/pkg/model/payment/amount"
"github.com/Ferrany1/yookassa-go-sdk/pkg/model/payment/confirmation"
"github.com/Ferrany1/yookassa-go-sdk/pkg/model/payment/status"
)
func main() {
ctx, cancel := context.WithTimeout(context.Background(), time.Minute*10)
defer cancel()
kassa := adapter.NewRawKassaAdapter(
&adapter.Config{
ShopID: "ИДЕНТИФИКАТОР_МАГАЗИНА",
Token: "ПРИВАТНЫЙ_КЛЮЧ",
},
)
// Создание и настройка платежа.
request := &payment.RawPaymentRequest{
RawPaymentRequestPart: payment.RawPaymentRequestPart{
Amount: &amount.Amount{
Value: "10.00",
Currency: "RUB",
},
Description: "тестовый заказ",
SavePaymentMethod: true,
Capture: true,
},
Confirmation: &map[string]interface{}{
"type": string(confirmation.RedirectConfirmationType),
"locale": string(confirmation.RussianLocale),
"return_url": "",
},
}
// Отправка конфига и получение экземпляра платежа в ответ.
paymentResponse, err := kassa.PaymentRequest(ctx, request)
if err != nil {
panic(err)
}
// Вывод ссылки для оплаты.
println(paymentResponse.Confirmation["confirmation_url"])
paymentID := paymentResponse.ID
// Ожидание оплаты и опрос сервера на предмет её совершения.
// Опрос заканчивается, если истекло время оплаты.
for i := 0; i < 100; i++ {
paymentResponse, err = kassa.GetPayment(ctx, paymentID)
if err != nil {
panic(err)
}
if paymentResponse.Paid {
println("Оплата прошла успешно.")
break
} else if paymentResponse.Status == status.Canceled {
println("Пользователь отменил оплату...")
}
time.Sleep(time.Second * 10)
}
}