因ERP系统需要与微信公众号做数据接口,现准备做一个中间服务器。

开发环境:XE10

使用控件:IdHTTPServer

因刚开发阶段,在路由路上直接做了测试机的80端口转发,申请微信公众测试号后,却一直配置失败。跟踪发现是服务器无法收到微信发来的GET请求。代码如下:

Delphi/Pascal code?

unit Unit1;interface

uses

Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,

Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, IdBaseComponent,

IdComponent, IdCustomTCPServer, IdCustomHTTPServer, IdHTTPServer, IdContext,

IdHashSHA, IdGlobal;

type

TForm1 = class(TForm)

IdHTTPServer1: TIdHTTPServer;

Button1: TButton;

Memo1: TMemo;

procedure Button1Click(Sender: TObject);

procedure IdHTTPServer1CommandGet(AContext: TIdContext;

ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);

private

{ Private declarations }

public

{ Public declarations }

function SHA1(Input: String): String;

function CheckSignature(ARequestInfo: TIdHTTPRequestInfo): boolean;

end;

var

Form1: TForm1;

Const

Token = 'weixin';

implementation

{$R *.dfm}

function TForm1.SHA1(Input: String): String;

begin

with TIdHashSHA1.Create do

try

Result := LowerCase(HashBytesAsHex(TidBytes(Bytesof(Input))));

finally

Free;

end;

end;

function TForm1.CheckSignature(ARequestInfo: TIdHTTPRequestInfo): boolean;

var

signature, timestamp, nonce, echostr: String;

tmpstr: TStringList;

temp: String;

begin

tmpstr := TStringList.Create;

try

signature := ARequestInfo.Params.Values['signature'];

timestamp := ARequestInfo.Params.Values['timestamp'];

nonce := ARequestInfo.Params.Values['nonce'];

echostr := ARequestInfo.Params.Values['echostr'];

tmpstr.Add(Token);

tmpstr.Add(timestamp);

tmpstr.Add(nonce);

tmpstr.Sort;

temp := StringReplace(tmpstr.text, #13#10, '', [rfReplaceAll]);

Result := SHA1(temp) = signature;

finally

tmpstr.Free;

end;

end;

procedure TForm1.Button1Click(Sender: TObject);

begin

IdHTTPServer1.Active := True;

end;

procedure TForm1.IdHTTPServer1CommandGet(AContext: TIdContext;

ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);

begin

Memo1.Lines.Add('123');

if CheckSignature(ARequestInfo) then

if ARequestInfo.Params.Values['echostr'] <> '' then

begin

Memo1.Lines.Add(ARequestInfo.Params.Values['echostr']);

AResponseInfo.ContentType := 'text/html; charset=UTF-8';

AResponseInfo.ContentText := ARequestInfo.Params.Values['echostr'];

end;

end;

end.

微信接口开发申请服务器,开发微信服务器接口的实例教程相关推荐

  1. Web 开发中应用 HTML5 技术的10个实例教程

    HTML5 作为下一代网站开发技术,无论你是一个 Web 开发人员或者想探索新的平台的游戏开发者,都值得去研究.借助尖端功能,技术和 API,HTML5 允许你创建响应性.创新性.互动性以及令人惊叹的 ...

  2. 微信公众号申请到开发环境搭建

    先来一个写的比较好的参考:http://blog.csdn.net/walkingmanc/article/details/18881793 1.   申请微信公众号 我们要进行微信公众平台的开发,第 ...

  3. 浅析微信支付:申请退款、退款回调接口、查询退款

    本文是[浅析微信支付]系列文章的第八篇,主要讲解商户如何处理微信申请退款.退款回调.查询退款接口,其中有一些坑的地方,会着重强调. 浅析微信支付系列已经更新七篇了哟-,没有看过的朋友们可以看一下哦. ...

  4. 企业微信的审批申请状态变化回调通知api接口bug

    找了1天的问题,leader不一会就找到了问题所在. 企业微信官方给的demo有问题. WXBizJsonMsgCrypt构造参数 改成下边就可openapi回调通过- aesKey = java.u ...

  5. 使用c# .net core开发国标gb28181 sip +流媒体服务完成视频监控实例教程 亲身完美体验过程...

    目前使用C# .net core 来实现国标gb28181标准的摄像头播放.ptz云台控制.视频回放等视频监控功能,项目可运行于linux/docker/.net core环境,也是当前非常罕有的能做 ...

  6. oracle重建服务器,Oracle重建控制文件的实例教程

    前言 控制文件(control file)是一个相当小的文件(最多能增长到64M左右),其中包含Oracle需要的其他文件的一个目录.参数文件告知实例控制文件的位置,控制文件则告知示例数据库和在线重做 ...

  7. java微信支付v3系列——7.微信支付之申请退款

    目录 java微信支付v3系列--1.微信支付准备工作 java微信支付v3系列--2.微信支付基本配置 java微信支付v3系列--3.订单创建准备操作 java微信支付v3系列--4.创建订单的封 ...

  8. 微信订阅号申请与使用

    微信订阅号申请与使用 微信公众号在现在的网络推广中应用比较广泛, 掌握微信公众的使用就可以多一种推广途径. 通常个人可以申请订阅号,公司和团体可以申请服务号. 订阅号不可以添加链接.服务号可以添加链接 ...

  9. 微信小程序基础之在微信上显示和体验小程序?

    随着小程序正式上线,用户现在可以通过二维码.搜索等方式体验到开发者们开发的小程序了. 用户只要将微信更新至最新版本,体验过小程序后,便可在发现页面看到小程序TAB,但微信并不会通过这个地方向用户推荐小 ...

  10. db服务器作用,数据库服务器

    数据库服务器(Database Server) [编辑] 什么是数据库服务器 数据库服务器是指运行数据库系统的专用服务器,其功能就是为数据库系统的高性能运行提供硬件支持和保障. [编辑] 数据库服务器 ...

最新文章

  1. 西瓜书公式推导讲解来了!
  2. js实现图片轮播(终结版)
  3. php编译工具 知乎,关于知乎回答问题编辑框用Ctrl+V 粘贴图片是如何实现的详解...
  4. HTTP 调试工具httpdebug 使用示例
  5. Linux QoS实现框架:函数调用流程图
  6. 工作169:删除操作
  7. 围观神龙架构首次开箱,现场直播暴力拆机
  8. Maven : [ERROR] Project xxx is duplicated in the reactor @
  9. 蚂蚁集团,打响2022反内卷第一枪?
  10. 《数学建模算法与应用》方法概述
  11. 抖音快手无水印去水印方法19年11月最新
  12. java 换行分割_java – 如何通过换行分割字符串?
  13. 三年级计算机帮助我们学本领,三年级作文学本领40
  14. W ndows路由设置,windows下的双线双IP智能路由配置方法
  15. 【Unity3D实战】摇摆直升机开发实战(一)
  16. 超强干货:企业数据防泄密的26种实用方法
  17. 【科普】第二章 SIS 系统简介
  18. 非谓语动词 + 情态动词学习笔记
  19. 道达天际首次亮相军博会,“天网融合”引爆全场
  20. WIN7计算机管理里没有便携设备,如何显示及删除Win7设备管理器中隐藏的已用过的硬件设备信息(图)...

热门文章

  1. 如何用递归思想 求n的阶乘 C语言
  2. 排序算法,最全的10大排序算法详解(Sort Algorithm)
  3. 软件测试 | 测试开发 | 年薪超过40W,一位测试媛宝妈的 BAT 大厂逆袭之旅
  4. ORACLE基本使用
  5. 基于javaweb的业务代办帮跑腿管理系统(java+ssm+jsp+bootstrap+jquery+mysql)
  6. 如何刻录服务器安装系统光盘启动,刻盘之刻录系统安装光盘和启动光盘的注意事项小结...
  7. 007--python--英制单位英寸和公制单位厘米的互换
  8. 于丹《庄子》心得讲稿-《本性与物性》
  9. 后端程序员必备:mysql数据库相关流程图/原理图芬芬细雨
  10. Win11如何更改默认下载路径?Win11更改默认下载路径的方法