1. 程式人生 > >UNIGUI接收普通消息和被動回復用戶消息

UNIGUI接收普通消息和被動回復用戶消息

系統 錯誤 數據 提示 acea nil 產生 resp esp

  1. 接收普通消息和被動回復用戶消息

用戶發送消息給公眾號時(或某些特定的用戶操作引發的事件推送時),會產生一個POST請求,開發者可以在響應包(Get)中返回特定XML結構,來對該消息進行響應(現支持回復文本、圖片、圖文、語音、視頻、音樂)。嚴格來說,發送被動響應消息其實並不是一種接口,而是對微信服務器發過來消息的一次回復。

假如服務器無法保證在五秒內處理並回復,必須做出下述回復,這樣微信服務器才不會對此作任何處理,並且不會發起重試(這種情況下,可以使用客服消息接口進行異步回復),否則,將出現嚴重的錯誤提示。詳見下面說明:

1、直接回復success(推薦方式)

2、直接回復空串(指字節長度為0的空字符串,而不是XML結構體中content字段的內容為空)

一旦遇到以下情況,微信都會在公眾號會話中,向用戶下發系統提示“該公眾號暫時無法提供服務,請稍後再試”:

1、開發者在5秒內未回復任何內容

2、開發者回復了異常數據,比如JSON數據等

//unigui接收消息用UniGUIServerModuleHTTPDocument

procedure TUniServerModule.UniGUIServerModuleHTTPDocument(

const Document: string; const InParams: TStrings;

ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo;

var Handled: Boolean);

var temp:TStringList;

temps:string;

begin

if CheckSignature(ARequestInfo) then

begin

if ARequestInfo.PostStream <> nil then

begin

temp:=TStringList.Create;

temp.LoadFromStream(TMemoryStream(ARequestInfo.PostStream));

temps := ‘<?xml version=‘‘1.0‘‘ encoding=‘‘gb2312‘‘?>‘ + temp.Text;

temps := StringReplace(temps, ‘<![CDATA[‘, ‘‘, [rfReplaceAll, rfIgnoreCase]);

temps := StringReplace(temps, ‘]]>‘, ‘‘, [rfReplaceAll, rfIgnoreCase]);

CoInitialize(nil);

try

Handled := true;

AResponseInfo.CharSet := ‘UTF-8‘;

AResponseInfo.ContentType := ‘UTF-8‘;

AResponseInfo.ContentType := ‘text/html; charset=UTF-8‘;

AResponseInfo.ContentText :=Analysis(temps);//回復用戶消息,也可以直接返回:AResponseInfo.ContentText :=‘‘

finally

CoUninitialize;

temp.Free;

end;

end;

end;

UNIGUI接收普通消息和被動回復用戶消息