插件当前支持接口
function GetStampTime(d: TDateTime): Int64;
///<summary>微信对服务器的验证</summary>
function checktoken(token, signature, timestamp, nonce, echostr: string): string;
///<summary>获取access_token值</summary>
function token(grant_type, appid, secret: string): string;
///<summary>获取用户列表/summary>
function user_get(next_openid: string): string;
///<summary>获取分组</summary>
function groups_get(): string;
///<summary>获取access_token值</summary>
function message_mass_preview(): string;
/// <summary>
/// 解析数据到接收消息对象
/// </summary>
function message_Parser(xml: string; var message_: TMessage_Receive): Boolean;
/// <summary>
/// 解析发送数据对象为xml结构
/// </summary>
function message_to_xml(message_: TMessage_Send): string;
/// <summary>
/// 获取素材列表
/// </summary>
function material_batchget_material(json: string): string;
/// <summary>获取素材总数</summary>
function material_get_materialcount(): string;
/// <summary>
/// 新增临时素材
/// </summary>
function media_upload(filetype: string; filepath: string): string;
/// <summary>
/// 获取临时素材
/// </summary>
function media_get(media_id: string): string;
/// <summary>
/// 新增其他类型永久素材
/// </summary>
function media_add_material(filetype: string; filepath: string): string;
/// <summary>
/// 获取永久素材 <para>{"media_id":MEDIA_ID}</para>
/// </summary>
function material_get_material(json: string): string;
/// <summary>
/// 删除永久素材<para>{"media_id":MEDIA_ID}</para>
/// </summary>
function material_del_material(json: string): string;
/// <summary>
/// 修改永久图文素材
/// </summary>
function material_update_news(json: string): string;
事例
unit IndexController;
interface
uses
System.SysUtils, System.Classes, superobject, View, BaseController,
System.DateUtils, WechatApi;
type
TIndexController = class(TBaseController)
private
procedure MessageSet(message_: TMessage_Receive; var message_ret: TMessage_Send);
procedure EventSet(message_: TMessage_Receive; var message_ret: TMessage_Send);
procedure InitMessage(message_: TMessage_Receive; var message_ret: TMessage_Send);
public
procedure Index(index: Integer);
procedure api;//对接微信接口
end;
implementation
uses
LogUnit;
{ TIndexController }
procedure TIndexController.api;
var
s: string;
message_: TMessage_Receive;
message_ret: TMessage_Send;
doc: IXmlDocument;
begin
// doc:=LoadXmlDocumentFromXML()
with view do
begin
//服务 token 验证
if Input('signature') <> '' then
begin
ShowText(Plugin.Wechat.checktoken('xxxxxxx', Input('signature'), Input('timestamp'), Input('nonce'), Input('echostr')));
end
else
begin
//处理接收消息及操作事件
message_ := TMessage_Receive.Create;
message_ret := TMessage_Send.Create;
try
s := Request.Content;
if Plugin.Wechat.message_Parser(s, message_) then
begin
InitMessage(message_, message_ret); //返回消息初始化
if message_.MsgType = _MsgTypeEvent then
begin
EventSet(message_, message_ret); //接收到事件开始处理
end
else
begin
MessageSet(message_, message_ret); //接收到消息开始处理
end;
s := Plugin.Wechat.message_to_xml(message_ret);
ShowXML(s);
end
else
begin
ShowHTML('');
end;
finally
FreeAndNil(message_);
FreeAndNil(message_ret);
end;
end;
end;
end;
procedure TIndexController.EventSet(message_: TMessage_Receive; var message_ret: TMessage_Send);
var
command: string;
begin
command := message_.Event;
if command = _EventUnsubscribe then //取消关注
begin
message_ret.MsgType := _MsgTypeText;
message_ret.Content := '再见';
end;
if command = _EventSubscribe then //开始关注
begin
message_ret.MsgType := _MsgTypeText;
end;
if command = _EventLOCATION then //定位
begin
message_ret.MsgType := _MsgTypeText;
message_ret.Content := '你发了定位:' + message_.Latitude;
end;
end;
procedure TIndexController.Index(index: Integer);
var
token, tmp: string;
msg: string;
jo: ISuperObject;
begin
with View do
begin
jo := SO();
if index = 0 then
ShowText('HELLO')
else
begin
token := SessionGet('token');
if token = '' then
begin
tmp := Plugin.Wechat.token('client_credential', 'xxxxxxxxxx', 'xxxxxxxx');
token := SO(tmp).s['access_token'];
SessionSet('token', token);
end;
Plugin.Wechat.access_token := token;
if index = 1 then
begin
tmp := Plugin.Wechat.media_upload(_MsgTypeImage, './material/www.jpg');
end;
if index = 2 then
begin
tmp := Plugin.Wechat.material_get_materialcount();
end;
if index = 3 then
begin
jo.S['type'] := 'image';
jo.i['offset'] := 0;
jo.i['count'] := 2;
tmp := Plugin.Wechat.material_batchget_material(jo.AsString);
end;
if index = 4 then
begin
tmp := Plugin.Wechat.media_upload(_MsgTypeVideo, './material/mime.mp4');
end;
ShowText(tmp);
end;
end;
end;
procedure TIndexController.InitMessage(message_: TMessage_Receive; var message_ret: TMessage_Send);
begin
message_ret.ToUserName := message_.FromUserName;
message_ret.FromUserName := message_.ToUserName;
message_ret.CreateTime := view.Plugin.Wechat.GetStampTime(Now).ToString;
message_ret.MsgType := _MsgTypeText;
message_ret.Content := '欢迎加入DelphiWebMVC。' + chr(13) + chr(10)
+ ' 0:回复文本。' + chr(13) + chr(10)
+ ' 1:回复图片。' + chr(13) + chr(10)
+ ' 2:回复语音。' + chr(13) + chr(10)
+ ' 3:回复视频。' + chr(13) + chr(10)
+ ' 4:回复音乐。' + chr(13) + chr(10)
+ ' 5:回复图文。';
end;
procedure TIndexController.MessageSet(message_: TMessage_Receive; var message_ret: TMessage_Send);
var
command: string;
begin
if message_.MsgType = _MsgTypeLocation then //当前发布位置消息
begin
message_ret.MsgType := _MsgTypeText;
message_ret.Content := '当前位置:' + chr(13) + chr(10) +
'X=' + message_.Location_X + chr(13) + chr(10) +
'Y=' + message_.Location_Y + chr(13) + chr(10) +
'Scale=' + message_.Scale + chr(13) + chr(10) +
'Label=' + message_.Label_;
end
else if message_.MsgType = _MsgTypeText then
begin
command := message_.Content;
if command = '0' then //回复文本消息
begin
message_ret.MsgType := _MsgTypeText;
message_ret.Content := '我是DelphiWebMVC我可以开发公众号了!';
end;
if command = '1' then //回复图片消息
begin
message_ret.MsgType := _MsgTypeImage;
// message_ret.Image.MediaId := '9Yi6pQsyaQUf5EYO5jHOd9M1K0TKKA5SpDKzBE62XDpD9yqByQS36e9Hy_MgGF2G';
message_ret.Image.MediaId := '89opt5Ma6vPyYmQukW9COgBOYoiCZsE4BLvvtz34Nu5bSTY5sfYOKv2qIGbD4ZdK';
end;
if command = '2' then //回复语音消息
begin
message_ret.MsgType := _MsgTypeVoice;
message_ret.Voice.MediaId := 'jGO_XpEQFxnW5IMSXXAb0cRI2e3nc-_y1BE01kQyTXyEcurCHDG_Fhfunb1r4_k4';
end;
if command = '3' then //回复视频消息
begin
message_ret.MsgType := _MsgTypeVideo;
message_ret.Video.MediaId := '6TQwxMECn2CXY4Tz7SYw6bWMS0CqkAMoC21afdpHdkZ0IbURHlUWVY7GqlyUUHU3';
message_ret.Video.Title := 'MIME设置';
message_ret.Video.Description := '描述部分';
end;
if command = '4' then //回复音乐消息
begin
message_ret.MsgType := _MsgTypeMusic;
message_ret.Music.Title := '音乐';
message_ret.Music.Description := '描述';
message_ret.Music.MusicUrl := 'http://2me1029720.imwork.net/material/music.mp3';
message_ret.Music.HQMusicUrl := 'http://2me1029720.imwork.net/material/music.mp3';
message_ret.Music.ThumbMediaId := '89opt5Ma6vPyYmQukW9COgBOYoiCZsE4BLvvtz34Nu5bSTY5sfYOKv2qIGbD4ZdK';
end;
if command = '5' then //回复图文消息
begin
message_ret.MsgType := _MsgTypeNews;
with message_ret.AddAtricle do
begin
Title := '标题';
Description := '描述';
PicUrl := 'http://2me1029720.imwork.net/material/www.jpg';
Url := 'https://mp.weixin.qq.com/s?__biz=Mzg3OTA3MTU1MQ== ' +
'&tempkey=MTAxMF91NHQxNDRUNXNWUk1BY3RSZXpONUdVdlczRWNkLXVkaW' +
'Q0dHpzeWRxWXE2NWw5VmE3b1FjS2V3SmpndG5OUTdkNXFpQXZDZk02UzRONkt' +
'PQ2RwSG1IbkhIRjFuYldBeE8yc0ZQdG0tMUpLb1ZxN3ZhdlNyTlpLZGI0ZlBNN' +
'FQ5LVZJTHhFQzdiWS1Mek5MUnkzVE01em1odzVZQWVxeVhXT19GLVhBfn4%3D&ch' +
'ksm=4f0b5979787cd06f54676bdc9649e01393e5e3fa999823d65b6494c8973261190792d5c39458#rd';
end;
with message_ret.AddAtricle do
begin
Title := '标题';
Description := '描述';
PicUrl := 'http://2me1029720.imwork.net/material/www.jpg';
Url := 'https://mp.weixin.qq.com/s?__biz=Mzg3OTA3MTU1MQ== ' +
'&tempkey=MTAxMF91NHQxNDRUNXNWUk1BY3RSZXpONUdVdlczRWNkLXVkaW' +
'Q0dHpzeWRxWXE2NWw5VmE3b1FjS2V3SmpndG5OUTdkNXFpQXZDZk02UzRONkt' +
'PQ2RwSG1IbkhIRjFuYldBeE8yc0ZQdG0tMUpLb1ZxN3ZhdlNyTlpLZGI0ZlBNN' +
'FQ5LVZJTHhFQzdiWS1Mek5MUnkzVE01em1odzVZQWVxeVhXT19GLVhBfn4%3D&ch' +
'ksm=4f0b5979787cd06f54676bdc9649e01393e5e3fa999823d65b6494c8973261190792d5c39458#rd';
end;
message_ret.ArticleCount := message_ret.Articles.Count.ToString;
end;
end;
end;
end.