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

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;

加我微信:Leedege一起交流Delphi开发经验



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Devin.Lee

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值