被动回复用户消息

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

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

1、回复文本消息

function ReplyText(Msg: TMessage; MsgText: String): RawByteString;
var
  X: IXMLDocument;
begin
  X := NewXMLDocument;
  try
    X.Xml.text := TextMsg;
    X.Active := true;
    with X.DocumentElement.ChildNodes do
    begin
      Nodes['ToUserName'].NodeValue := Msg.FromUserName;
      Nodes['FromUserName'].NodeValue := Msg.ToUserName;
      Nodes['CreateTime'].NodeValue := UnixTime(now);
      Nodes['MsgType'].NodeValue := 'text';
      Nodes['Content'].NodeValue := MsgText;
    end;
    Result := UTF8Encode(X.Xml.text);
  finally
    X.Active := False;
    X := nil;
  end;
end;

//设置AResponseInfo.ContentText 等于返回的结果,即可自动回复文本消息

2、回复图文消息

  TNews = record
    Title: String;
    Description: String;
    PicUrl: String;
    Url: String;
  end;

var 
    MusicSubimg='https://mmbiz.qlogo.cn/mmbiz/cHdclURXy6gmu3ib6UA20b5s2Xy1Ra7cxYMNIuDvFDiaQvX8MZDibgQ1eCOsfvL6zufo7xSzUiaQZUY1KovYWmJ6Hg/0';

function NewsMusic: TArray<TNews>;
begin
  SetLength(Result, 2);
  Result[0].Title := 'QQ音乐巅峰榜·内地';
  Result[0].Description := 'QQ音乐巅峰榜·内地';
  Result[0].PicUrl := MusicSubimg;
  Result[0].Url := 'http://y.qq.com/#type=toplist&p=top_2';

  Result[1].Title := 'QQ音乐巅峰榜·港台';
  Result[1].Description := 'QQ音乐巅峰榜·港台';
  Result[1].PicUrl := MusicSubimg;
  Result[1].Url := 'http://y.qq.com/#type=toplist&p=top_1';
end;

function ReplyNews(M: TMessage; News: TArray<TNews>): RawByteString;
var
  X: IXMLDocument;
  I: Integer;
begin
  X := NewXMLDocument;
  try
    X.Xml.text := NewsMsg;
    X.Active := true;
    with X.DocumentElement.ChildNodes do
    begin
      Nodes['ToUserName'].NodeValue := M.FromUserName;
      Nodes['FromUserName'].NodeValue := M.ToUserName;
      Nodes['CreateTime'].NodeValue := UnixTime(now);
      Nodes['MsgType'].NodeValue := 'news';
      Nodes['ArticleCount'].NodeValue := length(News);
      with Nodes['Articles'].ChildNodes do
      begin
        with Nodes['item'].ChildNodes do
        begin
          Nodes['Title'].NodeValue := News[0].Title;
          Nodes['Description'].NodeValue := News[0].Description;
          Nodes['PicUrl'].NodeValue := News[0].PicUrl;
          Nodes['Url'].NodeValue := News[0].Url;
        end;
        for I := 1 to length(News) - 1 do
        begin
          Add(First.CloneNode(true));
          with Nodes['item'].ChildNodes do
          begin
            Nodes['Title'].NodeValue := News[I].Title;
            Nodes['Description'].NodeValue := News[I].Description;
            Nodes['PicUrl'].NodeValue := News[I].PicUrl;
            Nodes['Url'].NodeValue := News[I].Url;
          end;
        end;
      end;
    end;
    Result := UTF8Encode(X.Xml.text);
  finally
    X.Active := False;
    X := nil;
  end;
end;

//设置AResponseInfo.ContentText 等于返回的结果,即可自动回复图文消息

3、回复模板消息

function PostMethod(HTTP: TIdHTTP; Url: String; Data: UTF8String; Max: Integer): String;
var
  PostData, RespData: TStringStream;
begin
  RespData := TStringStream.Create('');
  PostData := TStringStream.Create(Data);
  try
    try
      if HTTP = nil then
        Exit;
      HTTP.Post(Url, PostData, RespData);
      Result := RespData.DataString;
      HTTP.Request.Referer := Url;
    except
      Dec(Max);
      if Max = 0 then
      begin
        Result := '';
        Exit;
      end;
      Result := PostMethod(Url, Data, Max);
    end;
  finally
    HTTP.Disconnect;
    FreeAndNil(RespData);
    FreeAndNil(PostData);
  end;
end;

 

SendTemplateUrl = 'https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=%s';

function ReplyTemRecharge(OpenID, AccessToken, First, Remark: String;
  Money: Integer): TJSONObject;
var
  Url: string;
  Data: TJSONObject;
  temp: RawByteString;
begin
  Data := TJSONObject.Create;
  try
    Url := Format(SendTemplateUrl, [AccessToken]);
    Data.AddPair('touser', OpenID);
    Data.AddPair('template_id', 'NH_ctxX4kjW1Jw3q8Cb1y1uBAard9uOMdF5F2Nq9Uwc');
    Data.AddPair('url', '');
    Data.AddPair('topcolor', '#FF0000');
    Data.AddPair('data', TJSONObject.Create);
    with Data.Values['data'] as TJSONObject do
    begin
      AddPair('first', TJSONObject.Create);
      with Values['first'] as TJSONObject do
      begin
        AddPair('value', '充值成功');
        AddPair('color', '#173177');
      end;
      AddPair('keyword1', TJSONObject.Create);
      with Values['keyword1'] as TJSONObject do
      begin
        AddPair('value', format('%d 元',[Money]));
        AddPair('color', '#173177');
      end;
      AddPair('keyword2', TJSONObject.Create);
      with Values['keyword2'] as TJSONObject do
      begin
        AddPair('value', formatdatetime('yyyy-mm-dd hh:mm:ss', now));
        AddPair('color', '#173177');
      end;
      AddPair('remark', TJSONObject.Create);
      with Values['remark'] as TJSONObject do
      begin
        AddPair('value', '这只是模板测试,不要当真哦^_^');
        AddPair('color', '#173177');
      end;
    end;
    temp := PostMethod(Url, UTF8Encode(Data.ToString), 1);
    Result := TJSONObject.ParseJSONValue(temp) as TJSONObject;
  finally
    Data.Free;
  end;
end;

 

posted on 2015-02-09 22:48  Devin程序园  阅读(1952)  评论(1编辑  收藏  举报