zoukankan      html  css  js  c++  java
  • 使用go开发公众号之 关注公众号发送小程序卡片

    • 首先准备工作
      •   先准备好公众号和小程序,并且将小程序关联公众号

         同时需要把服务部署的ip添加到公众号后台白名单里面。要不获取accesstoken会报错

      • 准备一张小程序的缩略图 

        //使用 https://api.weixin.qq.com/cgi-bin/material/add_material?access_token=yourtoken&type=thumb
        接口进行缩略图进行上传 //这里我是通过postman进行上传的  //获取asstoken 可能会报白名单的问题 ,需要把你获取token的ip 添加到公众号白名单。
        记录下返回的thumb_media_id(media_id)
      • 使用 "https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=%s" 接口进行发送客户服务消息
            card := MiniprogramCard{
                        Touser: reflect.ValueOf(server.RequestMsg.FromUserName).String(), //需要发送的用户
                        //miniprogrampage
                        Msgtype: "miniprogrampage",
                        Miniprogrampage: MiniProgramPage{
                            Title:          "title",
                            Appid:          "", //微信小程序appid
                            PagePath:       "pages/index/index",  //微信小程序页面地址
                            ThumbMediaId: "A9WJuZt1K57Vs1AQAPmx3JG_G7IGzBS_2sx_WpNSGvU"}, //小程序卡片图片的媒体ID
                    }

        下面是具体实现的代码

        
        
        package main

        import (
        "fmt"
        wechat "github.com/silenceper/wechat/v2"
        "github.com/silenceper/wechat/v2/cache"
        offConfig "github.com/silenceper/wechat/v2/officialaccount/config"
        "github.com/silenceper/wechat/v2/officialaccount/message"
        "net/http"
        "reflect"
        )

        func serveWechat(rw http.ResponseWriter, req *http.Request) {
        wc := wechat.NewWechat()
        //这里本地内存保存access_token,也可选择redis memcache 或者自定cache
        memory := cache.NewMemory()
        cfg := &offConfig.Config{
        AppID: "",
        AppSecret: "",
        Token: "",
        EncodingAESKey: "",
        Cache: memory,
        }
        officialAccount := wc.GetOfficialAccount(cfg)

        // 传入request和responseWriter
        server := officialAccount.GetServer(req, rw)
        //设置接收消息的处理方法
        server.SetMessageHandler(func(mixMessage *message.MixMessage) *message.Reply {
        //TODO
        //回复消息:演示回复用户发送的消息
        switch mixMessage.MsgType {
        //自动回复消息
        case message.MsgTypeText:
        text := message.NewText(mixMessage.Content)
        return &message.Reply{MsgType: message.MsgTypeText, MsgData: text}
        }
        switch mixMessage.Event {
        //如果是初次订阅回复图文消息
        case message.EventSubscribe:
        //获取token
        miniprogrampagemessage := message.NewCustomerMiniprogrampageMessage(reflect.ValueOf(server.RequestMsg.FromUserName).String(),"title","appId","pages/index/index","缩略图id")
        officialAccount.GetCustomerMessageManager().Send(miniprogrampagemessage)
        return &message.Reply{MsgType: message.MsgTypeMiniprogrampage, MsgData: miniprogrampagemessage}
        //根据token 发送客服消息

        }
        text := message.NewText(mixMessage.Content)

        return &message.Reply{MsgType: message.MsgTypeText, MsgData: text}
        })
        //处理消息接收以及回复
        err := server.Serve()
        if err != nil {
        fmt.Println(err)
        return
        }
        //发送回复的消息
        server.Send()
        }

        func main() {
        http.HandleFunc("/", serveWechat)
        fmt.Println("wechat server listener at", ":8001")
        err := http.ListenAndServe(":8001", nil)
        if err != nil {
        fmt.Printf("start server error , err=%v", err)
        }
        }
         

         tips:另外如果没有线上环境域名 ,可以在花生壳买一个域名,然后把域名代理到本地的一个端口。这样就能在本地断点微信公众号那边发送过来的消息了。

    stay hungry stay foolish!
  • 相关阅读:
    每天一点小进步(8):高效测试用例设计-XMind2TestCase
    每天一点小进步(7):Mqtt客户端理解
    每天一点小进步(6):postman使用指南
    每天一点小进步(5):python编码问题
    每天一点小进步(4): 推拉流协议初识
    每天一点小进步(3):yaml文件的相关知识点
    每天一点小进步(2):python 大文件处理
    每天一点小进步(1):lambda实现列表过滤&trim函数实现
    简单实现 随机发牌算法
    Linux学习(三)
  • 原文地址:https://www.cnblogs.com/chongyao/p/15021374.html
Copyright © 2011-2022 走看看