mirror of
				https://github.com/yangjian102621/geekai.git
				synced 2025-11-04 08:13:43 +08:00 
			
		
		
		
	feat: h5 payment for payjs is ready
This commit is contained in:
		@@ -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
 | 
			
		||||
 
 | 
			
		||||
@@ -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 {
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user