微信公众号:1-IDHTTP控件:GET/POST 请求获取access_token

(图来源于方蓓?)
首先要理解公众号的流程。通过图知道,我们要:
1、你要有个web服务器,用于和微信服务器通讯。你的web服务器必须让微信服务器能找到。
2、通信要求按照微信公众号开发要求的格式提供相关的数据。(get和post)
3、关于白名单问题:一定要确认清楚。特别是调试时上网的机器ip是随机的。否则会返回错误。
有了这样的思路,问题就简单了,无论选用何种开发工具。
关于access_token:
access_token是公众号的全局唯一接口调用凭据,公众号调用各接口时都需使用access_token。开发者需要进行妥善保存。access_token的存储至少要保留512个字符空间。
access_token的有效期目前为2个小时,需定时刷新,重复获取将导致上次获取的access_token失效。
公众平台的API调用所需的access_token的使用及生成方式说明:
1、建议公众号开发者使用中控服务器统一获取和刷新Access_token,其他业务逻辑服务器所使用的access_token均来自于该中控服务器,不应该各自去刷新,否则容易造成冲突,导致access_token覆盖而影响业务;
2、目前Access_token的有效期通过返回的expire_in来传达,目前是7200秒之内的值。中控服务器需要根据这个有效时间提前去刷新新access_token。在刷新过程中,中控服务器可对外继续输出的老access_token,
此时公众平台后台会保证在5分钟内,新老access_token都可用,这保证了第三方业务的平滑过渡;
3、Access_token的有效时间可能会在未来有调整,所以中控服务器不仅需要内部定时主动刷新,还需要提供被动刷新access_token的接口,这样便于业务服务器在API调用获知access_token已超时的情况下,可以触发access_token的刷新流程。
公众号可以使用AppID和AppSecret调用本接口来获取access_token。AppID和AppSecret可在“微信公众平台-开发-基本配置”页中获得(需要已经成为开发者,且帐号没有异常状态)。
调用接口时,请登录“微信公众平台-开发-基本配置”提前将服务器IP地址添加到IP白名单中,点击查看设置方法,否则将无法调用成功。
我们看用Tidhttp实现的get和post
procedure GetDemo;
var
IdHttp : TIdHTTP;
Url : string;//请求地址
ResponseStream : TStringStream; //返回信息
ResponseStr : string;
begin
//创建IDHTTP控件
IdHttp := TIdHTTP.Create(nil);
//TStringStream对象用于保存响应信息
ResponseStream := TStringStream.Create('');
try
//请求地址
Url := 'http://dict.youdao.com/';
try
IdHttp.Get(Url,ResponseStream);
except
on e : Exception do
begin
ShowMessage(e.Message);
end;
end;
//获取网页返回的信息
ResponseStr := ResponseStream.DataString;
//网页中的存在中文时,需要进行UTF8解码
ResponseStr := UTF8Decode(ResponseStr);
finally
IdHttp.Free;
ResponseStream.Free;
end;
end;
//如果Get需要添加请求参数,则直接在地址后添加,各参数间用&连接。如:http://dict.youdao.com?param1=1¶m2=2
procedure PostDemo;
var
IdHttp : TIdHTTP;
Url : string;//请求地址
ResponseStream : TStringStream; //返回信息
ResponseStr : string; RequestList : TStringList; //请求信息
RequestStream : TStringStream;
begin
//创建IDHTTP控件
IdHttp := TIdHTTP.Create(nil);
//TStringStream对象用于保存响应信息
ResponseStream := TStringStream.Create(''); RequestStream := TStringStream.Create('');
RequestList := TStringList.Create;
try
Url := 'http://f.youdao.com/?path=fanyi&vendor=fanyiinput';
try
//以列表的方式提交参数
RequestList.Add('text=love');
IdHttp.Post(Url,RequestList,ResponseStream); //以流的方式提交参数
RequestStream.WriteString('text=love');
IdHttp.Post(Url,RequestStream,ResponseStream);
except
on e : Exception do
begin
ShowMessage(e.Message);
end;
end;
//获取网页返回的信息
ResponseStr := ResponseStream.DataString;
//网页中的存在中文时,需要进行UTF8解码
ResponseStr := UTF8Decode(ResponseStr);
finally
IdHttp.Free;
RequestList.Free;
RequestStream.Free;
ResponseStream.Free;
end;
end;
==================================
Post请求在网页中多使用List形式提交参数。
不过在一些API中规定了POST的请求格式为 JSON 格式或 XML,这是需要注意发起请求前需要先设置 ContentType 属性,使用Stream方式提交已上面代码为例:
提交 JSON 格式:IdHttp.Request.ContentType :='application/json';
提交 XML 格式: IdHttp.Request.ContentType :='text/xml';
如未按要求格式提交,一般会返回 HTTP 1.1 / 415
//(https://www.cnblogs.com/limingliyu/archive/2016/07/03/5638966.html)
那么获取公众号access_token 的获取就简单了
procedure GetToken(http: TIdHTTP;AppID, AppSecret: String);
var
Url: string;
J: TJSONObject;
begin
Url := Format(TokenUrl, [AppID, AppSecret]);//AppID,AppSecret在你的公众平台上可以查到
J := TJSONObject.ParseJSONValue(GetMethod(http,Url, 1)) as TJSONObject;
try
if J.Count > 0 then
begin
Access_Token := J.GetValue('access_token').Value;//这就是后面做什么都要用到的access_token,每天获取的次数是每天2000次,所以不能每次用都重新获取
Expires_IN := J.GetValue('expires_in').Value.ToInteger;//access_token的过期时间,7200秒,所以要在过期前重新获取
end;
finally
J.Free;
end;
end;
==================================================
返回的结果:
{
"access_token": "7_ApAFIX15HI_hv8fpSou94-0HS38zWzvMO6hJBLXiWLc5VxvEloLmwKXlK5BP9dLNirRSV6F3c-sXWjsYzj77e0B5RVjt_hAZiSpRpOhfQBlPiO5-_cQp5QN9B-wzPEl2A0n8F8CwIudwGUD9ETPfABANCY",
"expires_in": 7200
}
function GetMethod(HTTP: TIdHTTP; Url: String; Max: Integer): String;
var
RespData: TStringStream;
begin
RespData := TStringStream.Create('', TEncoding.UTF8);
try
try
HTTP.Get(Url, RespData);
HTTP.Request.Referer := Url;
Result := RespData.DataString;
except
Dec(Max);
if Max = then
begin
Result := '';
Exit;
end;
Result := GetMethod(http,Url, Max);
end;
finally
FreeAndNil(RespData);
end;
end;
OK,Goodluck!
(程序参考网上相关博客,在此感谢)
微信公众号:1-IDHTTP控件:GET/POST 请求获取access_token的更多相关文章
- 微信公众号平台接口开发:基础支持,获取access_token
新建Asp.net MVC 4.0项目 WeChatSubscript是项目UI层 WeChatTools是封装操作访问公众号接口的一些方法类库 获取AccssToken 我们要的得到AccessTo ...
- 项目中微信公众号调取支付控件demo
微信支付官方文档:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_7&index=6 前端代码demo (JSP页面): ...
- 微信公众号平台接口开发:基础支持,获取微信服务器IP地址
官方说明 目前看不出来这个接口有哪些具体运用,但是既然有这个接口,那我们就试试能不能用 访问接口 修改WeCharBase.cs,新增以下2个方法 public static string Serve ...
- 【原创】微信公众号与HTML 5混合模式揭秘3——JSSDK获取地理位置
微信公众号与HTML 5混合模式揭秘1——如何部署JSSDK 微信公众号与HTML 5混合模式揭秘2——分享手机相册中照片 JSSDK为开发者提供了两个位置API服务:获取地理位置和使用微信内置地图查 ...
- 【微信公众号开发】【8】网页授权获取用户基本信息(OAuth 2.0)
前言: 1,在微信公众号请求用户网页授权之前,开发者需要先到公众平台官网中的“开发 - 接口权限 - 网页服务 - 网页帐号 - 网页授权获取用户基本信息”的配置选项中,修改授权回调域名. 请注意,这 ...
- PHP开发微信公众号(一)二维码的获取
要开发微信公众号,首先进行需要注册一个,然后认证.这就不用多说了. 当然如果没有,也可以去申请一个测试号来使用,地址:https://mp.weixin.qq.com/debug/cgi-bin/sa ...
- thinkphp开发微信公众号时,验证基本配置提示请求url超时
原因在index.php入口文件中必须有define('APP_NAME', 'Weixin'); 服务器url:http://bxu2713700584.my3w.com/Weixin/Index/ ...
- 【基础】java环境搭建及配置--->【关注微信公众号:三叔测试笔记,及时获取干货】
一.下载安装 Java官网下载地址: http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.ht ...
- 微信公众号开发C#系列-4、获取接口调用凭证
概述 获取接口调用凭证实质就是获取access_token.在微信接口开发中,许多服务的使用都离不开Access Token,Access Token相当于打开这些服务的钥匙,正常情况下会在7200秒 ...
随机推荐
- android binder 基础实例及解析(一)【转】
本文转载自:http://blog.csdn.net/newchenxf/article/details/49359283#insertcode 原文网址(转载请注明出处): http://blog. ...
- [BZOJ 3132] 上帝造题的七分钟
[题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=3132 [算法] 二维树状数组 [代码] #include<bits/stdc+ ...
- Core Data的那点事儿~
一.介绍下Core Data CoreData在早些年iOS开发中使用不多,因为其本身性能略低,以及不使用SQL语句而失去的灵活性,再加上FMDB之类封装SQLite的三方框架很好用,所以一直不受待见 ...
- MyEclipse个性设置
MyEclipse个性设置 (1)Myeclipse 打开 jsp 的默认编辑器不好,会同时打开预览.所以做如下更改 Windows–>Perferences–>General–>E ...
- Linux特殊符号及基础正则表达式
第1章 特殊符号 1.1 引号系列 1.1.1 单引号 所见即所得 单引号里面的内容会原封不动的输出 [root@oldboyedu50-lnb ~]# echo 'oldboy $LANG $PS ...
- js 二叉搜索树
二叉搜索树:顾名思义,树上每个节点最多只有二根分叉:而且左分叉节点的值 < 右分叉节点的值 . 特点:插入节点.找最大/最小节点.节点值排序 非常方便 1 2 3 4 5 6 7 8 9 10 ...
- centos7离线安装rabbitmq
准备工作 一台centos7的机器 erlang-21.3.8.2 RabbitMQ 3.7.15 socat-1.7.3.2-2.el7.x86_64.rpm 开始安装 登录centos ,把上面的 ...
- git下
----------- 1. 分支管理策略 1)master分支 非常稳定的,只用来发布新版本,平时不在上面干活 2)dev分支 不稳定的,主要在上面干活,每个人都有自己的分支,时不时的往dev分支上 ...
- 涨知识---IV
1.如何减少换页错误? A.进程倾向于占用CPU. B.访问局部性(locality of reference)满足进程要求. C.进程倾向于占用I/O. D.使用基于最短剩余时间(shortest ...
- Laravel5.1学习笔记17 数据库3 数据迁移
介绍 建立迁移文件 迁移文件结构 执行迁移 回滚迁移 填写迁移文件 创建表 重命名/ 删除表 创建字段 修改字段 删除字段 建立索引 删除索引 外键约束 #介绍 Migrations are lik ...