feat: payjs service is ready

This commit is contained in:
RockYang 2024-01-06 15:53:30 +08:00
parent ce87e0c40b
commit 60a3751839
4 changed files with 97 additions and 3 deletions

View File

@ -25,6 +25,7 @@ type AppConfig struct {
AlipayConfig AlipayConfig
HuPiPayConfig HuPiPayConfig
SmtpConfig SmtpConfig // 邮件发送配置
JPayConfig JPayConfig // payjs 支付配置
}
type SmtpConfig struct {
@ -35,6 +36,15 @@ type SmtpConfig struct {
Password string // 发件人邮箱密码
}
// JPayConfig PayJs 支付配置
type JPayConfig struct {
Enabled bool
AppId string // 商户 ID
PrivateKey string // 私钥
ApiURL string // API 网关
NotifyURL string // 异步回调地址
}
type ChatPlusApiConfig struct {
ApiURL string
AppId string

View File

@ -5,6 +5,8 @@ import (
"chatplus/core/types"
"chatplus/utils"
"chatplus/utils/resp"
"fmt"
"github.com/gin-gonic/gin"
"gorm.io/gorm"
)
@ -33,7 +35,7 @@ func (h *PromptHandler) Rewrite(c *gin.Context) {
return
}
content, err := utils.OpenAIRequest(h.db, data.Prompt, rewritePromptTemplate)
content, err := utils.OpenAIRequest(h.db, fmt.Sprintf(rewritePromptTemplate, data.Prompt), h.App.Config.ProxyURL)
if err != nil {
resp.ERROR(c, err.Error())
return
@ -51,7 +53,7 @@ func (h *PromptHandler) Translate(c *gin.Context) {
return
}
content, err := utils.OpenAIRequest(h.db, data.Prompt, translatePromptTemplate)
content, err := utils.OpenAIRequest(h.db, fmt.Sprintf(translatePromptTemplate, data.Prompt), h.App.Config.ProxyURL)
if err != nil {
resp.ERROR(c, err.Error())
return

View File

@ -6,6 +6,7 @@ import (
"chatplus/utils"
"chatplus/utils/resp"
"fmt"
"github.com/gin-gonic/gin"
"gorm.io/gorm"
)
@ -20,7 +21,7 @@ func NewTestHandler(db *gorm.DB, snowflake *service.Snowflake) *TestHandler {
}
func (h *TestHandler) Test(c *gin.Context) {
h.initMjTaskId(c)
h.initUserNickname(c)
}
func (h *TestHandler) initUserNickname(c *gin.Context) {

View File

@ -0,0 +1,81 @@
package payment
import (
"chatplus/core/types"
"chatplus/utils"
"crypto/md5"
"encoding/hex"
"fmt"
"io"
"net/http"
"net/url"
"sort"
"strings"
)
type PayJS struct {
config *types.JPayConfig
}
func NewPayJS(appConfig *types.AppConfig) *PayJS {
return &PayJS{
config: &appConfig.JPayConfig,
}
}
type JPayReq struct {
TotalFee int `json:"total_fee"`
OutTradeNo string `json:"out_trade_no"`
Body string `json:"body"`
NotifyURL string `json:"notify_url"`
}
func sign(params url.Values, priKey string) string {
params.Del(`sign`)
var keys = make([]string, 0, 0)
for key := range params {
if params.Get(key) != `` {
keys = append(keys, key)
}
}
sort.Strings(keys)
var pList = make([]string, 0, 0)
for _, key := range keys {
var value = strings.TrimSpace(params.Get(key))
if len(value) > 0 {
pList = append(pList, key+"="+value)
}
}
var src = strings.Join(pList, "&")
src += "&key=" + priKey
md5bs := md5.Sum([]byte(src))
md5res := hex.EncodeToString(md5bs[:])
return strings.ToUpper(md5res)
}
func (pj *PayJS) Pay(param JPayReq) (string, error) {
var p = url.Values{}
encode := utils.JsonEncode(param)
m := make(map[string]interface{})
_ = utils.JsonDecode(encode, &m)
for k, v := range m {
p.Add(k, fmt.Sprintf("%v", v))
}
p.Add("mchid", pj.config.AppId)
p.Add("sign", sign(p, pj.config.PrivateKey))
cli := http.Client{}
r, err := cli.PostForm(pj.config.ApiURL, p)
if err != nil {
return "", err
}
defer r.Body.Close()
bs, err := io.ReadAll(r.Body)
if err != nil {
return "", err
}
return string(bs), nil
}