@@ -0,0 +1,258 @@
|
||||
package aiMate
|
||||
|
||||
import (
|
||||
"crypto/md5"
|
||||
"encoding/hex"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"net/http"
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
"91porn-server/common/httputil"
|
||||
"91porn-server/common/log"
|
||||
)
|
||||
|
||||
const (
|
||||
req_doman = "https://www.gpt4novel.com" //请求域名
|
||||
access_doman = "https://www.saibolaopo.com/tg-login" //访问域名
|
||||
get_token_url = "/api/dzmm/get-jwt-for-organization-subaccount" //获取用户登陆token
|
||||
transfer_points_url = "/api/dzmm/transfer-all-user-credit-to-organization" //转出用户所有积分
|
||||
get_points_url = "/api/dzmm/get-organization-user-balance" //获取用户积分
|
||||
get_transactions_url = "/api/dzmm/get-user-credit-transactions" //获取用户消费记录
|
||||
access_key = "c1c5f394-1a6a-4834-8ee8-cb2fb6325969" //密钥
|
||||
organization_id = "65443ba4-480a-4c62-8276-f5380bccc739" //组织id
|
||||
)
|
||||
|
||||
// 获取token请求参数
|
||||
type GetTokenReq struct {
|
||||
OrganizationId string `json:"organizationId"` // 组织id
|
||||
OrganizationExternalId string `json:"organizationExternalId"` // 用户唯一id,uuidv4
|
||||
First_name string `json:"first_name"` // 用户名
|
||||
Avatar_url string `json:"avatar_url"` // 用户头像
|
||||
Bio string `json:"bio"` // 简介
|
||||
CreditToUser float64 `json:"creditToUser"` // 转移给用户的积分数
|
||||
Sign string `json:"sign"` // sign
|
||||
}
|
||||
|
||||
// 获取token返回参数
|
||||
type GetTokenResp struct {
|
||||
StatusCode int `json:"statusCode"` // 状态码
|
||||
Message string `json:"message"` // 描述
|
||||
Error string `json:"error"` // 错误
|
||||
Jwt string `json:"jwt"` // jwt
|
||||
}
|
||||
|
||||
// 获取用户访问Ai女友的链接
|
||||
func GetUserAccessAiUrl(uid uint64, uuid, name string, amount float64) (access_url string, err error) {
|
||||
var (
|
||||
//请求参数
|
||||
req = GetTokenReq{
|
||||
OrganizationId: organization_id,
|
||||
OrganizationExternalId: uuid,
|
||||
First_name: "91PORN-" + name,
|
||||
Bio: "AiMate",
|
||||
Avatar_url: "https://example.com/avatar.jpg",
|
||||
CreditToUser: amount,
|
||||
}
|
||||
//返回参数
|
||||
resp = GetTokenResp{}
|
||||
//加密字符串
|
||||
signStr = "avatar_url=" + req.Avatar_url + "&bio=" + req.Bio + "&creditToUser=" + strconv.FormatFloat(req.CreditToUser, 'f', -1, 64) + "&first_name=" + req.First_name + "&organizationExternalId=" + req.OrganizationExternalId + "&organizationId=" + req.OrganizationId + access_key
|
||||
)
|
||||
//参数加密
|
||||
h := md5.New()
|
||||
h.Write([]byte(signStr))
|
||||
cipherStr := h.Sum(nil)
|
||||
req.Sign = hex.EncodeToString(cipherStr)
|
||||
//请求
|
||||
url := req_doman + get_token_url
|
||||
bodyStr, _ := json.Marshal(req)
|
||||
code, err := httputil.DefaultClientPostJsonWithResp(&resp, url, nil, bodyStr)
|
||||
if err != nil {
|
||||
log.Error("GetUserAccessAiUrl POSTWithJResp ", log.Any("url", url), log.Any("uid:", uid), log.E(err))
|
||||
return
|
||||
}
|
||||
if code != http.StatusCreated {
|
||||
log.Error("GetUserAccessAiUrl response status ", log.Any("code", code), log.Any("uid", uid))
|
||||
if strings.Contains(resp.Message, "积分不足") {
|
||||
err = fmt.Errorf("insufficient organization points")
|
||||
return
|
||||
}
|
||||
err = fmt.Errorf("response status err")
|
||||
return
|
||||
}
|
||||
//访问链接
|
||||
access_url = access_doman + "?token=" + resp.Jwt
|
||||
log.Info("GetUserAccessAiUrl success", log.Any("uid", uid))
|
||||
return
|
||||
}
|
||||
|
||||
// 划转积分请求参数
|
||||
type TransferIntegralReq struct {
|
||||
OrganizationId string `json:"organizationId"` // 组织id
|
||||
SourceAccountId string `json:"sourceAccountId"` // 用户唯一id,uuidv4
|
||||
Note string `json:"note"` // 备注
|
||||
Sign string `json:"sign"` // sign
|
||||
}
|
||||
|
||||
// 划转积分返回参数
|
||||
type TransferIntegralResp struct {
|
||||
StatusCode int `json:"statusCode"` // 状态码
|
||||
Message string `json:"message"` // 描述
|
||||
Error string `json:"error"` // 错误
|
||||
NewBalance float64 `json:"newBalance"` // 最新余额
|
||||
TransferredAmount float64 `json:"transferredAmount"` // 划转余额
|
||||
}
|
||||
|
||||
// 用户划转积分,从第三方转出用户所有积分
|
||||
func UserAiTransferIntegral(uid uint64, uuid string) (transferredAmount float64, err error) {
|
||||
var (
|
||||
//请求参数
|
||||
req = TransferIntegralReq{
|
||||
SourceAccountId: uuid,
|
||||
OrganizationId: organization_id,
|
||||
Note: "transfer-user-all-integral",
|
||||
}
|
||||
//返回参数
|
||||
resp = TransferIntegralResp{}
|
||||
//加密字符串
|
||||
signStr = "note=" + req.Note + "&organizationId=" + req.OrganizationId + "&sourceAccountId=" + req.SourceAccountId + access_key
|
||||
)
|
||||
//参数加密
|
||||
h := md5.New()
|
||||
h.Write([]byte(signStr))
|
||||
cipherStr := h.Sum(nil)
|
||||
req.Sign = hex.EncodeToString(cipherStr)
|
||||
//请求
|
||||
url := req_doman + transfer_points_url
|
||||
bodyStr, _ := json.Marshal(req)
|
||||
code, err := httputil.DefaultClientPostJsonWithResp(&resp, url, nil, bodyStr)
|
||||
if err != nil {
|
||||
log.Error("UserAiTransferIntegral POSTWithJResp ", log.Any("url", url), log.Any("uid:", uid), log.E(err))
|
||||
return
|
||||
}
|
||||
if code != http.StatusCreated {
|
||||
log.Error("UserAiTransferIntegral response status ", log.Any("code", code), log.Any("uid", uid))
|
||||
err = fmt.Errorf("response status err")
|
||||
return
|
||||
}
|
||||
log.Info("UserAiTransferIntegral success", log.Any("uid", uid))
|
||||
transferredAmount = resp.TransferredAmount
|
||||
return
|
||||
}
|
||||
|
||||
// 获取用户余额请求参数
|
||||
type GetUserAiBalanceReq struct {
|
||||
OrganizationId string `json:"organizationId"` // 组织id
|
||||
ExternalUserId string `json:"externalUserId"` // 用户唯一id,uuidv4
|
||||
Sign string `json:"sign"` // sign
|
||||
}
|
||||
|
||||
// 获取用户余额返回参数
|
||||
type GetUserAiBalanceResp struct {
|
||||
StatusCode int `json:"statusCode"` // 状态码
|
||||
Message string `json:"message"` // 描述
|
||||
Error string `json:"error"` // 错误
|
||||
Balance float64 `json:"balance"` // 余额
|
||||
}
|
||||
|
||||
// 获取用户余额
|
||||
func GetUserAiBalance(uid uint64, uuid string) (balance float64, err error) {
|
||||
var (
|
||||
//请求参数
|
||||
req = GetUserAiBalanceReq{
|
||||
OrganizationId: organization_id,
|
||||
ExternalUserId: uuid,
|
||||
}
|
||||
//返回参数
|
||||
resp = GetUserAiBalanceResp{}
|
||||
//加密字符串
|
||||
signStr = "externalUserId=" + req.ExternalUserId + "&organizationId=" + req.OrganizationId + access_key
|
||||
)
|
||||
//参数加密
|
||||
h := md5.New()
|
||||
h.Write([]byte(signStr))
|
||||
cipherStr := h.Sum(nil)
|
||||
req.Sign = hex.EncodeToString(cipherStr)
|
||||
//请求
|
||||
url := req_doman + get_points_url
|
||||
bodyStr, _ := json.Marshal(req)
|
||||
code, err := httputil.DefaultClientPostJsonWithResp(&resp, url, nil, bodyStr)
|
||||
if err != nil {
|
||||
log.Error("GetUserAiBalanceReq POSTWithJResp ", log.Any("url", url), log.Any("uid:", uid), log.E(err))
|
||||
return
|
||||
}
|
||||
if code != http.StatusCreated && code != 0 {
|
||||
log.Error("GetUserAiBalanceReq response status ", log.Any("code", code), log.Any("uid", uid))
|
||||
err = fmt.Errorf("response status err")
|
||||
return
|
||||
}
|
||||
log.Info("GetUserAiBalanceReq success", log.Any("uid", uid))
|
||||
balance = resp.Balance
|
||||
return
|
||||
}
|
||||
|
||||
// 获取用户交易记录请求参数
|
||||
type GetUserTransactionsReq struct {
|
||||
OrganizationId string `json:"organizationId"` // 组织id
|
||||
ExternalUserId string `json:"externalUserId"` // 用户唯一id,uuidv4
|
||||
Sign string `json:"sign"` // sign
|
||||
}
|
||||
|
||||
// 获取用户交易记录返回参数
|
||||
type GetUserTransactionsResp struct {
|
||||
StatusCode int `json:"statusCode"` // 状态码
|
||||
Message string `json:"message"` // 描述
|
||||
Error string `json:"error"` // 错误
|
||||
TotalCount int `json:"totalCount"` // 总条数
|
||||
Transactions []TransactionsInfo `json:"transactions"` // 交易列表
|
||||
}
|
||||
|
||||
// 用户交易记录对象
|
||||
type TransactionsInfo struct {
|
||||
OrderId int `json:"orderId"` // 订单Id
|
||||
Credit_delta string `json:"credit_delta"` // 此次操作积分数
|
||||
Post_credit string `json:"post_credit"` // 操作后剩余积分数
|
||||
Created_at string `json:"created_at"` // 操作时间
|
||||
Operation_type string `json:"operation_type"` // 操作类型
|
||||
}
|
||||
|
||||
// 获取用户交易记录
|
||||
func GetUserTransactions(uid uint64, uuid string) (totalCount int, list []TransactionsInfo, err error) {
|
||||
var (
|
||||
//请求参数
|
||||
req = GetUserTransactionsReq{
|
||||
OrganizationId: organization_id,
|
||||
ExternalUserId: uuid,
|
||||
}
|
||||
//返回参数
|
||||
resp = GetUserTransactionsResp{}
|
||||
//加密字符串
|
||||
signStr = "externalUserId=" + req.ExternalUserId + "&organizationId=" + req.OrganizationId + access_key
|
||||
)
|
||||
log.Info("GetUserTransactionsReq req", log.Any("signStr:", signStr), log.Any("uid:", uid))
|
||||
//参数加密
|
||||
h := md5.New()
|
||||
h.Write([]byte(signStr))
|
||||
cipherStr := h.Sum(nil)
|
||||
req.Sign = hex.EncodeToString(cipherStr)
|
||||
log.Info("GetUserTransactionsReq req", log.Any("params:", req), log.Any("uid:", uid))
|
||||
//请求
|
||||
url := req_doman + get_transactions_url
|
||||
bodyStr, _ := json.Marshal(req)
|
||||
code, err := httputil.DefaultClientPostJsonWithResp(&resp, url, nil, bodyStr)
|
||||
if err != nil {
|
||||
log.Error("GetUserTransactionsReq POSTWithJResp ", log.Any("url", url), log.Any("uid:", uid), log.E(err))
|
||||
return
|
||||
}
|
||||
if code != http.StatusCreated && code != 0 {
|
||||
log.Error("GetUserTransactionsReq response status ", log.Any("code", code), log.Any("uid:", uid), log.Any("resp", resp))
|
||||
err = fmt.Errorf("response status err")
|
||||
return
|
||||
}
|
||||
log.Info("GetUserTransactionsReq http", log.Any("resp:", resp), log.Any("uid:", uid))
|
||||
totalCount = resp.TotalCount
|
||||
list = resp.Transactions
|
||||
return
|
||||
}
|
||||
Reference in New Issue
Block a user