使用golang快速开发微信公众平台(八):获取用户二维码
2016-11-01 16:17
639 查看
今天终于解决了之前提到的支付url地址无效问题甚是高兴,来把二维码也写写。
二维码文档写的简单明了,但是没有写咋个实际展示,我试了好久,连base64解码都考虑了。。。最终发现,还是简单粗暴的方法适合我。
业务场景如下:进入页面,根据获取到的用户openId,显示该用户的二维码。
搞定收工
二维码文档写的简单明了,但是没有写咋个实际展示,我试了好久,连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 }
搞定收工
相关文章推荐
- 使用golang快速开发微信公众平台(六):给用户发红包(用户提现至微信钱包)
- 使用golang快速开发微信公众平台(二):获取accessToken
- 使用golang快速开发微信公众平台(七):通过客服向用户发消息
- 使用golang快速开发微信公众平台(六):给用户发红包(用户提现至微信钱包)
- 使用golang快速开发微信公众平台(五):公众号支付
- 使用golang快速开发微信公众平台(一):开启服务器配置
- 使用golang快速开发微信公众平台(四):网页授权
- 使用golang快速开发微信公众平台(九):下载对账单
- 使用golang快速开发微信公众平台(三):定制菜单
- 微信公众平台开发文档 获取用户地理位置
- 微信公众平台开发(76) 获取用户基本信息
- 微信公众平台开发文档 获取用户地理位置
- iOS开发笔记(使用Google Map Service获取用户当前位置信息)
- 微信公众平台开发教程(六)获取个性二维码
- 微信公众平台开发(85) 获取用户地理位置
- 微信公众平台开发文档 网页授权获取用户基本信息
- 微信公众平台开发(76) 无高级接口账号获取用户基本信息
- 微信公众平台开发—利用OAuth2.0获取微信用户基本信息
- 微信公众平台开发(76) 获取用户基本信息
- 微信公众平台开发教程(六)获取个性二维码