feat: h5 payment for payjs is ready

This commit is contained in:
RockYang
2024-03-20 17:46:39 +08:00
parent 4147c217b1
commit 5cdada8265
3 changed files with 16 additions and 54 deletions

View File

@@ -338,19 +338,14 @@ func (h *PaymentHandler) Mobile(c *gin.Context) {
payWay = PayWayJs
notifyURL = h.App.Config.JPayConfig.NotifyURL
returnURL = h.App.Config.JPayConfig.ReturnURL
params := payment.JPayReq{
TotalFee: int(math.Ceil(amount * 100)),
OutTradeNo: orderNo,
Subject: product.Name,
NotifyURL: notifyURL,
ReturnURL: returnURL,
}
r := h.js.PayH5(params)
if !r.IsOK() {
resp.ERROR(c, "error with generating Pay URL: "+r.ReturnMsg)
return
}
payURL = r.H5URL
totalFee := decimal.NewFromFloat(product.Price).Sub(decimal.NewFromFloat(product.Discount)).Mul(decimal.NewFromInt(100)).IntPart()
params := url.Values{}
params.Add("total_fee", fmt.Sprintf("%d", totalFee))
params.Add("out_trade_no", orderNo)
params.Add("body", product.Name)
params.Add("notify_url", notifyURL)
params.Add("auto", "0")
payURL = h.js.PayH5(params)
case "alipay":
payWay = PayWayAlipay
notifyURL = h.App.Config.AlipayConfig.NotifyURL

View File

@@ -40,7 +40,6 @@ type JPayReps struct {
TotalFee string `json:"total_fee"`
CodeUrl string `json:"code_url,omitempty"`
Qrcode string `json:"qrcode,omitempty"`
H5URL string `json:"h5_url,omitempty"`
}
func (r JPayReps) IsOK() bool {
@@ -80,37 +79,10 @@ func (js *PayJS) Pay(param JPayReq) JPayReps {
return data
}
func (js *PayJS) PayH5(param JPayReq) JPayReps {
param.NotifyURL = js.config.NotifyURL
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))
}
func (js *PayJS) PayH5(p url.Values) string {
p.Add("mchid", js.config.AppId)
p.Add("sign", js.sign(p))
cli := http.Client{}
apiURL := fmt.Sprintf("%s/api/h5", js.config.ApiURL)
r, err := cli.PostForm(apiURL, p)
if err != nil {
return JPayReps{ReturnMsg: err.Error()}
}
defer r.Body.Close()
bs, err := io.ReadAll(r.Body)
if err != nil {
return JPayReps{ReturnMsg: err.Error()}
}
var data JPayReps
err = utils.JsonDecode(string(bs), &data)
if err != nil {
return JPayReps{ReturnMsg: err.Error()}
}
return data
return fmt.Sprintf("%s/api/cashier?%s", js.config.ApiURL, p.Encode())
}
func (js *PayJS) sign(params url.Values) string {