Maison > Article > Applet WeChat > delphi réalise le développement de WeChat et l'accès à la plateforme de comptes publics WeChat
Tout d'abord, vous devez étudier les informations d'accès, sur http://mp.weixin.qq.com/wiki/home/index.html, car les principes sont tous là, alors assurez-vous pour le lire attentivement. Ensuite, utilisez Delphi pour implémenter une fonction correspondante, puis demandez un compte de test d'interface de plate-forme publique WeChat. http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login
fonction CheckSignature (signature const, horodatage, nonce, jeton : chaîne ): booléen;
var
strs: TStringList;
tmpStr: string;
begin
strs := TStringList.Create;
try
strs.Add(token);
strs. Add(timestamp);
strs.Add(nonce);
strs.Sort;
tmpStr := strs[0] strs[1] strs[2];
tmpStr := SHA1(tmpStr);
if tmpStr = signature then
Résultat := True
else
Résultat := False;
enfin
FreeAndNil(strs);
end;
end;
Lorsque le résultat renvoyé par la fonction est vrai, cela signifie que l'accès est réussi ! Pour cette fonction, référez-vous à l'exemple mis en ligne par les amis csdn, merci. Dans cet exemple, une unité de la fonction SHA1 est fournie, vous devez donc la télécharger à nouveau.
Après avoir préparé cette fonction, ensuite, comment utiliser cette fonction ?
Étant donné que le serveur WeChat envoie une requête Get au serveur Web connecté, nous devons appeler cette CheckSignature dans la méthode PerformGet du serveur Web kbmMW implémenté par nous-mêmes.
function TDJ_FrmPhoneHTTPService.PerformGet(ClientIdent: TkbmMWClientIdentity; const AURL: string;
const Args: tableau de Variant): Variant;
var
FuncName: string;
qv: TkbmMWHttpQueryValues ;//Traitement des paramètres transmis par la requête Get.
begin
if length(Args) < 1 then
kbmMWRaiseException(KBMMW_ERR_SERVICE_HTTP_URLMISSING, 'Missing URL.')
else
commencer
FuncName := UpperCase(copy(Args[0], 2, length(Args[0]) - 1));
if FuncName.Equals('WECHAT.HTML') then
commencer
// Transfert vers l'interface WeChat
qv := TkbmMWHttpQueryValues.Create;
qv.AsString := Args[2];//Récupère les paramètres transmis par la requête get.
try
// Accès à la vérification
if qv.ValueByName['echostr'] <> '' then//Si echostr n'est pas vide, cela indique une demande de vérification
start
Résultat := '';
si dmwx.CheckSignature(qv.ValueByName['id'], qv.ValueByName['signature'],
qv.ValueByName['timestamp'], qv.ValueByName['nonce']) alors
Résultat := qv.ValueByName['echostr'];//Si la vérification est réussie, retournez echostr pour informer le serveur WeChat que la vérification est réussie ');
enfin
FreeAndnil(qv); end;
exit;//Terminez cette réponse à Get.
end;
....Omettez l'implémentation suivante
Dans le projet actuel, je l'ai implémenté comme ça. implémenté le code de l'interface WeChat dans une unité wechatImpl, puis implémenté un DataModule pour encapsuler davantage la méthode wechatImpl lors de l'encapsulation, pour implémenter les opérations sur la base de données.
Prenons la vérification comme exemple et voyons comment elle est implémentée dans DataModule ?
fonction tdmwx.CheckSignature(id, signature, timestamp, nonce: string): Boolean;
begin
result:=False;
sinon qWXFWH.Active alors
qWXFWH. Open;
if qWXFWH.Locate('fid', VarArrayOf([id]), []) then//Interrogez la table des numéros de service pour voir s'il existe un enregistrement d'identifiant correspondant
begin
if wechatImpl .CheckSignature( signature, timestamp, nonce, qWXFWH.FieldByName('FToken').AsString)//S'il existe, prenez la valeur du jeton définie dans le tableau et appelez la fonction de vérification.
then
Résultat := true;
end;
end;
Parmi eux, qWXFWH est un objet kbmMWuniDACQuery, utilisé pour enregistrer une table de numéros de service WeChat. La structure de la table est la suivante :
CREATE TABLE WX_FWH ( FID INTEGER,//A L'identifiant du compte de service est utilisé pour gérer plusieurs comptes de service
FTOKEN VarChar(32), //Valeur du jeton de chaque compte de service
FAPPID VarChar(16),
. FAPPSECRET varchar(16),
FACCESSTOKEN VARCHAR (512),
FEXPIRESIN INTEGER,
FGETDATE DATETIME);
Lors de l'enregistrement du serveur, vous devez d'abord ajouter des informations d'enregistrement à cette table, telles que : id =1,token=kbmmwtoken1
Le contenu d'inscription correspondant est :
url=www.test.cc/wechat.html?id=1
token=kbmmwtoken1
De cette façon, lorsque le serveur WeChat envoie une demande de vérification, l'identifiant sera Utilisé comme paramètre Passé ensemble, la méthode CheckSignature du datamodule obtiendra la valeur du jeton définie dans la table de données en fonction de la valeur de l'id, puis appellera la méthode de vérification de l'interface WeChat.
Pour résumer le contenu ci-dessus, afin d'obtenir l'accès à WeChat, j'ai divisé le code implémenté en trois couches :
1 Appelez la fonction de vérification de la couche de base de données dans la méthode get du serveur Web kbmmw<.> 2. Implémentez la fonction de vérification dans la couche de base de données, obtenez les informations prédéfinies liées à WeChat, telles que l'identifiant et le jeton, à partir de la table, puis appelez l'interface WeChat spécifique
3. Implémentez l'interface WeChat spécifique pour la base de données couche à appeler.
Le plan est de le partager avec des amis une fois la mise en œuvre de l'interface WeChat terminée. Malheureusement, le temps presse ces derniers temps et les tâches sont nombreuses, donc cela prendra du temps. Permettez-moi d’abord de partager les idées de mise en œuvre.
La vérification de l'adresse URL connectée au serveur Web est la première étape dans la fourniture des services WeChat. Par conséquent, le contenu associé ci-dessus doit être compris avant de continuer.
C'est effectivement le cas :
Les utilisateurs WeChat qui suivent votre compte de service envoient des messages à votre compte de service, et la plateforme WeChat les transmettra à l'URL que vous avez vérifiée, qui est équivalente aux utilisateurs WeChat de votre service WeChat compte , envoyez un message à votre serveur Web. Le but du serveur Web que vous développez est de répondre à ces messages et d'interagir avec les abonnés de votre compte de service WeChat !