From e8ea09d840033bf6281cdf41e0324d1cc4fd36f4 Mon Sep 17 00:00:00 2001 From: DengBiao <2319963317@qq.com> Date: Wed, 27 Sep 2023 18:08:51 +0800 Subject: [PATCH] update --- app/customer/hdl/hdl_demo.go | 48 ++++++++ .../svc_central_kitchen_for_school_package.go | 106 ++++++++++++++++++ app/customer/svc/svc_pay.go | 2 +- app/enum/enum_sys_cfg.go | 18 ++- app/router/customer_router.go | 1 + app/svc/svc_wx_pay.go | 8 +- ...entral_kitchen_for_school_user_with_day.go | 2 +- static/wx/merchant/apiclient_key.pem | 52 ++++----- 8 files changed, 199 insertions(+), 38 deletions(-) diff --git a/app/customer/hdl/hdl_demo.go b/app/customer/hdl/hdl_demo.go index 300ce95..67ae8c6 100644 --- a/app/customer/hdl/hdl_demo.go +++ b/app/customer/hdl/hdl_demo.go @@ -5,14 +5,19 @@ import ( svc2 "applet/app/admin/svc/enterprise_manage" "applet/app/customer/md" "applet/app/customer/svc" + "applet/app/db" "applet/app/e" + "applet/app/enum" svc3 "applet/app/svc" "context" "github.com/chromedp/chromedp" "github.com/chromedp/chromedp/device" "github.com/gin-gonic/gin" + "github.com/wechatpay-apiv3/wechatpay-go/core" "github.com/wechatpay-apiv3/wechatpay-go/services/certificates" + "github.com/wechatpay-apiv3/wechatpay-go/services/partnerpayments/jsapi" "io/ioutil" + "time" ) func CurlAlipayPlanetEcocampusApiRosterSignUpInfo(c *gin.Context) { @@ -54,6 +59,49 @@ func DownloadCertificates(c *gin.Context) { return } +func WxPay(c *gin.Context) { + client, err := svc3.NewWxPayClient(c) + if err != nil { + e.OutErr(c, e.ERR, err.Error()) + return + } + wxSvc := jsapi.JsapiApiService{Client: client} + sysCfgDb := db.SysCfgDb{} + sysCfgDb.Set() + sysCfg := sysCfgDb.SysCfgFindWithDb(enum.WxSpAppId, enum.WxSpMchId, enum.WxAppletAppId, enum.WxMchId) + + resp, result, err := wxSvc.Prepay(c, + jsapi.PrepayRequest{ + SpAppid: core.String(sysCfg[enum.WxSpAppId]), + SpMchid: core.String(sysCfg[enum.WxSpMchId]), + SubAppid: core.String(sysCfg[enum.WxAppletAppId]), + SubMchid: core.String(sysCfg[enum.WxMchId]), + Description: core.String("Image形象店-深圳腾大-QQ公仔"), + OutTradeNo: core.String("1217752501201407033233368018"), + TimeExpire: core.Time(time.Now()), + Attach: core.String("自定义数据说明"), + NotifyUrl: core.String("https://www.weixin.qq.com/wxpay/pay.php"), + Amount: &jsapi.Amount{ + Currency: core.String("CNY"), + Total: core.Int64(100), + }, + Payer: &jsapi.Payer{ + //SpOpenid: core.String("oUpF8uMuAJO_M2pxb1Q9zNjWeS6o"), + SubOpenid: core.String("o0mnM4nlX9W5HXbagffM9eTDHaPo"), + }, + }, + ) + if err != nil { + // 处理错误 + e.OutErr(c, e.ERR, err.Error()) + return + } else { + // 处理返回结果 + println("status=%d resp=%s", result.Response.StatusCode, resp) + } + return +} + func Demo(c *gin.Context) { ordNo := c.DefaultQuery("ord_no", "") svc2.JudgePackageOrdOrdState(ordNo) diff --git a/app/customer/svc/svc_central_kitchen_for_school_package.go b/app/customer/svc/svc_central_kitchen_for_school_package.go index b866c3f..7826166 100644 --- a/app/customer/svc/svc_central_kitchen_for_school_package.go +++ b/app/customer/svc/svc_central_kitchen_for_school_package.go @@ -357,3 +357,109 @@ func CalcByDay(uid int, isTeacher bool, buyPackageReq md2.BuyPackageReq) (totalP return } + +func CalcSupplementaryByDay(uid int, isTeacher bool, buyPackageReq md2.BuyPackageReq) (totalPrice float64, data []*model.CentralKitchenForSchoolUserWithDay, err error) { + //sysCfgDb := db.SysCfgDb{} + //sysCfgDb.Set() + //cfg, err := sysCfgDb.SysCfgGetOne(enum.CentralKitchenForSchoolReserveMealTime) + //if err != nil { + // return + //} + + //1、查询出套餐基础设置 + centralKitchenForSchoolWithSpec := db.CentralKitchenForSchoolWithSpec{} + centralKitchenForSchoolWithSpec.Set(buyPackageReq.EnterpriseId) + centralKitchenForSchoolWithSpecData, err := centralKitchenForSchoolWithSpec.GetCentralKitchenForSchoolWithSpec() + if err != nil { + return + } + classWithUserDb := db.ClassWithUserDb{} + classWithUserDb.Set() + classWithUserInfo, err := classWithUserDb.GetInfoByUserIdentityId(buyPackageReq.UserIdentityId) + if err != nil { + return + } + + //now := time.Now() + //today, _ := time.ParseInLocation("2006-01-02", time.Now().Format("2006-01-02"), time.Local) + //tomorrowDay := today.AddDate(0, 0, 1) + + //centralKitchenForSchoolReserveMealTime, _ := time.ParseInLocation("2006-01-02 15:04:05", now.Format("2006-01-02")+" "+cfg.Val+":00", time.Local) + + //2、循环拼接数据 + for _, v1 := range buyPackageReq.WithDays { + //2.1、判断是否小于今天 + //date, _ := time.ParseInLocation("2006-01-02", v1.Date, time.Local) + //if today.After(date) || today.Equal(date) { + // continue + //} + //if tomorrowDay.Equal(date) { + // //2.2、判断是否过了今日可订餐时间 + // if now.After(centralKitchenForSchoolReserveMealTime) { + // continue + // } + //} + + //2.3、计算价格 && 组装数据 + if v1.IsBuyBreakfast == 1 && buyPackageReq.IsBuyBreakfast == 1 { + //早餐 + var amount string + if isTeacher { + amount = centralKitchenForSchoolWithSpecData.BreakfastUnitPriceForTeacher + } else { + amount = classWithUserInfo.Period.BreakfastUnitPrice + } + + data = append(data, &model.CentralKitchenForSchoolUserWithDay{ + Uid: uid, + EnterpriseId: buyPackageReq.EnterpriseId, + IdentityId: buyPackageReq.UserIdentityId, + Kind: enum.CentralKitchenForSchoolUserWithDayKindForBreakfast, + Date: v1.Date, + Amount: amount, + State: enum.CentralKitchenForSchoolUserWithDayStateForWait, + }) + totalPrice += utils.StrToFloat64(amount) + } + + if v1.IsBuyLunch == 1 && buyPackageReq.IsBuyLunch == 1 { + var amount string + if isTeacher { + amount = centralKitchenForSchoolWithSpecData.LunchUnitPriceForTeacher + } else { + amount = classWithUserInfo.Period.LunchUnitPrice + } + totalPrice += utils.StrToFloat64(amount) + data = append(data, &model.CentralKitchenForSchoolUserWithDay{ + Uid: uid, + EnterpriseId: buyPackageReq.EnterpriseId, + IdentityId: buyPackageReq.UserIdentityId, + Kind: enum.CentralKitchenForSchoolUserWithDayKindForLunch, + Date: v1.Date, + State: enum.CentralKitchenForSchoolUserWithDayStateForWait, + Amount: amount, + }) + } + + if v1.IsBuyDinner == 1 && buyPackageReq.IsBuyDinner == 1 { + var amount string + if isTeacher { + amount = centralKitchenForSchoolWithSpecData.DinnerUnitPriceForTeacher + } else { + amount = classWithUserInfo.Period.DinnerUnitPrice + } + totalPrice += utils.StrToFloat64(amount) + data = append(data, &model.CentralKitchenForSchoolUserWithDay{ + Uid: uid, + EnterpriseId: buyPackageReq.EnterpriseId, + IdentityId: buyPackageReq.UserIdentityId, + Kind: enum.CentralKitchenForSchoolUserWithDayKindForDinner, + Amount: amount, + Date: v1.Date, + State: enum.CentralKitchenForSchoolUserWithDayStateForWait, + }) + } + } + + return +} diff --git a/app/customer/svc/svc_pay.go b/app/customer/svc/svc_pay.go index 6cad2c2..8931a5a 100644 --- a/app/customer/svc/svc_pay.go +++ b/app/customer/svc/svc_pay.go @@ -64,7 +64,7 @@ func BuyPackage(c *gin.Context, req md.BuyPackageReq) (outTradeNo, tradeNo, tota } } if req.Kind == 4 { - totalPrice, data, err = CalcByDay(user.Id, isTeacher, req) + totalPrice, data, err = CalcSupplementaryByDay(user.Id, isTeacher, req) if err != nil { return } diff --git a/app/enum/enum_sys_cfg.go b/app/enum/enum_sys_cfg.go index 0604d2c..84cc96b 100644 --- a/app/enum/enum_sys_cfg.go +++ b/app/enum/enum_sys_cfg.go @@ -34,8 +34,10 @@ const ( WxAppletAppId = "wx_applet_app_id" WxAppletAppSecret = "wx_applet_app_secret" WxMchId = "wx_mch_id" - WxMchApiV3Key = "wx_mch_api_v3_key" - WxMchCertificateSerialNumber = "wx_mch_certificate_serial_number" + WxSpMchApiV3Key = "wx_sp_mch_api_v3_key" + WxSpMchCertificateSerialNumber = "wx_sp_mch_certificate_serial_number" + WxSpAppId = "wx_sp_app_id" + WxSpMchId = "wx_sp_mch_id" ) func (gt SysCfg) String() string { @@ -98,10 +100,14 @@ func (gt SysCfg) String() string { return "微信-小程序-appSecret" case WxMchId: return "微信商户id" - case WxMchApiV3Key: - return "微信商户apiV3密钥" - case WxMchCertificateSerialNumber: - return "微信商户证书序列号" + case WxSpMchApiV3Key: + return "微信服务商-商户apiV3密钥" + case WxSpMchCertificateSerialNumber: + return "微信服务商-商户证书序列号" + case WxSpAppId: + return "微信服务商-appid" + case WxSpMchId: + return "微信服务商-商户id" default: return "未知" } diff --git a/app/router/customer_router.go b/app/router/customer_router.go index 5d4a16e..fe068c9 100644 --- a/app/router/customer_router.go +++ b/app/router/customer_router.go @@ -26,6 +26,7 @@ func CustomerInit(r *gin.RouterGroup) { r.GET("/wxGetAccessToken", hdl.WxGetAccessToken) r.POST("/wxDecryptUserInfo", hdl.WxDecryptUserInfo) r.POST("/wxDecryptMobile", hdl.WxDecryptMobile) + r.POST("/wxPay", hdl.WxPay) r.POST("/register", hdl.Register) r.POST("/aesDecrypt", hdl.AesDecrypt) diff --git a/app/svc/svc_wx_pay.go b/app/svc/svc_wx_pay.go index 75f77f7..cc0e5d6 100644 --- a/app/svc/svc_wx_pay.go +++ b/app/svc/svc_wx_pay.go @@ -12,12 +12,12 @@ import ( func NewWxPayClient(ctx *gin.Context) (client *core.Client, err error) { sysCfgDb := db.SysCfgDb{} sysCfgDb.Set() - sysCfg := sysCfgDb.SysCfgFindWithDb(enum.WxMchId, enum.WxMchApiV3Key, enum.WxMchCertificateSerialNumber) + sysCfg := sysCfgDb.SysCfgFindWithDb(enum.WxSpAppId, enum.WxSpMchApiV3Key, enum.WxSpMchCertificateSerialNumber) var ( - mchID string = sysCfg[enum.WxMchId] // 商户号 - mchCertificateSerialNumber string = sysCfg[enum.WxMchCertificateSerialNumber] // 商户证书序列号 - mchAPIv3Key string = sysCfg[enum.WxMchApiV3Key] // 商户APIv3密钥 + mchID string = sysCfg[enum.WxSpAppId] // 商户号 + mchCertificateSerialNumber string = sysCfg[enum.WxSpMchCertificateSerialNumber] // 商户证书序列号 + mchAPIv3Key string = sysCfg[enum.WxSpMchApiV3Key] // 商户APIv3密钥 ) // 使用 utils 提供的函数从本地文件中加载商户私钥,商户私钥会用来生成请求的签名 diff --git a/app/task/svc/svc_central_kitchen_for_school_user_with_day.go b/app/task/svc/svc_central_kitchen_for_school_user_with_day.go index 0b5c1c1..0e845f5 100644 --- a/app/task/svc/svc_central_kitchen_for_school_user_with_day.go +++ b/app/task/svc/svc_central_kitchen_for_school_user_with_day.go @@ -18,7 +18,7 @@ func SyncCentralKitchenForSchoolUserWithDayState(eg *xorm.Engine) { }() now := time.Now() - today, _ := time.ParseInLocation("2006-01-02", time.Now().Format("2006-01-02"), time.Local) + today := now.Format("2006-01-02") breakfastMealTime, _ := time.ParseInLocation("2006-01-02 15:04:05", now.Format("2006-01-02")+" 06:30", time.Local) lunchMealTime, _ := time.ParseInLocation("2006-01-02 15:04:05", now.Format("2006-01-02")+" 12:00", time.Local) dinnerMealTime, _ := time.ParseInLocation("2006-01-02 15:04:05", now.Format("2006-01-02")+" 17:00", time.Local) diff --git a/static/wx/merchant/apiclient_key.pem b/static/wx/merchant/apiclient_key.pem index af3ca3f..c09b223 100644 --- a/static/wx/merchant/apiclient_key.pem +++ b/static/wx/merchant/apiclient_key.pem @@ -1,28 +1,28 @@ -----BEGIN PRIVATE KEY----- -MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDGgwnKlRY+VV+O -JPsHjOMqwD5xUmX5aEZyI/LwL4xG7eRntSRh+iEGZFHAhS14oaSUokPeeJBB3UIP -UTvGzANQysLF7n52K9MCst2rzEdqP2eCIZZxzdr78AbnSqP41CbDaEOG8tBtAYg1 -AWUA8vej8BpyPS66UeoL8cZ6ymHW3eT9lUno6jmQ6U+aZDKDKVoXNMdlVr9E3TWy -fa9FI63nzvXu3XKftrfXkupAE+KDdHS0cyYHWHJrRSSfqR3ibSeXJILs0fZbUWtz -JdbZJhMqZ7oGlxFb06kvAEkHUmfbBKBvqMUjWoBDYfdT2EfAYQukXBXk4qjn1HP6 -OSsMMpMXAgMBAAECggEAFscyeGxjAQQK0uSraVJhPqaQg7BQwy2T58T4O1c5YWoq -qzu90QBCidk5CD4/2XeyyttTrlNnOieJTPilQ0pllv+tGckj+atNqyGbDfuCtk5Q -Mj5oZOaaGg6QvDl0VzkAuatdFD8Ia3mhh3OBg3pdsBH89t7OXdLIaFZ1z+EpGN5p -hS9j/pL63/ND/zbUsTinXlvnki5T55TPJQgSTG9Kaa9bFg4ovcPTjceKlgx5CbXO -0qp+2AAM5JKSFry1uLnaata8lgHAb2trki8xWp8nLV3SvIHY67owVacy44SnXcqw -/lU0RrQDWAjhCDsnbYUcIeV+2VzAcrPZEZXJ82ETAQKBgQDo2UewxxcbfUNUcJnn -OW7hHliRpjUY//N2/G7uiBskVrRxdJxSihVPcnvWqQbu6BXopfs6jpBXAic9N9i9 -ONlMfNIFHsiSeRUw+sMJCXFj8LKf7qwp/O4i4s82FInZjhESLiBytry5SJB26SHn -ntmXYIKwV5virUtrJF9DJvml9QKBgQDaP8dLT+KXcNoi1yy/k1nFiItlMvKZilXo -UQvHqnXI/SmbK4FwSpTV0jF7KVRV+9EvLBvRPf5omREmRYo7+9a+nqPw1+XEQJss -Y93IB8ppFH+4Pm8TkokQG3Vpu4OON6OHaaC+aRDoVv99p9izt28o3E3u2a55cn29 -fASK/NAhWwKBgCXIK9PJWjyBpM0swCw+q3knvWNUvsThsxWZfD6EIzNQRlMqgrr5 -4N9VSjbYkmFtkzB+zjcALvePR+KtDyQU911r24AtMIpjz0Z1SfRLbfSzd6hvx8vA -WLucZdb2mi+M18RFa8pxUEoYNii1R2UX52KirFIExSyQxe4KptJ0nomJAoGADpHJ -ZR6tGrz+4uqIYzWb/ZLS82uGRHe2qm6WobqgaE12NJSf7HYeH3QLt5QXvDG2UjbY -mIxR6nulaG+l/cEfIdSHTzGqdgJ2GW2FRbA3c/JZYFxSn/TdT4T1vpw0+Q5/zS9g -+rUa2tfL8IB+9+hb9FdYoIRJoHPjLv4Tc4/S+RcCgYEAwaALk8h2dzwdkQ9SqPVZ -UMYuwjJwKWraw8DgttpDvZW7mM1QUe8xM5RTR/pEw9GNveNVPgJR9ZMn7DHDcJow -orFFMk8JU6TjYX57cOpPF11SVyLDZ8L9O8B2x0ganNWF6Dqt2VS7m9LBdk9ZJM/c -GbUdBkFO0THQ91leDwRLxMg= +MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDFC1f98VxgQQTy +QUdzFFzlR4thFPnEnveblGcWq1w5+KjGKQrVP0izoytifmy/N4Kfy9K1O6fOY00r +5D1i60neXRlaYgerIxJFPVvXTWPerd57U1OpbCq1gIcfM6wbvJ2ZGn6Qv+OcSNjs +R2QLN1JdaKRC0j+dTtFiEdOSNKyO+ca+klXMgxUH/BKcFHJs/q4CDgnJ3pVTL0I+ +Qp0GnIPE8E/lkMqqFG7BL5HWyFOkM7T6qgBVahpzedKgzShFsypBC8G0KILpCAZ1 +y1R7hu6DZTqSUA5NS8qJ2LyzqtZsCmMSmD54N9Z7uakDE/M+FrcvZhHEgxXEbBOb +BeMLht2VAgMBAAECggEADSB6VjKUIt1yBOmQZvw+TA/+GxOYqB6nBDhYvcvgswP7 +ymfFjvtOTplaNI+TkxGRpC+h8+zrevZml7v20vY1z5iILdtGA4Ksnuw9iBRhyN3w +amrcsfbAyaKsXcnFd3uTTDXVpLMD6M95lBQVeCHRXOOxvbnf/wzXKh9h5uWXcVbY +kM/5Yy823kU1JAfuEthRbuGBkqCRfuxB/B+ZttBywmYvBCd5fTR4RvHJQy19NY6k +7uvRIjQ18opznbgHVPbjWcV77pxzN6VGFMajHk6FsLIjdx3579HIlqmQ3paQrizY +p2OTtjZAF4IUzxcYXIwRTUmcSop5QX8px1cD1YG0aQKBgQDqboWipuDzVHYj6RUM +goqIG4p9fZuQuk1RL6WlULiDXeCs8kEhlFGcAqcJCX7sRddcH1vT0d9zApBo0CHQ +AitgGAAesP6zcUHj4uVe7DnXpDJgl2Nei0MljF6XF3rZdJyyxvkk9fD1/QhoEdfO +eb6hHwFgg4SIVHMAK/lOuMfAfwKBgQDXLEArZdylbOwb5Io9S4e3PqVLjqDTm7Yl +klTbMIua6h0KIMh4JMYjG8JWFbclSMqrUqRdLfkdBMP+vN8dziFlCPtaiLYTPoR6 +4AUKuvJSm6lI2ALJ68xYCPXk3j5WhGofOAYdgilspX+hRPig3AHm15TMN5Fi3sSy +5Ce3l0JX6wKBgBwgbIoqSX0IWjBOy8a3dtWDsGcEBgEkSRh/hflCqRCh184INsZH +nE8ChnXwHLlOW9tiq8rLOGr9GMRqjFP/nqKl3oXQKI7w/L3RwEFWSE5WFfE+2J5E +SScdI1Avcf7bHd3ZP5UuqN1qoXKTCXhtZPDB3pFs1h7hOvb/T6chRl4TAoGBANUs +Yeac5Bx/7Os1YD+ZtLs2tUxF4c/DVJGkh60gSy8PAfYmxHVC+YmO1tmyad/mXeOd +3Hj0Mvks34BgXiuJLEyMuXjYOIqYRWf2yQf4blqpHO2uFBU4JxqQxgwYomnUhc6o +EmbprWCWFfwP+MJlNP0eV6x64O6zBOy2XSLmGDRBAoGBAKmDa0tNt4CRD0YQFRcD +3rL08pJhPQhZkXIhMd6LT43tEkG7UXAmdO8HUA4iRLItJ6zSYyqdbezwMdylJPTr +lNOrnf8rl7FtcUNII3FyKWxnKBeRxXEfcC7NdcFYesfhtXLsJRoUe75ZRVo5GyBR +59lsC+r0kk/WSt6oXi5LLl8A -----END PRIVATE KEY-----