plugins/plugins/wechat_redpack/internal/wechat_redpack.go

72 lines
1.9 KiB
Go

package internal
import (
"context"
"gitea.cdlsxd.cn/sdk/plugin/proto"
"plugins/wechat_redpack/internal/vo"
"time"
)
// 插件通信信息,若不对应则会报错panic
const (
Tag = "wechat_redpack"
Version = 1
CookieKey = "wechat_redpack"
CookieValue = "wechat_redpack"
)
// WeChatRedPackService @link https://pay.weixin.qq.com/docs/merchant/apis/batch-transfer-to-balance/transfer-batch/initiate-batch-transfer.html
type WeChatRedPackService struct{}
func (p *WeChatRedPackService) Order(ctx context.Context, request *proto.OrderRequest) (*proto.OrderResponse, error) {
ctx, _ = context.WithTimeout(ctx, 30*time.Second)
config, err := transConfig(request.Config)
if err != nil {
return nil, err
}
req, err := orderReq(request.GetOrder(), request.GetProduct())
if err != nil {
return nil, err
}
svc, err := transferBatchApiService(ctx, config)
if err != nil {
return nil, err
}
resp, result, err := svc.InitiateBatchTransfer(ctx, req)
if err != nil {
return nil, err
}
if result.Response.StatusCode != vo.CodeSuccess.Value() {
return nil, err
}
return orderResp(request.GetOrder(), *resp.BatchId), nil
}
func (p *WeChatRedPackService) Query(ctx context.Context, request *proto.QueryRequest) (*proto.QueryResponse, error) {
ctx, _ = context.WithTimeout(ctx, 30*time.Second)
req, err := queryReq(request.GetOrder())
if err != nil {
return nil, err
}
config, err := transConfig(request.Config)
if err != nil {
return nil, err
}
svc, err := transferDetailApiService(ctx, config)
if err != nil {
return nil, err
}
resp, result, err := svc.GetTransferDetailByOutNo(ctx, *req)
if err != nil {
return nil, err
}
if result.Response.StatusCode != vo.CodeSuccess.Value() {
return nil, err
}
return queryResp(request, resp), nil
}
func (p *WeChatRedPackService) Notify(_ context.Context, _ *proto.NotifyRequest) (*proto.NotifyResponse, error) {
return notifyResp(), nil
}