Maison >Applet WeChat >Développement WeChat >Delphi implémente le développement WeChat

Delphi implémente le développement WeChat

高洛峰
高洛峰original
2017-02-23 13:46:222652parcourir

Idée générale :

1. L'utilisateur envoie un message au compte de service (cela peut être un élément de menu ou un mot-clé, tel que : enregistrer un membre.)

2 .kbmmw Le serveur Web reçoit le message, génère un message graphique vers WeChat et prépare sa propre URL dans le message graphique. Dans l'URL, l'openid apporté par la première étape du message peut être écrit dans la table des paramètres de l'URL. .

3. L'utilisateur clique sur ce message graphique

4. Le serveur Web reçoit l'URL de ce message graphique et génère une page Web pour WeChat basée sur cette URL. écrivez l'openid Allez sur la page Web

5. L'utilisateur remplit cette page Web et soumet (l'openid est également soumis lors de la soumission)

6.Ok, maintenant j'obtiens le contenu que je veux, l'openid le plus nécessaire. Il a été soumis par cet utilisateur, et il a été renvoyé comme ceci.

7. Implémentez une logique métier basée sur le contenu renvoyé en 6.

openid : En tant qu'utilisateur de WeChat, la valeur unique générée lorsque vous suivez un compte de service. Du point de vue du compte de service, il s'agit du follower de votre compte de service. Si vous souhaitez envoyer des messages à vos utilisateurs WeChat, vous ne pouvez accéder au développement que via cet openid.


 :

Tout d'abord, ici, vous pouvez demander un compte test pour développement. Le processus est très simple, utilisez simplement votre numéro de téléphone mobile pour postuler, envoyez un code de vérification sur votre téléphone mobile, et c’est activé !
Ensuite, vous avez également besoin d'une IP statique et du port 80. En théorie, un nom de domaine dynamique peut également être utilisé. Liez-vous à votre compte de développement.
Ensuite, vous devez vous familiariser avec l’API de WeChat et comprendre quelques concepts de base.
Maintenant, vous pouvez développer avec Delphi !

Tout d'abord, vous devez étudier les informations d'accès. Ici, parce que les principes sont tous là, vous devez les lire attentivement. Ensuite, utilisez Delphi pour implémenter une fonction correspondante, puis demandez un compte de test d'interface de plateforme publique WeChat.
function CheckSignature(const signature, timestamp, nonce, token: string): boolean;
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);

si tmpStr = signature alors
Résultat := True
else
Result := False;
finally
FreeAndNil(strs);
end;
end;
Lorsque le résultat de retour de 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 QvalueByname ['Echostr'] & LT; '' THEN
// Si l'Echostr n'est pas vide, cela signifie que la requête commence
résultat : = ' ';
if
dmwx.CheckSignature(qv.ValueByName['id'], qv.ValueByName['signature'], qv.ValueByName ['timestamp' ], qv.ValueByName['nonce']) then
           Result := qv.ValueByName['echostr'];
//Si la vérification réussit, renvoyez echostr pour informer le serveur WeChat que la vérification est réussie. end;
SetResponseMimeType('text/HTML');
SetResponsecharset('utf-8');
enfin
FreeAndnil(qv);
end;
exit;/ /Fin de cette réponse à Get.
end;
....Omettre l'implémentation suivante

Dans le projet actuel, je l'ai implémenté comme ça, implémenter le code de l'interface WeChat Dans une unité wechatImpl, implémentez un DataModule pour encapsuler davantage la méthode wechatImpl. Lors de l'encapsulation, implémentez le fonctionnement de 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 := vrai;
fin;
end;
Parmi eux, qWXFWH est un objet kbmMWuniDACQuery, utilisé pour enregistrer une table de comptes de service WeChat. La structure de la table est la suivante :
CREATE TABLE WX_FWH (
FID INTEGER,//L'identifiant d'un. compte de service, atteignant Le but de gérer plusieurs comptes de service.
FTOKEN VarChar(32),//La 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 à ce tableau, telles que : id=1, token=kbmmwtoken1
Le contenu d'inscription correspondant Pour :
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 être passé en paramètre. , la méthode CheckSignature de datamodule obtiendra la valeur du jeton définie dans la table de données en fonction de la valeur de 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 !

Pour plus d'articles sur la mise en œuvre Delphi du développement WeChat, veuillez faire attention au site Web PHP chinois !


Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn