Delphi XE7 用indy开发微信公众平台(9)- 高级群发接口

高级群发接口

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

uses IdMultipartFormData;

const

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

function UpMedia(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:\t.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);
    addlog(temp);
    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);
    addlog(temp);
    Result:=TJSONObject.ParseJSONValue(temp) as TJSONObject;
  finally
    J.Free;
  end;
end;

 

原文地址:http://www.cnblogs.com/devinlee/p/4282748.html

Delphi XE7 用indy开发微信公众平台(9)- 高级群发接口

上一篇:URL详解


下一篇:Delphi XE7 用indy开发微信公众平台(6)- 被动回复用户消息