Home >WeChat Applet >WeChat Development >Delphi implements WeChat development

Delphi implements WeChat development

高洛峰
高洛峰Original
2017-02-23 13:46:222651browse

General idea:

1. The user sends a message to the service account, (this can be a menu item or a keyword, such as: registered member.)

2.kbmmw The web server receives the message, generates a graphic message to WeChat, and prepares its own URL in the graphic message. In the URL, the openid brought by the first step of the message can be written into the parameter table of the URL.

3. The user clicks on this graphic message

4. The web server receives the url of this graphic message and generates a web page for WeChat based on this url. The key here is to write the openid Go to the webpage

5. The user fills in the webpage and submits (openid is also submitted back when submitting)

6.Ok, now I get the content I want, what I need most openid. It was submitted by that user, and it was submitted back.

7. Implement business logic based on the content returned in 6.

openid: As a WeChat user, the unique value generated when you follow a service account. From the perspective of the service account, this is the follower of your service account. If you want to send messages to your WeChat users, you can only enter development through this openid.


:

First, here, you can apply for a test account for development. The process is very simple, just use your mobile phone number to apply, send a verification code to your mobile phone, and it’s activated!
Then, you also need a static IP and port 80. In theory, a dynamic domain name can also be used. Bind to your development account.
Next, you need to familiarize yourself with WeChat’s API and understand some basic concepts.
Now, you can develop with delphi!

First, you need to study the access information. Here, because the principles are all there, you must read it carefully. Then, use Delphi to implement a corresponding function, and then apply for a WeChat public platform interface test account.
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);

if tmpStr = signature then
Result := True
else
Result := False;
finally
FreeAndNil(strs);
end;
end;
When the return result of the function is true, it means the access is successful! For this function, refer to the example uploaded by csdn friends, thank you. In this example, a unit of the SHA1 function is provided, so you need to download it back.

After preparing this function, next, how to use this function?
Because the WeChat server sends a Get request to the connected web server, we need to call this CheckSignature in the PerformGet method of the kbmMW web server implemented by ourselves.

function TDJ_FrmPhoneHTTPService.PerformGet(ClientIdent: TkbmMWClientIdentity; const AURL: string;
const Args: array of Variant): Variant;
var
FuncName: string;
qv: TkbmMWHttpQueryValues ;//Process the parameters passed by the Get request.
begin

if Length(Args) < 1 then
kbmMWRaiseException(KBMMW_ERR_SERVICE_HTTP_URLMISSING, 'Missing URL.')
else
begin
FuncName := UpperCase(copy(Args[0], 2, Length(Args[0]) - 1));
if FuncName.Equals('WECHAT.HTML') then
begin
               // Transfer to WeChat interface
         qv := TkbmMWHttpQueryValues.Create;
       qv.AsString:= Args[2];//Get the parameters passed by the get request.
        try
                                                                 Access
                                                                               ValueByName['echostr']                                                                                                                           “ ';                                                                                                                                                                          CheckSignature
(qv.ValueByName['id'], qv. ], qv.ValueByName['nonce']) then
Result := qv.ValueByName['echostr'];
//If the verification is successful, return echostr to inform the WeChat server that the verification is successful.                                                                 ,                                                                                                                             SetResponseMimeType('text/HTML'); /End this response to Get. end;....Omit the following implementation

In the actual project, I implemented it like this, implementing the WeChat interface code In a unit wechatImpl, implement a DataModule to further encapsulate the wechatImpl method. When encapsulating, implement the operation of the database. Let’s take verification as an example and see how it is implemented in DataModule?

function tdmwx.CheckSignature(id, signature, timestamp, nonce: string): Boolean;
begin
result:=False;
if not qWXFWH.Active then
qWXFWH. Open;
if qWXFWH.Locate('fid', VarArrayOf([id]), []) then//Query the service number table to see if there is a corresponding id record
begin
if wechatImpl.CheckSignature( signature, timestamp, nonce, qWXFWH.FieldByName('FToken').AsString)//If it exists, take the token value defined in the table and call the verification function.
then
Result := true;
end;
end;
Among them, qWXFWH is a kbmMWuniDACQuery object, used to save a table of WeChat service accounts. The table structure is as follows:
CREATE TABLE WX_FWH (
FID INTEGER,//The id of a service account, reaching The purpose of managing multiple service accounts.
FTOKEN VarChar(32),//The token value of each service number
FAPPID VarChar(16),
FAPPSECRET varchar(16),
FACCESSTOKEN VARCHAR ( 512),
FEXPIRESIN INTEGER,
FGETDATE DATETIME);
When registering the server, you must first add registration information to this table, for example: id=1, token=kbmmwtoken1
corresponding registration content For:
url=www.test.cc/wechat.html?id=1
token=kbmmwtoken1
In this way, when the WeChat server sends a verification request, the id will be passed as a parameter. , the CheckSignature method of datamodule will obtain the token value defined in the data table based on the value of id, and then call the verification method of the WeChat interface.

To summarize the above content, in order to achieve WeChat access, I divided the implemented code into three layers:
1. Call the verification function of the database layer in the get method of kbmmw web server
2. Implement the verification function in the database layer, obtain the predefined WeChat related information, such as id and token, from the table, and then call the specific WeChat interface
3. Implement the specific WeChat interface for the database layer to call.

The plan is to share it with friends after the implementation of the WeChat interface is completed. Unfortunately, time is tight recently and there are many chores, so it will take some time. Let me first share the ideas for implementation.

Verification of the URL address connected to the web server is the first step in providing WeChat services. Therefore, the above related content must be understood before proceeding.
It’s actually like this:
WeChat users who follow your service account send messages to your service account, and the WeChat platform will forward them to the URL you verified, which is equivalent to the WeChat users of your WeChat service account , send a message to your Web server. The purpose of the Web server you develop is to respond to these messages and interact with followers of your WeChat service account!

For more Delphi implementation of WeChat development related articles, please pay attention to the PHP Chinese website!


Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn