Heim > WeChat-Applet > WeChat-Entwicklung > Delphi + Intraweb für WeChat-Entwicklung – Zugriff auf die WeChat-Plattform

Delphi + Intraweb für WeChat-Entwicklung – Zugriff auf die WeChat-Plattform

高洛峰
Freigeben: 2017-03-04 11:28:48
Original
2024 Leute haben es durchsucht

Der Beispielcode wurde veröffentlicht! Bitte verwenden Sie delphi+intraweb für die WeChat-Entwicklung. 1–4 Codebeispiele zum Herunterladen. Obwohl es sich um einen Beispielcode handelt, wurde er aus meinem Projekt verschoben. Das Paket ist vollständig und für die Selbsterweiterung und -änderung geeignet.

iw14.0.50 ist da. Was mich an der neuen Version am meisten reizt, ist die Hinzufügung einer vollständigen httphandler-Funktion: Endlich können Sie die URL direkt in die Adressleiste eingeben, um die iw-Funktionsseite frei zu öffnen Verwenden Sie js-Frameworks wie EasyUI. Die Anzeige modaler Dialogfelder ist nicht mehr störend. Ich habe das Gefühl, dass iw zum ersten Mal den gängigen Webentwicklungstools nahe kommt!

Ich bin so aufgeregt, lass es uns versuchen. Tatsächlich gibt es bei iw immer noch viele Fallstricke, aber wir werden später darüber sprechen...

1. Erstellen Sie ein neues iw-Projekt und wählen Sie „Stand Alone Server/Service“. In diesem Modus eignet es sich am besten zum Debuggen. Wenn es offiziell veröffentlicht wird, können Sie ein Bibliotheksprojekt erstellen und es auf dem .net-Server veröffentlichen. (Ja, Sie haben das richtig gelesen. Jetzt hat sich iw vom isapi-Modus gelöst und kann genau wie .net mvc4-Anwendungen auf IIS bereitgestellt werden. Wie später erläutert wird, können virtuelle .net-Hosts auch iw-Anwendungen veröffentlichen! Eine enorme Verbesserung.)

2. Fügen Sie nach dem Speichern des Projekts eine neue Unit-Datei zum Projekt hinzu, beispielsweise mit dem Namen wxapi.pas. Der Code in dieser Datei ist für die WeChat-Zugriffsarbeit verantwortlich. Der Code lautet wie folgt:

Schnittstelle

verwendet        
  Klassen, IW.Content.Base, System.SysUtils,HTTPApp, IWApplication,        
  IW.HTTP.Request, IW.HTTP.Reply;        

Typ        
  ///

       
  /// 从TContentBase继承下来的类,就相当于asp.net中的httphandler        
  ///
       
  TWxApi = class(TContentBase)        
  protected        
   . function Execute(aRequest: THttpRequest; aReply: THttpReply; const aPathname: string; aSession: TIWApplication; aParams: TStrings ): Boolean; überschreiben;        
  public        
    Konstruktor Create; überschreiben;        
 Ende;        

Implementierung        

verwendet        
  ServerController, UserSessionUnit, Crypt.SHA1;        

{ TWxApi }        

constructor TWxApi.Create;        
beginnen        
  vererbt;        
  // ​​文件不需要真实存在        
  FileMustExist := False;        
Ende;        

function TWxApi.Execute(aRequest: THttpRequest; aReply: THttpReply;        
  const aPathname: string; aSession: TIWApplication;        
  aParams: TStrings): Boolean;        
var        
  Signatur: String;        
 Zeitstempel: string;        
 nonce: string;        
  echostr: string;        
  strs: TStringList;        
  tmpStr: string;        
beginn        
  Ergebnis := True;        

  Signatur := aParams.Values['signature'];        
 timestamp := aParams.Values['timestamp'];        
  nonce := aParams.Values['nonce'];        
  echostr := aParams.Values['echostr'];        

  strs := TStringList.Create;        
  strs.Add('MyTestToken');    // Token,要和微信接口配置信息保持一致        
  strs.Add(timestamp);        
  strs.Add(nonce);        
  strs.Sort;        

  tmpStr := strs[0]+strs[1]+strs[2];        
  tmpStr := SHA1(AnsiString(tmpstr));        

  if tmpStr=signature then        
  begin        
    aReply.WriteString(echostr)        
  end else begin        
   . aReply.WriteString('如果看到这个提示说明此链接地址可作为微信接口地址使用.');        
 Ende;        
  aSession.Terminate; // 释放会话资源,本handler无需会话        
end;        

Ende.

如代码所示,TContentBase即iw版httphandler的基础类,如果不需要显示iwForm,从这个类型继承下来即可。如果需要使用iwForm还有个TContentForm Die URL-Adresse und die URL-Adresse des iwform-Servers.TWxApi.Execute接入的代码,非常简单,不了解的看看微信帮助:微信接入指南.

 

3. Registrieren Sie diesen httphandler in ServerController und posten Sie direkt den ServerController-Registrierungscode:
procedure TIWServerController.IWServerControllerBaseConfig(Sender: TObject);
begin
// In ServerController.OnCon Registrieren Sie unsere Definition in der Abbildung event WeChat Handler
// ServerController.OnConfig-Ereignis wird nur einmal im gesamten Anwendungslebenszyklus ausgeführt
mit THandlers.Add('', 'wxapi.php', TWxApi.Create) do
begin
CanStartSession := True; // Im wahrsten Sinne des Wortes bedeutet es, dass eine Sitzung gestartet werden kann.                                                                                // Wir können normal auf die Seite /wxapi.php zugreifen, was wir offensichtlich nicht benötigen.
end;
end;

Wie im Code gezeigt, schließt der rote THandlers.Add('', 'wxapi.php', TWxApi.Create) die Registrierung von httphandler ab 🎜>http://localhost/wxapi.php
in der Adressleiste des Browsers, um auf den Controller zuzugreifen, den Sie gerade registriert haben.

Aber es gibt eine große Falle in diesem Code. Weitere Informationen finden Sie in den Kommentaren in meinem Code. Die Gefahr besteht darin, dass Sie nach der Registrierung des Handlers die iw-Anwendung starten, aber nicht zuerst /$/start in die Adressleiste des Browsers eingeben, sondern zur Überprüfung direkt /wxapi.php eingeben der httphandler. Die Seite navigiert automatisch zum Hauptfenster. Nachdem ich die Hilfe gelesen hatte, stellte ich fest, dass TContentBase.RequiresSessionStart:=false festgelegt werden muss, andernfalls muss die iw-Anwendung zuerst eine Sitzung starten, um auf das Hauptformular zuzugreifen, bevor ich den httphandler verwende, den ich gemäß der Hilfe festgelegt habe Anweisungen, obwohl die direkte Eingabe von /wxapi.php nicht erneut zum Hauptformular navigiert, wird ein 404-Codefehler angezeigt. Bei der Einzelschrittverfolgung wurde festgestellt, dass der httphandler-Code tatsächlich ausgeführt wurde, daher sollte kein 404 vorliegen Fehler. Mehrparteienüberprüfung und Experimente ergaben, dass TContentBase.CanStartSession:= True gesetzt werden muss, haha. Dies wird in der Hilfe nicht erwähnt, es handelt sich wahrscheinlich um ein neu hinzugefügtes Attribut in der neuen Version. Okay, jetzt geben Sie

http://localhost/wxapi.php

in die Adressleiste ein und die Seite kann normal geöffnet werden.

4. Kopieren Sie die kompilierte iw-Anwendung zum Testen auf den Host und greifen Sie tatsächlich auf WeChat zu

delphi+intraweb进行微信开发-微信平台接入

, aber es wird tatsächlich angezeigt, dass die Konfiguration fehlgeschlagen ist ! Was ist los? Der Code, den ich verwendet habe, wurde aus einer Delphi-Version des WeChat-Zugriffsschnittstellencodes kopiert. Es gab kein Problem mit demselben Code in diesem Programm Okay, ich habe die Standardkodierung des iw-Handlers auf das UTF-8-Format geändert, also habe ich gbk, iso-8859-1 und andere Kodierungsformate ausprobiert, aber alle oben genannten Fehler wurden angezeigt. Ich hatte keine andere Wahl, als ein Protokoll zu schreiben, um zu sehen, ob der Handler-Code ausgeführt wurde. Nachdem ich ihn auf den echten Server gestellt hatte, wurde der Handler-Code jedoch beim Debuggen auf meinem lokalen Computer nicht ausgeführt Surfen im Browser des echten Servers, alles gut, keine Probleme. Was für eine riesige Grube, nach mehreren Tagen verschiedener Tests und Modifikationen war ich bereit aufzugeben. Haha, ich habe mir das eigene httphandler-Beispiel angesehen und festgestellt, dass ein Ereignis in seinem ServerController implementiert war: OnBrowserCheck, also habe ich es versucht Ich habe den gleichen Ereigniscode wie meinen eigenen Code zum Testen verwendet, wow, es funktioniert. . .

procedure TIWServerController.IWServerControllerBaseBrowserCheck(
aSession: TIWApplication; var rBrowser: TBrowser);
begin
// Dieser Ereigniscode ist sehr wichtig, ich stecke hier seit mehreren Tagen fest!
//
// Wenn dieses Ereignis nicht implementiert ist, kann die Eingabe von /wxapi.php in jedem Browser erfolgreich reagieren, außer wenn es darum geht
// WeChat zeigt an, dass die Konfiguration fehlgeschlagen ist, und später im Code Nachdem ich die Protokollausgabe verwendet hatte, stellte ich fest, dass iw WeChat-Anfragen empfangen konnte, die
// TWxApi.Execute-Methode jedoch nicht ausgeführt wurde. Später ging ich auf die offizielle Website, um die entsprechende Hilfe zu lesen, und stellte fest, dass iw nur Browser unterstützt .
// Browsers Nur dann kann auf die Ausgabe normal reagiert werden, und die von WeChat gesendete Webanfrage gehört offensichtlich zu keinem bekannten Browser
wenn rBrowser TOther ist, dann beginnen Sie
rBrowser.Free; > rBrowser := TInternetExplorer.Create(8) ; // Ausgabe von Seiteninhalten mit IE8-kompatiblem Seitenbrowser
end;

Ich denke, die Stärke von Delphi liegt darin, dass alle Quellcodes außer dem Compiler bereitgestellt werden. Wenn es ein Problem gibt, kann es durch Lesen des Quellcodes gelöst werden geschlossen. Es macht nichts, wenn es keinen Quellcode gibt. Ich kann nicht mithalten. Ich empfehle Freunden, die iw verwenden, die Online-Hilfe mit den eigenen Beispielprojekten zu kombinieren. Allerdings hat sich iw bis heute weiterentwickelt und ist in der Tat sehr einfach zu bedienen. Besonders für Leute mit Delphi-Hintergrund ist es wirklich cool, ihre besten Sprach- und Entwicklungstools für die Webentwicklung verwenden zu können. delphi+intraweb进行微信开发-微信平台接入

Weitere Informationen zu Delphi+Intraweb für die WeChat-Entwicklung – Zugang zur WeChat-Plattform finden Sie auf der chinesischen PHP-Website für verwandte Artikel!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage