먼저 http://mp.weixin.qq.com/wiki/home/index.html에서 액세스 정보를 공부해야 합니다. 원칙은 모두 있으므로 반드시 확인하세요. 그런 다음 Delphi를 사용하여 해당 기능을 구현한 후 WeChat 공개 플랫폼 인터페이스 테스트 계정을 신청하세요. http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login
함수 CheckSignature(const 서명, 타임스탬프, nonce, 토큰: 문자열 ): 부울;
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 = 서명 then
결과 := True
else
결과 := False;
최종적으로
FreeAndNil(strs);
end;
end;
함수의 반환 결과가 true이면 접근에 성공한 것입니다! 이 기능에 대해서는 csdn friends가 업로드한 예제를 참조하세요. 감사합니다. 이 예시에서는 SHA1 기능의 단위가 제공되므로 다시 다운로드해야 합니다.
이 기능을 준비했다면 다음은 이 기능을 어떻게 사용해야 할까요?
WeChat 서버는 연결된 웹 서버로 Get 요청을 보내기 때문에 우리가 직접 구현한 kbmMW 웹 서버의 PerformGet 메서드에서 이 CheckSignature를 호출해야 합니다.
함수 TDJ_FrmPhoneHTTPService.PerformGet(ClientIdent: TkbmMWClientIdentity; const AURL: 문자열;
const Args: Variant 배열): Variant;
var
FuncName: 문자열;
qv: TkbmMWHttpQueryValues ;//Get 요청에 의해 전달된 매개변수를 처리합니다.
begin
if Length(Args) < 1 then
kbmMWRaiseException(KBMMW_ERR_SERVICE_HTTP_URLMISSING, 'Missing URL.')
else
시작
FuncName := UpperCase(copy(Args[0], 2, Length(Args[0]) - 1));
if FuncName.Equals('WECHAT.HTML') then
시작
// WeChat 인터페이스로 전송
qv := TkbmMWHttpQueryValues.Create;
qv.AsString := Args[2];//get 요청에 의해 전달된 매개변수를 가져옵니다.
try
// 확인 액세스
if qv.ValueByName['echostr'] <> '' then//echostr이 비어 있지 않으면 확인 요청을 나타냅니다.
시작
결과 := '';
if dmwx.CheckSignature(qv.ValueByName['id'], qv.ValueByName['signature'],
qv.ValueByName['timestamp'], qv.ValueByName['nonce']) then
결과 := qv.ValueByName['echostr'];//확인에 성공하면 echostr을 반환하여 WeChat 서버에 확인에 성공했음을 알립니다. ');
finally
FreeAndnil(qv);
end;
exit;//Get에 대한 응답을 종료합니다.
end;
...다음 구현을 생략합니다
실제 프로젝트에서는 이렇게 구현했습니다. wechatImpl 단위에서 WeChat 인터페이스 코드를 구현한 다음, 캡슐화할 때 데이터베이스에 대한 작업을 구현하기 위해 DataModule을 구현하여 wechatImpl 메서드를 추가로 캡슐화합니다.
검증을 예로 들어 DataModule에서 어떻게 구현되는지 살펴볼까요?
함수 tdmwx.CheckSignature(id, 서명, 타임스탬프, nonce: 문자열): Boolean;
begin
결과:=False;
qWXFWH.Active가 아닌 경우
qWXFWH. 열기;
if qWXFWH.Locate('fid', VarArrayOf([id]), []) then//서비스 번호 테이블을 쿼리하여 해당 ID 레코드가 있는지 확인
시작
if wechatImpl .CheckSignature( 서명, 타임스탬프, nonce, qWXFWH.FieldByName('FToken').AsString)//존재하는 경우 테이블에 정의된 토큰 값을 가져와서 확인 함수를 호출합니다.
그런 다음
결과:= true;
end;
end;
이 중 qWXFWH는 WeChat 서비스 번호 테이블을 저장하는 데 사용되는 kbmMWuniDACQuery 개체입니다. 테이블 구조는 다음과 같습니다.
CREATE TABLE WX_FWH(
FID INTEGER,//A 서비스 계정의 ID는 여러 서비스 계정을 관리하는 데 사용됩니다.
FTOKEN VarChar(32), //각 서비스 계정의 토큰 값
FAPPID VarChar(16),
FAPPSECRET varchar(16),
FACCESSTOKEN VARCHAR (512),
FEXPIRESIN INTEGER,
FGETDATE DATETIME);
서버를 등록할 때 먼저 이 테이블에 다음과 같은 등록 정보를 추가해야 합니다. =1,토큰=kbmmwtoken1
해당 등록 내용은
url=www.test.cc/wechat.html?id=1
token=kbmmwtoken1
이렇게 하면 WeChat 서버가 확인 요청을 보낼 때 ID는 다음과 같습니다. 함께 전달된 매개변수로 사용되는 datamodule의 CheckSignature 메소드는 id 값을 기반으로 데이터 테이블에 정의된 토큰 값을 얻은 후 WeChat 인터페이스의 확인 메소드를 호출합니다.
위 내용을 요약하면 WeChat 액세스를 달성하기 위해 구현된 코드를 세 가지 레이어로 나누었습니다.
1 kbmmw 웹 서버의 get 메서드에서 데이터베이스 레이어의 확인 기능을 호출합니다
2. 데이터베이스 계층에서 검증 기능을 구현하고, 사전 정의된 WeChat 관련 정보(예: ID, 토큰)를 테이블에서 가져온 후 특정 WeChat 인터페이스를 호출합니다.
3. 데이터베이스에 대한 특정 WeChat 인터페이스를 구현합니다. 호출할 레이어입니다.
위챗 인터페이스 구현이 완료된 후 친구들과 공유할 계획입니다. 아쉽게도 최근 시간이 촉박하고 할 일이 많아 시간이 좀 걸릴 것 같습니다. 먼저 구현 아이디어를 공유하겠습니다.
웹 서버에 연결된 URL 주소 확인은 위챗 서비스 제공의 첫 번째 단계이므로, 진행하기 전에 위의 관련 내용을 이해해야 합니다.
실제로는 다음과 같습니다.
귀하의 서비스 계정을 팔로우하는 WeChat 사용자는 귀하의 서비스 계정으로 메시지를 보내고, WeChat 플랫폼은 귀하가 확인한 URL로 해당 메시지를 전달합니다. 이는 귀하의 WeChat 서비스의 WeChat 사용자와 동일합니다. 계정을 사용하여 웹 서버에 메시지를 보냅니다. 귀하가 개발하는 웹 서버의 목적은 이러한 메시지에 응답하고 WeChat 서비스 계정의 팔로어와 상호 작용하는 것입니다!
Delphi의 WeChat 개발 실현 및 WeChat 공개 계정 플랫폼 액세스와 관련된 더 많은 기사를 보려면 PHP 중국어 웹사이트를 주목하세요!