zoukankan      html  css  js  c++  java
  • Delphi XE7 用indy开发微信公众平台(9)- 高级群发接口

    高级群发接口

    原文链接:http://www.cnblogs.com/devinlee/p/4282748.html

    扫下方二维码关注,测试效果

    1、上传多媒体文件(这里以上传图片为例)

    uses IdMultipartFormData;

    const

      UpMediaUrl = 'http://file.api.weixin.qq.com/cgi-bin/media/upload?access_token=%s&type=%s';

    function UpMedia(HTTP: TIdHTTP; AccessToken, MediaType, MediaFile: String): String;
    var
      J: TJSONObject;
      Url: String;
      temp: String;
      FormData: TIdMultiPartFormDataStream;
      RespData: TStringStream;
    begin
      RespData := TStringStream.Create('');
      FormData := TIdMultiPartFormDataStream.Create;
      J := TJSONObject.Create;
      try
        FormData.AddFile('media', MediaFile);
        Url := Format(UpMediaUrl, [AccessToken, MediaType]);
        HTTP.Post(Url, FormData, RespData);
        temp := RespData.DataString;
        HTTP.Request.Referer := Url;
        J := TJSONObject.ParseJSONValue(temp) as TJSONObject;
        if J.Count > 0 then
        Result := J.GetValue('media_id').Value
        else Result := '';
      finally
        FormData.Free;
        RespData.Free;
        J.Free;
      end;
    end;
    
    //返回媒体文件的media_id备用

    2、上传图文消息素材

      TGRPNews = record
        MediaID:String;//缩略图的media_id
        Author:String;//作者
        Title:String;//标题
        SorceUrl:String;//阅读原文的地址
        Content:String;//图文消息的内容支持html标签
        Digest:String;//摘要
        ShowCover:String;//是否显示封面
      end;
    const

      UpNewsUrl ='https://api.weixin.qq.com/cgi-bin/media/uploadnews?access_token=%s';

    function UpNews(Num: Integer; AccessToken: String): String;//Num最大为10
    var
      J: TJSONObject;
      N: array of TJSONObject;
      Url: String;
      temp: String;
      C: array of TStringList;
      G: array of TGRPNews;
      i: Integer;
      T: TStringList;
    begin
      J := TJSONObject.Create;
      T := TStringList.Create;
      T.LoadFromFile('F:	.txt');//图消息的title,需提前写好
      SetLength(N, Num);
      SetLength(C, Num);//图文消息的内容
      SetLength(G, Num);//自定义的图文消息结构体
      try
        J.AddPair('articles', TJSONArray.Create);
        with J.GetValue('articles') as TJSONArray do
          for i := 0 to Num - 1 do
          begin
            C[i] := TStringList.Create;
            C[i].LoadFromFile(Format('F:\%d.txt', [i]));//调用图文消息的内容,需提前写好
            G[i].MediaID := UpMedia(AccessToken, 'image', Format('F:\%d.jpg', [i]));
            G[i].Author := '';
            G[i].Title := T[i];
            G[i].SorceUrl := '';
            G[i].Content := C[i].Text;
            G[i].Digest := T[i];
            G[i].ShowCover := '0';
            try
              N[i] := TJSONObject.Create;
              N[i].AddPair('thumb_media_id', G[i].MediaID);
              N[i].AddPair('author', G[i].Author);
              N[i].AddPair('title', G[i].Title);
              N[i].AddPair('content_source_url', G[i].SorceUrl);
              N[i].AddPair('content', G[i].Content);
              N[i].AddPair('digest', G[i].Digest);
              N[i].AddPair('show_cover_pic', G[i].ShowCover);
              Add(N[i]);
            finally
              C[i].Free;
            end;
          end;
        Url := Format(UpNewsUrl, [AccessToken]);
        temp := PostMethod(Url, UTF8Encode(J.ToString), 1);
        J := TJSONObject.ParseJSONValue(temp) as TJSONObject;
        if J.Count > 0 then
        Result := J.GetValue('media_id').Value;
      finally
        J.Free;
        T.Free;
      end;
    end;
    //返回图文消息的media_id备用

    3、预览上传的图文消息

    const
    PreviewUrl = 'https://api.weixin.qq.com/cgi-bin/message/mass/preview?access_token=%s';
    
    function GroupPreviewNews(OpenID, MediaID, AccessToken: String):TJSONObject;
    var
      J: TJSONObject;
      Url: String;
      temp: String;
    begin
      J := TJSONObject.Create;
      try
        J.AddPair('touser', OpenID);
        J.AddPair('mpnews', TJSONObject.Create);
        with J.GetValue('mpnews') as TJSONObject do
        begin
          AddPair('media_id', MediaID);
        end;
    
        J.AddPair('msgtype', 'mpnews');
    
        Url := Format(PreviewUrl, [AccessToken]);
        temp:=PostMethod(Url, UTF8Encode(J.ToString), 1);
        Result:=TJSONObject.ParseJSONValue(temp) as TJSONObject;
      finally
        J.Free;
      end;
    end;

    4、按组群发图文消息

    const
    GroupSendUrl = 'https://api.weixin.qq.com/cgi-bin/message/mass/sendall?access_token=%s';
    
    function GroupSendNews(GroupID, MediaID, AccessToken: String):TJSONObject;
    var
      J: TJSONObject;
      Url: String;
      temp: String;
    begin
      J := TJSONObject.Create;
      try
        J.AddPair('filter', TJSONObject.Create);
        with J.GetValue('filter') as TJSONObject do
        begin
          AddPair('is_to_all', TJSONFalse.Create);
          AddPair('group_id', GroupID);
        end;
    
        J.AddPair('mpnews', TJSONObject.Create);
        with J.GetValue('mpnews') as TJSONObject do
        begin
          AddPair('media_id', MediaID);
        end;
    
        J.AddPair('msgtype', 'mpnews');
    
        Url := Format(GroupSendUrl, [AccessToken]);
        temp:=PostMethod(Url, UTF8Encode(J.ToString), 1);
        Result:=TJSONObject.ParseJSONValue(temp) as TJSONObject;
      finally
        J.Free;
      end;
    end;
  • 相关阅读:
    五大Java开源论坛
    mysql limit,offset 区别
    查询某个字段存在于哪几个表
    C++分享笔记:5X5单词字谜游戏设计
    Linux分享笔记:系统状态检测命令小结
    Linux分享笔记:查看帮助命令 & 常用系统工作命令
    数据结构(C语言)分享笔记:数据结构的逻辑层次、存储层次
    Linux分享笔记:shell终端的介绍
    Java开发学生管理系统
    JAVA使用JDBC连接,修改MySQL数据库(比较乱)
  • 原文地址:https://www.cnblogs.com/devinlee/p/4282748.html
Copyright © 2011-2022 走看看