voucher/test/coupon.go

314 lines
8.2 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package test
import (
"context"
"encoding/json"
"fmt"
"github.com/wechatpay-apiv3/wechatpay-go/core"
"github.com/wechatpay-apiv3/wechatpay-go/services/cashcoupons"
"io"
"os"
"path/filepath"
"time"
"voucher/internal/biz/do"
"voucher/internal/conf"
"voucher/internal/data"
)
var bc = &conf.Bootstrap{
Wechat: &conf.Wechat{
MchID: "1710953361",
MchCertificateSerialNumber: "6006B8208815DB5EAC5BF2E783CB9D34082C3772",
WechatPayPublicKeyID: "PUB_KEY_ID_0117109533612025031800326400002563",
Name: "蓝色兄弟-new",
},
}
// bcFJXW Callback{NotifyUrl:https://nsall.86698.cn/wechatPay/coupon_notify/fjxingwang, Mchid:1652465541}
var bcFJXW = &conf.Bootstrap{
Wechat: &conf.Wechat{
MchID: "1652465541", // notifyUrl https://nsall.86698.cn/wechatPay/coupon_notify/fjxingwang
MchCertificateSerialNumber: "1E3F2CE013203BA9C3DEFC5782FCD3329C3DAC1C",
WechatPayPublicKeyID: "PUB_KEY_ID_0116524655412025070900181741001803",
Name: "福建兴旺",
},
}
// bcFJLF Callback{NotifyUrl:https://gateway.dev.cdlsxd.cn/voucher/v1/notify/1100040695, Mchid:1100040695}
// /voucher/v1/notify/1100040695
var bcFJLF = &conf.Bootstrap{
Wechat: &conf.Wechat{
MchID: "1100040695",
MchCertificateSerialNumber: "46712853869DB0EDAA9B4DF97DADEECD4CCDC85B",
WechatPayPublicKeyID: "PUB_KEY_ID_0111000406952026032500382251001000",
Name: "福建峦峰",
},
}
func SendCoupon() {
ctx := context.Background()
dir, err := os.Getwd()
if err != nil {
fmt.Printf("os.Getwd() error = %v", err)
return
}
parentDir := filepath.Dir(dir)
server := data.Server{
MchID: bc.Wechat.MchID,
MchCertificateSerialNumber: bc.Wechat.MchCertificateSerialNumber,
WechatPayPublicKeyID: bc.Wechat.WechatPayPublicKeyID,
Dir: parentDir,
}
client, err := data.GetClient(ctx, server)
if err != nil {
fmt.Println(err)
return
}
req := cashcoupons.SendCouponRequest{
OutRequestNo: core.String("LQ2011991700944699394"), // {CouponId:129623470711}
// 微信为发券方商户分配的公众账号ID接口传入的所有appid应该为公众号的appid在mp.weixin.qq.com申请的不能为APP的appid在open.weixin.qq.com申请的
Appid: core.String("wxd27e255810842ba8"),
Openid: core.String("o3dEt5b_1lFtKc-aAT3tiYjJIGwk"),
StockId: core.String("21502886"),
StockCreatorMchid: core.String("1652465541"),
}
fmt.Printf("\nreq:%+v", req)
svc := cashcoupons.CouponApiService{Client: client}
resp, result, err := svc.SendCoupon(ctx, req)
if err != nil {
fmt.Println(err)
return
}
fmt.Printf("\nresp:%+v\n result:%+v", resp, result)
return
}
func QueryCoupon() {
ctx := context.Background()
dir, err := os.Getwd()
if err != nil {
fmt.Printf("os.Getwd() error = %v", err)
return
}
parentDir := filepath.Dir(dir)
server := data.Server{
MchID: bc.Wechat.MchID,
MchCertificateSerialNumber: bc.Wechat.MchCertificateSerialNumber,
WechatPayPublicKeyID: bc.Wechat.WechatPayPublicKeyID,
Dir: parentDir,
}
client, err := data.GetClient(ctx, server)
if err != nil {
fmt.Println(err)
return
}
appId := "wx619991cc795028f5"
openId := "oSNb4fnWoktz7YVNIXE5bvoB3-1w"
couponId := "106048490308"
req := cashcoupons.QueryCouponRequest{
CouponId: core.String(couponId),
Appid: core.String(appId),
Openid: core.String(openId),
}
svc := cashcoupons.CouponApiService{Client: client}
resp, result, err := svc.QueryCoupon(ctx, req)
if err != nil {
fmt.Println(err)
return
}
fmt.Printf("\nresp:%+v\n", resp)
bodyBytes, err := io.ReadAll(result.Response.Body)
if err != nil {
fmt.Println(err)
return
}
fmt.Printf("\nresult:%s\n", bodyBytes)
return
}
func QueryProduct() {
ctx := context.Background()
dir, err := os.Getwd()
if err != nil {
fmt.Printf("os.Getwd() error = %v", err)
return
}
parentDir := filepath.Dir(dir)
server := data.Server{
MchID: bc.Wechat.MchID,
MchCertificateSerialNumber: bc.Wechat.MchCertificateSerialNumber,
WechatPayPublicKeyID: bc.Wechat.WechatPayPublicKeyID,
Dir: parentDir,
}
client, err := data.GetClient(ctx, server)
if err != nil {
fmt.Println(err)
return
}
req := cashcoupons.QueryStockRequest{
StockId: core.String("21923564"),
StockCreatorMchid: core.String("1100040695"),
}
svc := cashcoupons.StockApiService{Client: client}
resp, _, err := svc.QueryStock(ctx, req)
if err != nil {
fmt.Println(err)
return
}
j, _ := json.Marshal(resp)
fmt.Printf("\nresp:%s\n", string(j))
availableStock := *resp.StockUseRule.MaxCoupons - *resp.DistributedCoupons
couponAmount := *resp.StockUseRule.FixedNormalCoupon.CouponAmount / 100
fmt.Printf("\n批次号:%s", *req.StockId)
fmt.Printf("\n面额:%d", couponAmount)
fmt.Printf("\n总预算:%d", *resp.StockUseRule.MaxAmount/100)
fmt.Printf("\n总库存:%d", *resp.StockUseRule.MaxCoupons)
fmt.Printf("\n已发券数:%d", *resp.DistributedCoupons)
fmt.Printf("\n已发券金额:%d", *resp.DistributedCoupons*couponAmount)
fmt.Printf("\n剩余库存:%d", availableStock)
fmt.Printf("\n剩余预算:%d", availableStock*couponAmount)
str, _ := json.Marshal(WxResp(resp))
fmt.Printf("\nWxResp:%+v", string(str))
return
}
func WxResp(wxResp *cashcoupons.Stock) (reps *do.WxResp) {
availableStock := *wxResp.StockUseRule.MaxCoupons - *wxResp.DistributedCoupons
couponAmount := *wxResp.StockUseRule.FixedNormalCoupon.CouponAmount / 100
remainingBudget := availableStock * couponAmount
stockUsageRate := float64(*wxResp.DistributedCoupons) / float64(*wxResp.StockUseRule.MaxCoupons) * 100
req := &do.WxResp{
Amount: couponAmount,
AllBudget: *wxResp.StockUseRule.MaxAmount / 100,
AllStock: *wxResp.StockUseRule.MaxCoupons,
UsedStock: *wxResp.DistributedCoupons,
UsedBudget: *wxResp.DistributedCoupons * couponAmount,
AvailableStock: availableStock,
AvailableBudget: remainingBudget,
StockUsageRate: stockUsageRate,
}
inputFormat := time.RFC3339
if wxResp.AvailableBeginTime != nil {
availableBeginTime, _ := time.Parse(inputFormat, *wxResp.AvailableBeginTime)
req.StartTime = &availableBeginTime
}
if wxResp.AvailableEndTime != nil {
availableEndTime, _ := time.Parse(inputFormat, *wxResp.AvailableEndTime)
req.EndTime = &availableEndTime
}
return req
}
func QueryCallback(bc *conf.Bootstrap) {
ctx := context.Background()
dir, err := os.Getwd()
if err != nil {
fmt.Printf("os.Getwd() error = %v", err)
return
}
parentDir := filepath.Dir(dir)
server := data.Server{
MchID: bc.Wechat.MchID,
MchCertificateSerialNumber: bc.Wechat.MchCertificateSerialNumber,
WechatPayPublicKeyID: bc.Wechat.WechatPayPublicKeyID,
Dir: parentDir,
}
client, err := data.GetClient(ctx, server)
if err != nil {
fmt.Println(err)
return
}
svc := cashcoupons.CallBackUrlApiService{Client: client}
response, _, err := svc.QueryCallback(ctx, cashcoupons.QueryCallbackRequest{
Mchid: core.String(bc.Wechat.MchID),
})
if err != nil {
fmt.Println(err)
return
}
fmt.Printf("\nresp:%+v\n", response)
return
}
func SetCallback(bc *conf.Bootstrap) {
ctx := context.Background()
dir, err := os.Getwd()
if err != nil {
fmt.Printf("os.Getwd() error = %v", err)
return
}
parentDir := filepath.Dir(dir)
server := data.Server{
MchID: bc.Wechat.MchID,
MchCertificateSerialNumber: bc.Wechat.MchCertificateSerialNumber,
WechatPayPublicKeyID: bc.Wechat.WechatPayPublicKeyID,
Dir: parentDir,
}
client, err := data.GetClient(ctx, server)
if err != nil {
fmt.Println(err)
return
}
svc := cashcoupons.CallBackUrlApiService{Client: client}
response, _, err := svc.SetCallback(ctx, cashcoupons.SetCallbackRequest{
Mchid: core.String(bc.Wechat.MchID),
NotifyUrl: core.String("https://gateway.dev.cdlsxd.cn/voucher/v1/notify/" + bc.Wechat.MchID),
Switch: core.Bool(true),
})
if err != nil {
fmt.Println(err)
return
}
fmt.Printf("\nresp:%+v\n", response)
return
}