Home >WeChat Applet >WeChat Development >delphi realizes WeChat development and access to WeChat public account platform

delphi realizes WeChat development and access to WeChat public account platform

高洛峰
高洛峰Original
2017-03-03 09:42:224042browse

First, you need to study the access information, at http://mp.weixin.qq.com/wiki/home/index.html, because the principles are all there, so you must read it carefully. Then, use Delphi to implement a corresponding function, and then apply for a WeChat public platform interface test account. http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login

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
                                                                                                                                                                                                                                                     If qv.ValueByName['echostr'] <> '' then//If echostr is not empty, it indicates a verification request dmwx.CheckSignature(qv.ValueByName['id'], qv.ValueByName['signature'],
          qv.ValueByName['timestamp'], qv.ValueByName['nonce']) then
                         qv.ValueByName['echostr']; // If the verification is successful, return echostr to inform the WeChat server that the verification is successful. ');
finally
FreeAndnil(qv);
end;
exit;//End this response to Get.
end;
....Omit the following Implementation

In the actual project, I implemented it like this. I implemented the WeChat interface code in a unit wechatImpl, and then implemented a DataModule to further encapsulate the wechatImpl method. When encapsulating, to implement Operations on 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)//exists, then 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 numbers. The table structure is as follows:
CREATE TABLE WX_FWH (
FID INTEGER,//A The id of the service account is used to manage multiple service accounts.
FTOKEN VarChar(32),//The token value of each service account
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, such as: id=1,token=kbmmwtoken1
The corresponding registration content is:
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 used as a parameter Passed over together, 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 articles related to Delphi's realization of WeChat development and access to the WeChat public account platform, 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