ASP开发--微信平台利用API接口获取网页授权

我这里的例子按照cookies的方式。

webconfig.asp

这个文件是加载到所有页面的,可以理解为全局变量,主要定义了用户的wxid(openid),api地址等信息。

其他的,像payurl,mainwxid等变量在此例中没有用到,不必关心。

如果只是简单的判断的话,只要判断wxid是否为空就好。

如果复杂一点的话,可以将wxid信息发送到API接口,判断是否存在该用户。

检查用户不是本文重点,只判断wxid是否为空。

if wxid = "" then

Response.Redirect("getcode.asp")

end if

%>

getcode.asp页面代码量很少,主要是用来换取code的。

dim appid,url,REDIRECT_URI

'appid是你平台的appid

appid = You Appid.

'REDIRECT_URI是回调的页面

REDIRECT_URI= weburl & "/getinfo.asp"

'url是获取code的页面

url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=" & appid & "&redirect_uri=" & Server.URLEncode(REDIRECT_URI) & "&response_type=code&scope=snsapi_userinfo&state=" & state & "#wechat_redirect"

Response.Redirect(url)

%>

当用户来到getinfo.asp页面后,正常情况下,会get到一个code值。

直接用Request.QueryString得到。

然后我们将这个code值post到API接口来获得用户的信息。

从这里开始,所有都是重点!重点!重点!

在getinfo.asp中加载asp2json.asp文件,是用来处理json数据的类。因为咱们post出去和接收回来的数据都是json数据。

dim code,putjson,getjson,backdata

code = Request.QueryString("code")

set putjson = new aspjson

'这里判断code是否为空

if code = "" then

'除了停止程序,你也可以增加一些提示后再停止。

response.end

end if

set postjson = new aspjson

with postjson.data

.add "apitype", "userinfo"

.add "apiinfo", "userlogin"

.add "code",code

end with

'这里我要多说几句,既然api接口是咱自己写的,尽量把接口分类后再细化,那样便于管理和扩展。而且你的api编制也不至于杂乱无章。你想想,如果你在一个文件里,想到哪写到哪,回头再找。。。。。估计会头疼的。

backdata = posthttp(apiurl,postjson.jsonoutpu())

if len(backdata)

'没接收到数据,程序停止。

response.end

end if

getjson = new aspjson

getjson = loadjson(backdata)

response.cookies("wxid") = getjson.data("wxid")

response.cookies("nickname") = getjson.data("nickname")

response.cookies("headimgurl") = getjson.data("headimgurl")

。。。。。。。。。。。。。。。

'想写cookies的其他数据,比方说省市,性别等信息。

set getjson = nothing

set postjson = nothing

%>

至此,获得用户信息的页面写完了。

下面开始写api的内容。

dim getdata,getjson,postjson

getdata = request.form

if len(getdata)

response.end

end if

set getjson = new aspjson

getjson.loadjson(getdata)

'这里用select是为了写其他接口

select case getjson.data("apitype")

case "userinfo"

call userinfo()

end select

sub userinfo()

select case getjson.data("apiinfo")

case "userlogin"

call userlogin()

end select

end sub

sub userlogin()

dim code,userinfo,infojson

code = getjson.data("code")

userinfo = GetWXUserInfo(code,"info")'这个方法之前的文章提供过

if userinfo "error" then

set infojson = new aspjson

infojson.loadjson(userinfo)

with putjson.data

.add "wxid", infojson("openid")

.add "nickname", infojson("nickname")

.add "headimgurl", infojson("headimgurl")

.................................. '其他数据

end with

response.write putjson.jsonoutput()

end if

end sub

%>

好了,到这里程序完成。

手写程序,没有测试,难免会有什么错误。

ASP API 接口接收与返回 是一个轻型的、安全的、跨网际的、跨语言的、跨平台的、跨环境的、跨域的、支持复杂对象传输的、支持引用参数传递的、支持内容输出重定向的、支持分级错误处理的、支持会话的、面向服务的高性能远程过程调用协议。 该版本直接解压后就可以使用,其中 属于公共文件。不论是客户端还是服务器端都需要这些文件。 是客户端文件,如果你只需要使用客户端,那么只要有上面那些公共文件和这个文件就可以使用了,使用时,直接在你的程序中包含 phprpc_client.php 就可以,公共文件不需要单独包含。 这三个文件是服务器端需要的文件。 其中 dhparams 目录中包含的是加密传输时用来生成密钥的参数 dhparams.php 是用来读取 dhparams 目录中文件的类。 phprpc_server.php 是服务器端,如果你要使用 PHP 来发布 PHPRPC 服务,只需要包含这个文件就可以了。公共文件和 dhparams.php 都不需要单独包含。 PHP 4.3+、PHP 5、PHP 6 客户端要求开启 socket 扩展。 服务器端需要有 IIS、Apache、lighttpd 等可以运行 PHP 程序的 Web 服务器。 如果服务器端需要加密传输的能力,必须要保证 session 配置正确。 <?php include('php/phprpc_server.php'); //加载文件 function hello($name) { return'Hello ' . $name; } $server = new PHPRPC_Server(); //创建服务端 $server->add(array('hello', 'md5', 'sha1')); //数组形式一次注册多个函数 $server->add('trim'); //单一注册 $server->start(); //开启服务 ?> <?php include ("php/phprpc_client.php"); //加载文件 $client = new PHPRPC_Client('http://127.0.0.1/server.php'); //创建客户端 并连接服务端文件 echo$client->Hello("word"); //调用方法 返回 hello word ?> -------------------------------------------------- --------------------------------------------------- ------------------------------ 服务端其他说明: <?php include('php/phprpc_server.php'); //加载文件 function hello($name) { return'Hello ' . $name; } class Example1 { staticfunction foo() { return'foo'; } function bar() { return'bar'; } } $server = new PHPRPC_Server(); //创建服务端 $server->add('foo', 'Example1'); //静态方法直接调用 $server->add('bar', new Example1()); //非静态方法 需要实例化 //注册别名调用 $server->add('hello', NULL, 'hi'); //第三参数是函数的别名 客户端通过别名来调用函数 $server->add('foo', 'Example1', 'ex1_foo'); $server->add('bar', new Example1(), 'ex1_bar'); $server->setCharset('UTF-8'); //设置编码 $server->setDebugMode(true); //打印错误 $server->setEnableGZIP(true); //启动压缩输出虽然可以让传输的数据量减少,但是它会占用更多的内存和 CPU,因此它默认是关闭的。 $server->start(); //开启服务 ?> -------------------------------------------------- --------------------------------------------------- ---------------------------
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值