This commit is contained in:
li 2022-11-30 09:43:36 +08:00
parent 81e54ea039
commit a01e8fdfd2
6 changed files with 171 additions and 9 deletions

View File

@ -437,7 +437,6 @@ func UpgradeMember(c *gin.Context) {
RespJson(c, status.InternalServerError, nil)
return
}
//totalFee = (totalFee / 100) * 100
if req.UserCouponId != 0 {
var coupon model.UserCoupon
@ -879,6 +878,7 @@ func UserMemberExpireDelayingPay(c *gin.Context) {
return
}
//userMemberExpireDelay.DelayAmount = userMemberExpireDelay.DelayAmount / 100 // 测试TODO
//webPay, err := wxpay.WebPay(orderSn, uint32(userMemberExpireDelay.DelayAmount), user.WxOpenID, "N", wxpay.WxPayMemberExpireDelay, configInfo.NotifyUrl)
//if err != nil {
// logger.Error(errors.New("WebPay err"))

View File

@ -558,13 +558,20 @@ func ShareCardRetrieveCancel(c *gin.Context) {
orderRefundJson, _ := json.Marshal(&orderRefund)
fmt.Println("订单取消 orderRefundJson:", string(orderRefundJson))
//err = wxpay.WxPayOrderRefund(orderRefund)
err = wxpay.TransactionOrderRefund(orderRefund)
err = wxpay.HmRefundTransaction(orderRefund)
if err != nil {
logger.Error("err:", err)
RespJson(c, status.InternalServerError, nil)
return
}
//err = wxpay.TransactionOrderRefund(orderRefund)
//if err != nil {
// logger.Error("err:", err)
// RespJson(c, status.InternalServerError, nil)
// return
//}
}
begin := model.DB.Begin()

View File

@ -60,7 +60,7 @@ const (
HmPayMerchantId = "664403000030115"
HmWxSubMerchantId = "546017470"
//HmPayUnifiedOrderUrl = "https://hmpay.sandpay.com.cn/gateway/api"
HmPayUnifiedOrderUrl = "https://hmpay.sandpay.com.cn/gateway/api"
HmPayApiUrl = "https://hmpay.sandpay.com.cn/gateway/api"
)
//web 微信支付
@ -679,6 +679,90 @@ func TransactionOrderRefund(orderRefund OrderRefund) error {
return nil
}
type HmRefundBizContent struct {
OutOrderNo string `json:"out_order_no"`
RefundAmount float64 `json:"refund_amount"`
RefundRequestNo string `json:"refund_request_no"` //商户退款请求号
StoreId string `json:"store_id"`
//ExtendParams string `json:"extend_params"`
}
func HmRefundTransaction(orderRefund OrderRefund) error {
now := time.Now().Local()
//strTime := fmt.Sprintf("%04d%02d%02d%02d%02d%02d", now.Year(), now.Month(), now.Day(), now.Hour(),
// now.Minute(), now.Second())
//expireTime := now.Add(time.Hour * 3)
//strExpireTime := fmt.Sprintf("%04d%02d%02d%02d%02d%02d", expireTime.Year(), expireTime.Month(),
// expireTime.Day(), expireTime.Hour(), expireTime.Minute(), expireTime.Second())
nonce := utils.GenRandStr(NonceStringLength)
//if notifyUrl == "" {
// logger.Error("NotifyUrl is null")
// return nil, errors.New("NotifyUrl is null")
//}
unifiedOrderReq := HmJsPayUnifiedOrderReq{}
publicPara := HmPayPublicPara{
AppId: HmPayMerchantId,
//SubAppId: HmWxSubMerchantId,
Method: "trade.refund",
//Charset: "UTF-8",
SignType: "RSA",
Sign: "",
Timestamp: now.Format(TimeFormat),
Nonce: nonce,
//Nonce: fmt.Sprintf("%d", time.Now().UnixNano()),
//Version: "1.0.0",
//Format: "JSON",
}
biz := HmRefundBizContent{
//OutOrderNo: orderRefund.OutRefundNo,
OutOrderNo: orderRefund.OutTradeNo,
RefundAmount: float64(orderRefund.Amount.Refund) / 100,
//RefundRequestNo: orderRefund.OutTradeNo,
RefundRequestNo: orderRefund.OutRefundNo,
StoreId: "100001",
}
unifiedOrderReq.HmPayPublicPara = publicPara
bizString, err := json.Marshal(&biz)
if err != nil {
logger.Error("marshal biz err:", err)
return err
}
unifiedOrderReq.HmPayPublicPara.BizContent = string(bizString)
m, err := struct2Map(unifiedOrderReq)
if err != nil {
logger.Error(err)
return err
}
//mJson, _ := json.MarshalIndent(&m, "", " ")
//fmt.Println("mJson:", string(mJson))
sign, err := GenHmPaySign(m)
if err != nil {
logger.Error(err)
return err
}
unifiedOrderReq.Sign = sign
//unifiedOrderReqJson, _ := json.Marshal(&unifiedOrderReq)
//fmt.Println("unifiedOrderReqJson:", string(unifiedOrderReqJson))
unifiedOrderResp, err := HmPayRefundOrder(unifiedOrderReq)
if err != nil {
logger.Errorf("hm pay refund order error %#v", err)
return err
}
unifiedOrderRespJson, _ := json.Marshal(&unifiedOrderResp)
fmt.Println("unifiedOrderRespJson:", string(unifiedOrderRespJson))
return nil
}
func PayOrderRefund(orderRefund OrderRefund) error {
para, err := json.Marshal(&orderRefund)
if err != nil {
@ -1073,7 +1157,7 @@ func HmJsPayUnifiedOrder(orderId string, totalFee uint32, openId, notifyUrl stri
}
biz := HmPayBizContent{
Body: "会员费",
Body: "服务费",
MerAppId: WxAppId,
MerBuyerId: openId,
CreateIp: clientIp,
@ -1369,7 +1453,53 @@ func HmPayUnifiedOrder(r HmJsPayUnifiedOrderReq) (HmPayUnifiedOrderRsp, error) {
fmt.Println("data json:", string(data))
client := http.Client{}
req, err := http.NewRequest("POST", HmPayUnifiedOrderUrl, bytes.NewBuffer(data))
req, err := http.NewRequest("POST", HmPayApiUrl, bytes.NewBuffer(data))
if err != nil {
logger.Error(err)
return hmPayUnifiedOrderRsp, err
}
req.Header.Set("Content-Type", "application/json; charset=utf-8")
//req.Header.Set("Content-Type", "application/json")
resp, err := client.Do(req)
if err != nil {
logger.Error(err)
return hmPayUnifiedOrderRsp, err
}
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
logger.Error(err)
return hmPayUnifiedOrderRsp, err
}
fmt.Println("body:", string(body))
defer resp.Body.Close()
err = json.Unmarshal(body, &hmPayUnifiedOrderRsp)
if err != nil {
logger.Error("hmPayUnifiedOrderRsp err:", err)
return hmPayUnifiedOrderRsp, err
}
if hmPayUnifiedOrderRsp.Code != "200" {
return hmPayUnifiedOrderRsp, errors.New(hmPayUnifiedOrderRsp.Msg)
}
return hmPayUnifiedOrderRsp, nil
}
func HmPayRefundOrder(r HmJsPayUnifiedOrderReq) (HmPayUnifiedOrderRsp, error) {
var hmPayUnifiedOrderRsp HmPayUnifiedOrderRsp
data, err := json.Marshal(r)
if err != nil {
logger.Error(err)
return hmPayUnifiedOrderRsp, err
}
fmt.Println("data json:", string(data))
client := http.Client{}
req, err := http.NewRequest("POST", HmPayApiUrl, bytes.NewBuffer(data))
if err != nil {
logger.Error(err)
return hmPayUnifiedOrderRsp, err

View File

@ -52,10 +52,14 @@ func TestWxPayTransactionOrderClose(t *testing.T) {
}
func TestHmJsPayUnifiedOrder(t *testing.T) {
order, err := HmJsPayUnifiedOrder("84FDC15BCC", 2, "ohuHh4riVVPxwKHrYHsWwZRpxVMk", "N", WxPayRentCard, "https://dev.switch.deovo.com:8004/api/v1/wxpay/notice")
order, err := HmJsPayUnifiedOrder("84FDC15BCC", 2, "ohuHh4riVVPxwKHrYHsWwZRpxVMk", "https://dev.switch.deovo.com:8004/api/v1/wxpay/notice")
if err != nil {
fmt.Println("err:", err)
}
fmt.Println("order:", order)
}
func TestHmRefundTransaction(t *testing.T) {
}

View File

@ -2007,12 +2007,13 @@ func TestNameScanInvite(t *testing.T) {
}
// 模拟邀请数据
func TestNewUser(t *testing.T) {
InitTestDB()
DB = DBDev
InviteUid := uint32(63192613)
Uid := uint32(45321263)
Uid := uint32(41186164)
user := GetUserByUid(Uid)
nowTime := time.Now()
@ -2124,6 +2125,20 @@ func TestHmJsPayUnifiedOrder(t *testing.T) {
fmt.Println("order:", order)
}
func TestHmRefundTransaction(t *testing.T) {
refund := wxpay.OrderRefund{
OutTradeNo: "84FDC15BCE",
OutRefundNo: "861C878AB8",
NotifyUrl: "",
Amount: wxpay.OrderRefundAmount{
Refund: 15,
Total: 15,
Currency: "",
},
}
wxpay.HmRefundTransaction(refund)
}
func TestUnicode(t *testing.T) {
str := `{"msg":"\u8be5\u5355\u53f7\u6682\u65e0\u7269\u6d41\u8fdb\u5c55\uff0c\u8bf7\u7a0d\u540e\u518d\u8bd5\uff0c\u6216\u68c0\u67e5\u516c\u53f8\u548c\u5355\u53f7\u662f\u5426\u6709\u8bef\u3002","status":"-3","error_code":"13","data":{"info":{"status":"0","msg":"\u8be5\u5355\u53f7\u6682\u65e0\u7269\u6d41\u8fdb\u5c55\uff0c\u8bf7\u7a0d\u540e\u518d\u8bd5\uff0c\u6216\u68c0\u67e5\u516c\u53f8\u548c\u5355\u53f7\u662f\u5426\u6709\u8bef\u3002","_source_com":""},"com":"zhongtong","company":{"url":"http:\/\/www.zto.com\/?from=openv","fullname":"\u4e2d\u901a\u5feb\u9012","shortname":"\u4e2d\u901a","icon":{"id":"29","smallurl":"https:\/\/ss0.baidu.com\/6ONWsjip0QIZ8tyhnq\/it\/u=3682653099,2524883494&fm=58","smallpos":"0,496","middleurl":"https:\/\/ss2.baidu.com\/6ONYsjip0QIZ8tyhnq\/it\/u=1078213688,3146076104&fm=58","middlepos":"0,324","normal":"https:\/\/ss0.baidu.com\/6ONWsjip0QIZ8tyhnq\/it\/u=1022514261,1855787563&fm=58"},"website":{"title":"www.zto.com","url":"http:\/\/www.zto.com"},"tel":"95311","auxiliary":[{"title":"\u7f51\u70b9\u67e5\u8be2","url":"http:\/\/www.zto.com\/GuestService\/SiteQuery"},{"title":"\u7f51\u4e0a\u5bc4\u4ef6","url":"http:\/\/my.zto.com\/order"},{"title":"\u4ef7\u683c\u67e5\u8be2","url":"http:\/\/www.zto.com\/GuestService\/PriceQuery"},{"title":"\u4e2d\u901a\u4f18\u9009","url":"http:\/\/www.ztbest.com"}]},"source":{"logo":"https:\/\/ss2.baidu.com\/6ONYsjip0QIZ8tyhnq\/it\/u=1429564979,1787167512&fm=58","title":"\u6570\u636e\u6765\u81ea\u5feb\u9012100","url":"http:\/\/www.kuaidi100.com\/?from=baidu_ala","name":"\u5feb\u9012100","showName":"\u5feb\u9012100"}}}`
data := make(map[string]interface{})

View File

@ -428,11 +428,17 @@ func (m *UserOpenMemberRecord) Refund(outTradeNo string, amount uint32) error {
Currency: "CNY",
},
}
err = wxpay.TransactionOrderRefund(orderRefund)
err = wxpay.HmRefundTransaction(orderRefund)
if err != nil {
logger.Error("err:", err)
return err
}
//err = wxpay.TransactionOrderRefund(orderRefund)
//if err != nil {
// logger.Error("err:", err)
// return err
//}
//FundRecord{
// Uid: m.Uid,