前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >用户给公众号发送的图片消息,如何下载消息中的图片,说破很容易。

用户给公众号发送的图片消息,如何下载消息中的图片,说破很容易。

作者头像
加菲猫的VFP
发布2021-11-19 14:50:21
1.6K0
发布2021-11-19 14:50:21
举报
文章被收录于专栏:加菲猫的VFP

在前一篇文章已经知道,接收消息是XML格式

xml图片消息格式

Msgtype有几种类型 文本消息 图片消息 语音消息 视频消息 小视频消息 地理位置消息 (可以用来打卡) 链接消息

点击这里查看微信文档

https://developers.weixin.qq.com/doc/offiaccount/Message_Management/Receiving_standard_messages.html

我们再看这里图片消息xml中的picurl,mediaid部分

代码语言:javascript
复制
<PicUrl><![CDATA[this is a url]]></PicUrl>
<MediaId><![CDATA[media_id]]></MediaId>

那下载这个图片就有两个方法了 1 使用picurl来下载 2 根据MediaId用微信临时素材接口下载

方法一:使用picurl来下载

代码语言:javascript
复制
cUrl=this.getkeyvalue(MsgText,"PicUrl")             
Qiyu_HttpClient =Newobject("Qiyu_HttpClient","Qiyu_HttpClient.prg")                
Qiyu_HttpClient.DataType="bin"    &&数据类型 string 字符串  bin 二进制流                
cReturn= Qiyu_HttpClient.Send(cUrl)
If Isnull(cReturn)
    ?Qiyu_HttpClient.msg
Else
    STRTOFILE(cReturn,SYS(2015)+".jpg")
Endif

方法二 根据MediaId 获取

我已经将调用api封装成类库了。

代码语言:javascript
复制
cMediaId=This.getkeyvalue(MsgText,"MediaId")
oMedia=This.getMedia(cMediaId)  &&返回对象
IF ISNULL(oMedia)
   ERROR this.msg
ENDIF 
?"文件名",oMedia.filename
Strtofile(oMedia.filedata,oMedia.filename)  &&多媒体数据

两个方法有什么区别,一个是压缩过的图,一个是原图。

附上文中的两个过程 ,大家没有框架的,可以按这个思路去实现。有框架的当然就直接用啦。 getkeyvalue过程方法

代码语言:javascript
复制
 Procedure getkeyvalue
        Lparameters cMsgText,cKey
        If Pcount()<2
            Error "必须传入两个参数"
        Endif

        Set Textmerge Delimiters To "{" , "}"
        TEXT TO leftchar NOSHOW TEXTMERGE PRETEXT 1+2
        <{cKey}><![CDATA[
        ENDTEXT
        TEXT TO rightchar NOSHOW TEXTMERGE PRETEXT 1+2
        ]]></{cKey}>
        ENDTEXT
        Set Textmerge Delimiters
        Return Strextract(cMsgText ,leftchar,rightchar,1,1)
    Endproc

getMedia过程

获取媒体资源,返回对象(filename 文件名,filedata文件数据)

代码语言:javascript
复制
    Procedure getMedia
        Lparameters cMEDIA_ID
        Local cUrl,lcResult,oFly
        TEXT TO curl NOSHOW TEXTMERGE PRETEXT 1+2+4+8
        https://api.weixin.qq.com/cgi-bin/media/get?access_token=<<this.token>>&media_id=<<cMEDIA_ID>>
        ENDTEXT

        Qiyu_HttpClient =Newobject("Qiyu_HttpClient","Qiyu_HttpClient.prg")
        Qiyu_HttpClient.DataType="bin"    &&数据类型 string 字符串  bin 二进制流
        lcResult= Qiyu_HttpClient.Send(cUrl)
        If Isnull(lcResult)
            This.msg=Qiyu_HttpClient.msg
            Return .Null.
        Endif

        oFly=Createobject("empty")
        AddProperty(oFly,"filename",Qiyu_HttpClient.filename)
        AddProperty(oFly,"filedata",lcResult)

        Return oFly
    Endproc
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-11-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 加菲猫的VFP 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 方法一:使用picurl来下载
  • 方法二 根据MediaId 获取
相关产品与服务
语音消息
语音消息(Voice Message Service,VMS)通过腾讯云提供的语音专线,为客户提供语音告警、语音通知、语音验证码等服务。语音消息具有高到达率、超低延时、秒级触达的优势,致力于提供优质的语音消息服务。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档