75 lines
1.8 KiB
Go
75 lines
1.8 KiB
Go
package marketing
|
|
|
|
import (
|
|
"context"
|
|
"encoding/json"
|
|
"net/http"
|
|
"net/url"
|
|
"strings"
|
|
"voucher/internal/pkg/wechat/srv"
|
|
"voucher/internal/pkg/wechat/utils"
|
|
)
|
|
|
|
const (
|
|
sendPath = "/v3/marketing/bank-favor/users/{openid}/bank-multi-activity"
|
|
queryPath = "/v3/marketing/bank-favor/users/{openid}/coupons/{coupon_id}"
|
|
)
|
|
|
|
// Marketing 产品介绍 https://docs.qq.com/doc/DSUJPTEhrc0Npb2Zj?_t=1743576271598&nlc=1
|
|
type Marketing srv.Srv
|
|
|
|
// Send @link https://pay.weixin.qq.com/doc/v3/merchant/4014569793
|
|
func (srv *Marketing) Send(openId string, req *SendReq) (response *SendResp, err error) {
|
|
|
|
reqBody, err := json.Marshal(&req)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
path := strings.Replace(sendPath, "{openid}", url.PathEscape(openId), -1)
|
|
|
|
respBody, err := srv.Request2(utils.Host, utils.MethodPOST, path, reqBody)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
if err = json.Unmarshal(respBody, &response); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return response, nil
|
|
}
|
|
|
|
// Query @link https://pay.weixin.qq.com/doc/v3/merchant/4014569864
|
|
func (srv *Marketing) Query(appId, openId, couponId string) (response *SendResp, err error) {
|
|
|
|
path := strings.Replace(queryPath, "{openid}", url.PathEscape(openId), -1)
|
|
path = strings.Replace(path, "{coupon_id}", url.PathEscape(couponId), -1)
|
|
|
|
var uv = url.Values{}
|
|
uv.Set("appid", appId)
|
|
path += "?" + uv.Encode()
|
|
|
|
respBody, err := srv.Request2(utils.Host, utils.MethodGET, path, nil)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
if err = json.Unmarshal(respBody, &response); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return response, nil
|
|
}
|
|
|
|
// Notify .
|
|
func (srv *Marketing) Notify(_ context.Context, headers *http.Header, respBody []byte) (response string, err error) {
|
|
|
|
bizStr, err := srv.GetDecodeBody(headers, respBody)
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
|
|
return bizStr, nil
|
|
}
|