V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
CharlieBrown
V2EX  ›  问与答

关于微信公众号开发,微信带参数的二维码,是否只能先下载再上传

  •  
  •   CharlieBrown · 2019-01-17 09:13:55 +08:00 · 2059 次点击
    这是一个创建于 1918 天前的主题,其中的信息可能已经有所发展或是发生改变。
    业务场景:
    用户在微信公众号回复“我的二维码”,公众号返回一张用户的专属二维码图


    微信生成的二维码先是获得一个 ticket,然后用 ticket 去另一个接口请求,下载二维码

    而要回复图片,是需要一个 media_id,这个 media_id 是需将本地图片上传获得的

    也就是说要回复用户二维码图,需要先下载,再上传,这样感觉很繁琐,

    请问开发过微信公众号的各位,有没有其他解决方案,例如生成二维码时直接获得一个 media_id,再传回去
    27 条回复    2019-06-05 11:56:54 +08:00
    yangg
        1
    yangg  
       2019-01-17 09:24:39 +08:00
    回复一个链接 不行吧,为啥要回复图片浪费流量,还麻烦的要识别
    johnniang
        2
    johnniang  
       2019-01-17 09:29:10 +08:00 via Android
    这似乎是不可避免的。毕竟要回复图片给用户,就得上传素材至微信服务器,最后返回 media_id 给用户就能正常查看图片了。

    我最近也做过相应的功能,不过多个一个生成海报功能。

    最后还是建议添加一个事件菜单,让用户点击生成二维码比较友好。
    GDC
        3
    GDC  
       2019-01-17 09:31:51 +08:00 via iPhone
    把我的二维码做到菜单里,点击打开页面。

    或者用户关注的时候,后台生成二维码并上传,记录对应的 media id,用户获取时直接回复 media id
    CharlieBrown
        4
    CharlieBrown  
    OP
       2019-01-17 09:54:55 +08:00
    @yangg 二维码看起来高大上啊,我有什么办法,我只是个打代码的啊 o(╥﹏╥)o
    CharlieBrown
        5
    CharlieBrown  
    OP
       2019-01-17 09:57:30 +08:00
    @johnniang 看文档好像是绕不开先下载二维码,后上传素材

    我现在在考虑要不要生成永久二维码,保存在本地,这样用户再要他的二维码,就少去一步下载,只需上传到微信获得 media_id

    这个功能是放在菜单点击生成的,感谢建议
    CharlieBrown
        6
    CharlieBrown  
    OP
       2019-01-17 10:01:08 +08:00
    @GDC 这个功能已经是放在菜单的,点击菜单的“我的二维码”,公众号回复:“二维码(图)”

    提前生成二维码,这个想法也不错,不过我更想避免,先将二维码从微信那边下载,再上传给回微信,我觉得这个动作有点“蠢”
    johnniang
        7
    johnniang  
       2019-01-17 10:03:38 +08:00 via Android   ❤️ 1
    @CharlieBrown 如果你担心处理时间过长,可以考虑先回复被动消息至用户,提示 ta 正在生成二维码,此前开启新的线程生成二维码,最后发送客服消息至用户。
    phpcxy
        8
    phpcxy  
       2019-01-17 10:24:31 +08:00
    先提前生成好一批二维码上传,用户申请就把这个二维码分配给他再回复咯~
    CharlieBrown
        9
    CharlieBrown  
    OP
       2019-01-17 10:46:24 +08:00
    @johnniang 刚刚看了客服消息的文档,应该能实现,这个想法也很棒,多谢了
    CharlieBrown
        10
    CharlieBrown  
    OP
       2019-01-17 10:47:41 +08:00
    @phpcxy 这个是带参数的二维码,带的是那个索要二维码的用户的 open_id,所以应该是不能提前生成的,再加上这个二维码是扫描然后进入微信公众号关注页,这个是通过微信提供的二维码
    yao978318542
        11
    yao978318542  
       2019-01-17 11:02:31 +08:00
    你都自问自答了
    phpcxy
        12
    phpcxy  
       2019-01-17 11:24:52 +08:00
    @CharlieBrown #10 提前调用微信 API 生成好 N 个二维码并且上传素材,把场景 ID 记录在数据库。用户申请后把场景 ID 与 open_id 绑定下
    avenger
        13
    avenger  
       2019-01-17 12:08:16 +08:00 via iPhone
    搭车问下,带参数二维码 10w 上限怎么破?
    CharlieBrown
        14
    CharlieBrown  
    OP
       2019-01-17 13:43:26 +08:00
    @phpcxy good idea
    CharlieBrown
        15
    CharlieBrown  
    OP
       2019-01-17 13:44:22 +08:00
    @avenger 永久的是 10w 上限,临时的好像没上限,突破 10w 应该是大微信号了,应该可以申请
    CharlieBrown
        16
    CharlieBrown  
    OP
       2019-01-17 13:45:09 +08:00
    @phpcxy 不过永久素材库有限量 5000,只能说是先下载好,然后等用户请求就上传
    win7pro
        17
    win7pro  
       2019-01-17 14:33:38 +08:00 via Android
    回复图文,图文链接指向二维码图片 url,是否也 ok ?
    CharlieBrown
        18
    CharlieBrown  
    OP
       2019-01-17 16:46:38 +08:00
    @win7pro
    没听懂你的意思,但二维码是微信生成的,只会返回 ticket 和 url (用于生成二维码) 和 一个二维码有效时间

    凭借 ticket 到一个接口请求,下载图片

    所以这个图片是一定要下载,

    我提这个问题是想知道,是否微信有生成二维码的接口,直接返回一个 media_id 用于微信公众号回复图片,或者是否有类似的方法可以避开下载、上传这一步

    而且回复图片是业务要求的,为了显得高大上,我只是个打代码的。。。
    win7pro
        19
    win7pro  
       2019-01-17 18:59:20 +08:00 via Android
    @CharlieBrown 这个图片不需要下载,你下载图片的 url 本来就可以发给用户直接让用户打开。
    win7pro
        20
    win7pro  
       2019-01-17 19:13:35 +08:00 via Android   ❤️ 1
    @CharlieBrown 可以用 http://weixin.qq.com/q/02SeBKZPGnf431hfN7xs1J 这样的格式来直接打开二维码
    win7pro
        21
    win7pro  
       2019-01-17 19:33:54 +08:00 via Android
    @CharlieBrown 对不起,我写错了,是 https:/ /mp.weixin.扣扣.com/cgi-bin/showqrcode?ticket=TICKET 这个格式本来就可以让用户打开一个图片
    CharlieBrown
        22
    CharlieBrown  
    OP
       2019-01-18 09:13:11 +08:00
    @win7pro 确实这个 url 打开是二维码图,不知道微信有没有提供 url,返回 media_id 的接口(好像没看到)

    至于你说的图文消息指向二维码 url,其实图文消息对应的也是一个 media_id 吧,

    为了好看,我想老板肯定要直接回复二维码图的,

    至于你说的直接回复二维码 url,我想可以用作直接回复 ‘二维码图’ 导致服务端压力太大的一种解决方案

    第一次写服务端,按微信开发文档写的,我也不知道我的代码能支持多少人同时访问,所以才想方设法精简服务端操作
    win7pro
        23
    win7pro  
       2019-01-18 09:22:33 +08:00 via Android
    @CharlieBrown 公众号支持直接给用户推送一条图文,图文的标题,描述,配图,以及该图文点击后跳转到什么 url,都是自定义的,不需要提前上传到公众号素材。你可以给用户推送的图文标题行型如“点击查看二维码”,然后图文的跳转 url 到前面提到的二维码图片 url 上,这样用户点击图文后就能打开一个二维码图,长按就可以识别了。
    CharlieBrown
        24
    CharlieBrown  
    OP
       2019-01-18 10:51:09 +08:00
    @win7pro 完美实现,非常感谢!

    不过有个小问题,这个图文消息的缩略图(概述图),他是直接用的 url,

    我用的是 https://api.weixin.qq.com/cgi-bin/media/uploadimg?access_token={} 这个接口,返回的是图片的 url,

    只是不知道这个接口返回的 url 是否有有效期(开发文档没看到),

    如果有有效期的话,就得每隔 n 天上传一次,然后记录;或者不使用图了
    win7pro
        25
    win7pro  
       2019-01-18 13:42:28 +08:00 via Android
    @CharlieBrown 不客气。有效期要看你的二维码类型,如果是永久二维码,那这个 ticket 也是永久的,但限制一个公众号只能 10w 个。如果是临时二维码,ticket 就和临时二维码生成时候设置的有效期有关,最长 30 天,但数量无限。如果你确实需要一个长期能访问的二维码图片连接但二维码图片内容能更新,那就自己用动态语言写一个后台动态加载二维码图片后显示出来的地址作为图片地址,然后自己维护这个二维码图片的生命周期。
    CharlieBrown
        26
    CharlieBrown  
    OP
       2019-01-18 14:30:11 +08:00
    @win7pro 不不不,我的意思是:图文消息有一个缩略图 picUrl,

    这个 url 我用的是 https://api.weixin.扣扣.com/cgi-bin/media/uploadimg?access_token={} 这个接口,返回的是图片的 url,不知道这个接口有没有有效期

    <xml>
    <ToUserName>< ![CDATA[toUser] ]></ToUserName>
    <FromUserName>< ![CDATA[fromUser] ]></FromUserName>
    <CreateTime>12345678</CreateTime>
    <MsgType>< ![CDATA[news] ]></MsgType>
    <ArticleCount>1</ArticleCount>
    <Articles>
    <item>
    <Title>< ![CDATA[title1] ]></Title>
    <Description>< ![CDATA[description1] ]></Description>
    <PicUrl>< ![CDATA[picurl] ]></PicUrl>-----------------------------------------------------这个缩略图
    <Url>< ![CDATA[url] ]></Url>---------------------------------------------------------------二维码图片
    </item>
    </Articles>
    </xml>
    lizuoqiang
        27
    lizuoqiang  
       2019-06-05 11:56:54 +08:00
    最近上传素材报错, 'errcode' => 41005,
    'errmsg' => 'media data missing hint: [69jZ2a09762161]',
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5968 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 06:15 · PVG 14:15 · LAX 23:15 · JFK 02:15
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.