分享
  1. 首页
  2. 文章

使用golang快速开发微信公众平台(八):获取用户二维码

u012210379 · · 2968 次点击 · · 开始浏览
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

今天终于解决了之前提到的支付url地址无效问题甚是高兴,来把二维码也写写。
二维码文档写的简单明了,但是没有写咋个实际展示,我试了好久,连base64解码都考虑了。。。最终发现,还是简单粗暴的方法适合我。
业务场景如下:进入页面,根据获取到的用户openId,显示该用户的二维码。

都闪开,我要放代码了:


/**
微信显示用户二维码
*/
type WXShowUserQrController struct {
 beego.Controller
}
type WxQrGet struct {
 ActionName string `json:"action_name"`
 AInfo *WxQrActionInfo `json:"action_info"`
}
type WxQrActionInfo struct {
 Sc *Scene `json:"scene"`
}
type Scene struct {
 SceneId int `json:"scene_id"`
}
type QrBody struct {
 Ticket string `json:"ticket"`
 ExpireSeconds string `json:"expire_seconds"`
 Url string `json:"url"`
}
func (c *WXShowUserQrController) Get() {
 ...
 //此处uid就是openID
 wxUser := models.WxUser{WxId: uid}
 if ticket, err := getQrFromWx(&wxUser, &at); err == nil {
 //这里粗暴的直接拼出用户的二维码地址,然后在页面上显示出来
 c.Data["ticket"] = "https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=" + ticket
 }
 c.TplName = "wx_show_user_qr.html"
}
func getQrFromWx(wxUser *models.WxUser, at *models.WxAccessToken) (string, error) {
 ticker := ""
 scence := Scene{SceneId: wxUser.Id}
 wxQrActionInfo := WxQrActionInfo{Sc: &scence}
 wxQrGet := WxQrGet{ActionName: "QR_LIMIT_SCENE", AInfo: &wxQrActionInfo}
 if jsonBytes, err := json.Marshal(wxQrGet); err == nil {
 //fmt.Println("at.AccessToken---------", at.AccessToken)
 //fmt.Println("jsonBytes---------", string(jsonBytes))
 postReq, err := http.NewRequest("POST",
 strings.Join([]string{`https://api.weixin.qq.com/cgi-bin/qrcode/create`, "?access_token=", at.AccessToken}, ""),
 //bytes.NewReader([]byte(`{"action_name": "QR_LIMIT_SCENE", "action_info": {"scene": {"scene_id": 123}}}`)))
 bytes.NewReader(jsonBytes))
 if err != nil {
 fmt.Println("向微信发送 qr建立 请求失败", err)
 logUtils.GetLog().Error("向微信发送 qr建立 请求失败", err)
 return ticker, err
 }
 postReq.Header.Set("Content-Type", "application/json; encoding=utf-8")
 client := &http.Client{}
 resp, err := client.Do(postReq)
 if err != nil {
 fmt.Println("client向微信发送 qr建立 请求失败", err)
 logUtils.GetLog().Error("client向微信发送 qr建立 请求失败", err)
 return ticker, err
 } else {
 //fmt.Printf("向微信发送 qr建立 请求成功----准备读取resp%+v\n", resp)
 body, err := ioutil.ReadAll(resp.Body)
 if err != nil {
 fmt.Println("发送get请求获取 wxUserInfo 读取返回body错误", err)
 logUtils.GetLog().Error("发送get请求获取 wxUserInfo 读取返回body错误", err)
 return ticker, err
 } else {
 //fmt.Println("解析body----->", string(body))
 qrBody := new(QrBody)
 if err := json.Unmarshal(body, qrBody); err == nil {
 fmt.Printf("qrbody-----%+v\n", qrBody)
 ticker = qrBody.Ticket
 } else {
 fmt.Println("json转换错误", err)
 logUtils.GetLog().Error("json转换错误", err)
 return ticker, err
 }
 }
 }
 defer resp.Body.Close()
 } else {
 fmt.Println("json转换错误", err)
 logUtils.GetLog().Error("json转换错误", err)
 return ticker, err
 }
 return ticker, nil
}

搞定收工


有疑问加站长微信联系(非本文作者)

本文来自:CSDN博客

感谢作者:u012210379

查看原文:使用golang快速开发微信公众平台(八):获取用户二维码

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

关注微信
2968 次点击
1 回复 | 直到 2019年07月23日 15:50:56
暂无回复
添加一条新回复 (您需要 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传

用户登录

没有账号?注册
(追記) (追記ここまで)

今日阅读排行

    加载中
(追記) (追記ここまで)

一周阅读排行

    加载中

关注我

  • 扫码关注领全套学习资料 关注微信公众号
  • 加入 QQ 群:
    • 192706294(已满)
    • 731990104(已满)
    • 798786647(已满)
    • 729884609(已满)
    • 977810755(已满)
    • 815126783(已满)
    • 812540095(已满)
    • 1006366459(已满)
    • 692541889

  • 关注微信公众号
  • 加入微信群:liuxiaoyan-s,备注入群
  • 也欢迎加入知识星球 Go粉丝们(免费)

给该专栏投稿 写篇新文章

每篇文章有总共有 5 次投稿机会

收入到我管理的专栏 新建专栏