91 lines
2.8 KiB
Go
91 lines
2.8 KiB
Go
|
package handlers
|
|||
|
|
|||
|
import (
|
|||
|
"bitbucket.org/skeris/treasurer/dal"
|
|||
|
"bitbucket.org/skeris/treasurer/payway"
|
|||
|
"github.com/gorilla/mux"
|
|||
|
"net/http"
|
|||
|
)
|
|||
|
|
|||
|
type RequestCreatePayout struct {
|
|||
|
RequesterID string `json:"requester_id" validate:"required"`
|
|||
|
Amount float64 `json:"amount" validate:">0"` // Сумма для вывода
|
|||
|
Destination string `json:"destination" validate:"required"` // Счет на который выводим
|
|||
|
PayWayID string `json:"payway_id" validate:"required"` // Присылать именно ID, а не shortName! id: fk1, sn: fk
|
|||
|
PayoutType string `json:"payout_type" validate:"required"` // Тип вывода: payoutType.CommonID
|
|||
|
Currency string `json:"currency"`
|
|||
|
Description string `json:"description"` // Пока не придумал что сюда заполнять
|
|||
|
Email string `json:"email"`
|
|||
|
Phone string `json:"phone"`
|
|||
|
IsFake bool `json:"is_fake"`
|
|||
|
OnAccept Action `json:"on_accept"`
|
|||
|
OnDecline Action `json:"on_decline"`
|
|||
|
OnTimeout Action `json:"on_timeout"`
|
|||
|
}
|
|||
|
|
|||
|
func CreatePayoutHandler(h *Handler, pwc *payway.PayWay) {
|
|||
|
var request RequestCreatePayout
|
|||
|
|
|||
|
err := h.handlePostRequest(&request)
|
|||
|
if err != nil {
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
// Добавить в монгу запись
|
|||
|
record := &dal.Payment{
|
|||
|
RequesterID: request.RequesterID,
|
|||
|
Amount: request.Amount,
|
|||
|
Destination: request.Destination,
|
|||
|
PayWayID: request.PayWayID,
|
|||
|
PaymentType: request.PayoutType,
|
|||
|
Currency: request.Currency,
|
|||
|
Description: request.Description, // Пока не придумал что сюда заполнять
|
|||
|
Email: request.Email,
|
|||
|
Phone: request.Phone,
|
|||
|
IsFake: request.IsFake,
|
|||
|
UserIP: h.r.RemoteAddr,
|
|||
|
Status: "open",
|
|||
|
OnAccept: dal.Action{ActionType: request.OnAccept.ActionType, Data: request.OnAccept.Data},
|
|||
|
OnDecline: dal.Action{ActionType: request.OnDecline.ActionType, Data: request.OnDecline.Data},
|
|||
|
OnTimeout: dal.Action{ActionType: request.OnTimeout.ActionType, Data: request.OnTimeout.Data},
|
|||
|
IsRefill: false,
|
|||
|
}
|
|||
|
|
|||
|
id, err := h.mongo.InsertPayment(h.r.Context(), record)
|
|||
|
|
|||
|
if err != nil {
|
|||
|
h.reportError(http.StatusInternalServerError, "failed", err)
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
// Добавить в очередь запись
|
|||
|
pwc.QueuePayout.Enqueue(id)
|
|||
|
|
|||
|
h.sendResponse(Response{
|
|||
|
Success: true,
|
|||
|
Message: map[string]string{"id": id},
|
|||
|
})
|
|||
|
}
|
|||
|
|
|||
|
func PayoutListenerHandler(h *Handler, pwc *payway.PayWay) {
|
|||
|
payWay := mux.Vars(h.r)["payWay"]
|
|||
|
var err error
|
|||
|
|
|||
|
switch payWay {
|
|||
|
case "fk":
|
|||
|
var request payway.ReqPayoutListenerFk
|
|||
|
err = h.handleGetRequest(&request)
|
|||
|
if err != nil {
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
err = pwc.Cache[payWay].PayoutListener(h.r.Context(), h.r.RemoteAddr, &request, h.mongo)
|
|||
|
|
|||
|
if err != nil {
|
|||
|
h.reportError(http.StatusInternalServerError, "failed", err)
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
}
|