当前位置: 首页 > news >正文

多网站系统海外广告联盟平台推广

多网站系统,海外广告联盟平台推广,商店建筑设计,wordpress工具栏条项目背景 在自研的系统,需要实现类似草料二维码的功能 将我们自己的小程序,通过代码生成相想要的小程序二维码 代码已经上传到 Github 需要的朋友可以自取 https://github.com/ctra-wang/wechat-mini-qrcode 一、生成Qrcode并提交到对象存储 通过源生A…

项目背景

在自研的系统,需要实现类似草料二维码的功能
将我们自己的小程序,通过代码生成相想要的小程序二维码

代码已经上传到 Github 需要的朋友可以自取
https://github.com/ctra-wang/wechat-mini-qrcode

一、生成Qrcode并提交到对象存储

通过源生API实现对小程序二维码的生成

1、s3上传多云对象存储桶

感谢suyuan32同学对代码的开源: https://github.com/suyuan32/simple-admin-file

Your Image Description

让我们一起支持群主维护simple-admin 社群吧!!!
不能加入星球的朋友记得来点个Star!!
https://github.com/suyuan32/simple-admin-core

2、源码

下面为示意代码,

需要的package如下:

  • github.com/silenceper/wechat/v2
  • github.com/aws/aws-sdk-go/aws
func NewVerifyRaceSignTeamLogic(ctx context.Context, svcCtx *svc.ServiceContext) *VerifyRaceSignTeamLogic {return &VerifyRaceSignTeamLogic{Logger: logx.WithContext(ctx),ctx:    ctx,svcCtx: svcCtx}
}func (l *VerifyRaceSignTeamLogic) VerifyRaceSignTeam(req *types.RaceSignTeamInfo) (resp *types.BaseMsgResp, err error) {deptId := ctxdata.GetIntParamFromJwt(l.ctx, "deptId")// 根据具体赛事id查询raceSignTeam, err := l.svcCtx.CtraGoRaceRpc.GetRaceSignTeamById(l.ctx, &ctragorace.IDReq{Id: *req.Id,})if err != nil {return nil, err}flag := falseif int(deptId) != constant.ORG_TYPE_ADMIN {// 根据 deptid 换 orgInfoorgRes, err := l.svcCtx.CtraGoRaceRpc.GetRaceOrgInfoList(l.ctx, &ctragorace.RaceOrgInfoListReq{DeptId: &deptId,})if err != nil {return nil, err}if orgRes.Total > 0 {// 非管理员,查看该权限下所有赛事raceList, err := l.svcCtx.CtraGoRaceRpc.GetRaceInfoList(l.ctx, &ctragorace.RaceInfoListReq{RaceOrgInfoId: *orgRes.Data[0].Id,})if err != nil {return nil, err}if raceList.Total > 0 {for _, datum := range raceList.Data {if *datum.Id == *raceSignTeam.RaceInfoId {flag = truebreak}}}}} else {flag = true}if !flag {return nil, errorx.NewCodeAbortedError("该用户暂无权限进行审核!")}// -----------------------	生成 微信小程序二维码  使用:github.com/silenceper/wechat/v2		-----------------------// 初始化 Wechat 实例wc := wechat.NewWechat()//这里本地内存保存access_token,也可选择redis,memcache或者自定cachememory := cache.NewMemory()cfg := &miniConfig.Config{AppID:     constant.MINI_APP_LATEST_ID,AppSecret: constant.MINI_APP_LATEST_SECRET,Cache:     memory,}mini := wc.GetMiniProgram(cfg)qr := mini.GetQRCode()qrRes, err := qr.CreateWXAQRCode(qrcode.QRCoder{Page: l.svcCtx.Config.QrCode.Page,Path: fmt.Sprintf(l.svcCtx.Config.QrCode.Path, raceSignTeam.RaceInfoId),//CheckPath:  nil,Width: l.svcCtx.Config.QrCode.Width,//Scene: "pathName=/race/pages/group&id=58",//AutoColor:  false,//LineColor:  nil,//IsHyaline:  false,//EnvVersion: "",})if err != nil {return nil, errorx.NewCodeAbortedError("通过微信小程序API生成小程序二维码失败!")}// -----------------------	将 微信小程序二维码 生成为本地文件用于存入对象存储cos   -----------------------// 拼接文件路径fileDir := fmt.Sprintf("/upload/race-info/%s/", time.Now().Format("2006_01"))newFileName := generatoruuid.GetUuid() + ".jpg"// 获取当前 Pod 的工作目录pwd, err := os.Getwd()if err != nil {l.Logger.Errorf(err.Error())return nil, errorx.NewCodeAbortedError("os创建文件夹失败!")}// 创建文件路径err = os.MkdirAll(pwd+fileDir, 0755)if err != nil {l.Logger.Errorf(err.Error())return nil, errorx.NewCodeAbortedError("os创建文件夹失败!")}// 复制文件(空文件)到该路径qrcodeFile, err := os.Create(pwd + fileDir + newFileName)if err != nil {l.Logger.Errorf(err.Error())return nil, errorx.NewCodeAbortedError("os创建文件失败!")}// 将通过API生成小程序二维码->写入到文件中_, err = qrcodeFile.Write(qrRes)if err != nil {l.Logger.Errorf(err.Error())return nil, errorx.NewCodeAbortedError("os创建文件失败!")}defer qrcodeFile.Close()// 删除文件defer os.RemoveAll(pwd + fileDir + newFileName)// -----------------------	推送文件到tencent对象存储cos   -----------------------// 创建s3实例sess := session.Must(session.NewSession(&aws.Config{Region:      aws.String(l.svcCtx.Config.QrCode.Region),Credentials: credentials.NewStaticCredentials(l.svcCtx.Config.QrCode.SecretId, l.svcCtx.Config.QrCode.SecretKey, ""),Endpoint:    aws.String(l.svcCtx.Config.QrCode.EndPoint),},))CloudStorage := s3.New(sess)qrFile, err := os.Open(pwd + fileDir + newFileName)if err != nil {l.Logger.Errorf(err.Error())return nil, errorx.NewCodeAbortedError("读取新创建qrcode失败!")}defer qrFile.Close()// 处理存放cos的路径// - C 端// - 赛事报名:race-sign/赛事id/// - 赛事信息:race-info/赛事id/ ✅// - 用户里程碑:member-moment/用户id/// - 用户个人信息: member-info/用户id/// - B 端 (不在这里使用)// - banner:banner/relativeSrc := fmt.Sprintf("%s/%s/%d/%s",l.svcCtx.Config.QrCode.Folder,"race-info",*raceSignTeam.RaceInfoId,newFileName)//  发送到tencent-cos_, err = CloudStorage.PutObjectWithContext(context.Background(), &s3.PutObjectInput{Bucket: aws.String(l.svcCtx.Config.QrCode.BucketName),Key:    aws.String(relativeSrc),Body:   qrFile,})if err != nil {l.Logger.Errorf(err.Error())return nil, errorx.NewCodeAbortedError("文件上传到tencent-cos失败!")}fmt.Println("QR code upload tencent cos successfully!")// -----------------------	更新数据库表 race_sign_team  -----------------------// 更新团报状态res1, err := l.svcCtx.CtraGoRaceRpc.UpdateRaceSignTeam(l.ctx,&ctragorace.RaceSignTeamInfo{Id:         req.Id,IsValidate: pointy.GetPointer(int32(constant.SIGN_TEAM_IS_VALIDATE_ACCESS)),TeamQrcode: &relativeSrc,})if err != nil {return nil, err}return &types.BaseMsgResp{Msg: res1.Msg}, nil}

3、源码分析

3.1、拿到qrcode二进制

qrRes 为拿到的图片二进制

// -----------------------	生成 微信小程序二维码  使用:github.com/silenceper/wechat/v2		-----------------------// 初始化 Wechat 实例wc := wechat.NewWechat()//这里本地内存保存access_token,也可选择redis,memcache或者自定cachememory := cache.NewMemory()cfg := &miniConfig.Config{AppID:     constant.MINI_APP_LATEST_ID,AppSecret: constant.MINI_APP_LATEST_SECRET,Cache:     memory,}mini := wc.GetMiniProgram(cfg)qr := mini.GetQRCode()qrRes, err := qr.CreateWXAQRCode(qrcode.QRCoder{Page: l.svcCtx.Config.QrCode.Page,Path: fmt.Sprintf(l.svcCtx.Config.QrCode.Path, raceSignTeam.RaceInfoId),//CheckPath:  nil,Width: l.svcCtx.Config.QrCode.Width,//Scene: "pathName=/race/pages/group&id=58",//AutoColor:  false,//LineColor:  nil,//IsHyaline:  false,//EnvVersion: "",})if err != nil {return nil, errorx.NewCodeAbortedError("通过微信小程序API生成小程序二维码失败!")}

3.2、二维码存为本地文件

将 微信小程序二维码 生成为本地文件用于存入对象存储cos

// -----------------------	将 微信小程序二维码 生成为本地文件用于存入对象存储cos   -----------------------// 拼接文件路径fileDir := fmt.Sprintf("/upload/contracts/%s/", time.Now().Format("2006_01"))newFileName := generatoruuid.GetUuid() + ".jpg"// 获取当前 Pod 的工作目录pwd, err := os.Getwd()if err != nil {l.Logger.Errorf(err.Error())return nil, errorx.NewCodeAbortedError("os创建文件夹失败!")}// 创建文件路径err = os.MkdirAll(pwd+fileDir, 0755)if err != nil {l.Logger.Errorf(err.Error())return nil, errorx.NewCodeAbortedError("os创建文件夹失败!")}// 复制文件(空文件)到该路径qrcodeFile, err := os.Create(pwd + fileDir + newFileName)if err != nil {l.Logger.Errorf(err.Error())return nil, errorx.NewCodeAbortedError("os创建文件失败!")}// 将通过API生成小程序二维码->写入到文件中_, err = qrcodeFile.Write(qrRes)if err != nil {l.Logger.Errorf(err.Error())return nil, errorx.NewCodeAbortedError("os创建文件失败!")}defer qrcodeFile.Close()// 删除文件defer os.RemoveAll(pwd + fileDir + newFileName)

3.3、推送文件到tencent对象存储cos

通过s3协议上传到对象存储桶 | 腾讯云 cos
这里注意要将刚才保存的图片再次打开 os.Open()

// -----------------------	推送文件到tencent对象存储cos   -----------------------// 创建s3实例sess := session.Must(session.NewSession(&aws.Config{Region:      aws.String(l.svcCtx.Config.QrCode.Region),Credentials: credentials.NewStaticCredentials(l.svcCtx.Config.QrCode.SecretId, l.svcCtx.Config.QrCode.SecretKey, ""),Endpoint:    aws.String(l.svcCtx.Config.QrCode.EndPoint),},))CloudStorage := s3.New(sess)qrFile, err := os.Open(pwd + fileDir + newFileName)if err != nil {l.Logger.Errorf(err.Error())return nil, errorx.NewCodeAbortedError("读取新创建qrcode失败!")}defer qrFile.Close()// 处理存放cos的路径// - C 端// - 赛事报名:race-sign/赛事id/// - 赛事信息:race-info/赛事id/ ✅// - 用户里程碑:member-moment/用户id/// - 用户个人信息: member-info/用户id/// - B 端 (不在这里使用)// - banner:banner/relativeSrc := fmt.Sprintf("%s/%s/%d/%s",l.svcCtx.Config.QrCode.Folder,"race-info",*raceSignTeam.RaceInfoId,newFileName)//  发送到tencent-cos_, err = CloudStorage.PutObjectWithContext(context.Background(), &s3.PutObjectInput{Bucket: aws.String(l.svcCtx.Config.QrCode.BucketName),Key:    aws.String(relativeSrc),Body:   qrFile,})if err != nil {l.Logger.Errorf(err.Error())return nil, errorx.NewCodeAbortedError("文件上传到tencent-cos失败!")}fmt.Println("QR code upload tencent cos successfully!")
http://www.hkea.cn/news/773850/

相关文章:

  • php商城网站建设多少钱天津百度seo排名优化
  • 注册网站免费注册insseo关键词优化推广哪家好
  • 深圳房地产网站开发常见的网络营销工具有哪些
  • .net 网站管理系统湖南企业竞价优化首选
  • 南山区住房与建设局官方网站网络赚钱推广
  • wordpress mycred汉化seo引擎搜索入口
  • 在线教育网站用什么做百度搜索的优势
  • 甘肃省住房城乡建设厅网站首页智能建站模板
  • 智能科技网站模板下载地址百度学术论文查重
  • 网站要怎么做才能让360收录推广品牌的策划方案
  • 做网站前景营销课程培训视频
  • 青海做网站广告开户南京seo
  • wordpress写软文赚钱seo快速培训
  • 南宁网站建设接单陕西省人民政府
  • wordpress网站价格seo域名综合查询
  • 支付网站怎么做的网络自动推广软件
  • js做网站统计品牌关键词优化
  • 微信公众号管理平台官网谷歌seo建站
  • 鲜花购物网站源码企业网站营销的优缺点
  • 表白网站制作在线日照网站优化公司
  • 企业网站建设策划书 前言徐州关键词优化排名
  • 一级a做爰片视频网站全国新闻媒体发稿平台
  • 唐山网站建设哪家专业高德北斗导航
  • wordpress 地址 .html企业网站seo贵不贵
  • 提供网站制作公司哪家好网络软文范文
  • 做原型网站枣庄网络推广seo
  • 品牌网站开发设计外贸网站平台
  • 网站做留言板网站推广在线
  • 长春服务好的网络营销seo网站推广的主要目的
  • 搜索引擎优化和关键词竞价广告的区别宿州百度seo排名软件