<!--
-->
管理提醒: <!--
-->
本帖被 gaolei2016 执行取消精华操作(2009-12-18) <!--
-->
<!--
-->
做TOP开发的人肯定会碰到需要SessionKey才能访问数据的情况,手工去取太麻烦了,回调又需要部署到服务器上,杯具啊!为了解决这些麻烦,我特意写了一个通过程序获取SessionKey的方法,代码如下:
说明:本程序只是方便ISV调试使用,集成二次登录是无法通过审核的,用户不会在你的网站里面输入淘宝的用户名和密码的,就好比你不会在一个山寨网站输入你的银行卡号和密码一样。
package com.carver.tool;
import java.net.URLEncoder;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import com.gargoylesoftware.htmlunit.BrowserVersion;
import com.gargoylesoftware.htmlunit.FailingHttpStatusCodeException;
import com.gargoylesoftware.htmlunit.Page;
import com.gargoylesoftware.htmlunit.TextPage;
import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.html.HtmlButton;
import com.gargoylesoftware.htmlunit.html.HtmlCheckBoxInput;
import com.gargoylesoftware.htmlunit.html.HtmlElement;
import com.gargoylesoftware.htmlunit.html.HtmlForm;
import com.gargoylesoftware.htmlunit.html.HtmlImageInput;
import com.gargoylesoftware.htmlunit.html.HtmlPage;
import com.gargoylesoftware.htmlunit.html.HtmlPasswordInput;
import com.gargoylesoftware.htmlunit.html.HtmlTextInput;
/**
* 登录淘宝网获取授权。
*
* @author carver.gu
* @since 1.0, Nov 11, 2009
*/
public class LoginUtil {
private static final String ONLINE_CONTAINER = "http://container.open.taobao.com/container?appkey=";
private static final Pattern P_SESSION = Pattern.compile("top\\_session=(\\w+?)&");
static {
Logger.getLogger("com.gargoylesoftware.htmlunit").setLevel(Level.SEVERE);
Logger.getLogger("org.apache.commons.httpclient.HttpMethodBase").setLevel(Level.SEVERE);
}
public static void main(String[] args) throws Exception {
String session = getOnlineSession("app_key", "username", "password");
System.out.println("session_key: " + session);
}
public static String getOnlineSession(String appkey, String uid, String pwd) throws Exception {
String url = "http://member1.taobao.com/member/mini_login.htm?login_type=3&redirect_url=";
return getSession(url, ONLINE_CONTAINER, appkey, uid, pwd);
}
private static String getSession(String loginUrl, String topUrl, String appkey, String uid,
String pwd) throws Exception {
WebClient webClient = new WebClient(BrowserVersion.FIREFOX_3);
String fullUrl = loginUrl + URLEncoder.encode(topUrl + appkey, "utf-8");
HtmlPage loginPage = webClient.getPage(fullUrl);
HtmlForm loginForm = loginPage.getForms().get(0);
HtmlTextInput uidInput = loginForm.getInputByName("TPL_username");
uidInput.setValueAttribute(uid);
HtmlPasswordInput pwdInput = loginForm.getInputByName("TPL_password");
pwdInput.setValueAttribute(pwd);
HtmlButton loginButton = loginForm.getButtonByName("");
HtmlPage loginRsp = null;
try {
Page rsp = loginButton.click();
if (rsp instanceof HtmlPage) {
loginRsp = (HtmlPage) rsp;
} else if (rsp instanceof TextPage) {
TextPage textRsp = (TextPage) rsp;
return extractSession(textRsp.getContent());
} else {
return null;
}
} catch (FailingHttpStatusCodeException e) {
if (e.getStatusCode() == 404) {
return extractSession(e.getMessage());
}
} catch (Exception e) {
}
HtmlCheckBoxInput agreeCheck = (HtmlCheckBoxInput) loginRsp.getElementById("agreement");
if (agreeCheck == null) {
return extractSession(loginRsp.getWebResponse().getRequestSettings().getUrl().toString());
} else {
agreeCheck.click();
}
HtmlForm agreeForm = loginRsp.getForms().get(1);
List<HtmlElement> inputElements = agreeForm.getHtmlElementsByTagName("input");
HtmlImageInput agreeButton = null;
for (HtmlElement inputElement : inputElements) {
if (inputElement instanceof HtmlImageInput) {
agreeButton = (HtmlImageInput) inputElement;
break;
}
}
Page agreeRsp = null;
try {
agreeRsp = agreeButton.click();
} catch (FailingHttpStatusCodeException e) {
if (e.getStatusCode() == 404) {
return extractSession(e.getMessage());
}
} catch (Exception e) {
}
return extractSession(agreeRsp.getWebResponse().getRequestSettings().getUrl().toString());
}
private static String extractSession(String response) {
Matcher matcher = P_SESSION.matcher(response);
if (matcher.find()) {
return matcher.group(1);
} else {
return null;
}
}
}
经测试,上面的程序可以获取任何类型的应用(Web,客户端)的SessionKey,ISV们有福了。
上面的程序依赖于HtmlUnit这个工具的所有Jar包,需要的请到
HtmlUnit的官方网站下载。
分享到:
相关推荐
一个WinForm项目,项目的目的是通过淘宝API获取AppKey和secretKey以后,获取Sessionkey,里面包含源代码。
利用淘宝API来获取淘宝订单详细信息,帮助淘宝卖家管理订单 ,可以自动获得短期的SessionKey
淘宝API获取SessionKey获取订单delphi源码,这次是全部源码,可以直接应用,相互交流学习,严禁用于商业用途,如有引用,请联系作者:jtrwl@126.com
java解析的源码和小程序的源码,自己从项目中剥离出来的,肯定能用,有疑问私信,微信小程序获取各类信息(openid、session_key以及用户基本信息、解密手机号)
文档中内容包括: 1.京东测试地址 2.注册成为开发者地址 3.开发者中心地址 4.订单服务(接口地址) 5.商家后台地址 6.京东API接入流程文档 7.获取京东的code 8.获取access_token
PHP微信小程序之获取并解密用户数据获取openId和unionId。wxBizDataCrypt.php 和 pkcs7Encoder.php 和 errorCode.php封装到了一个文件中!生成sessionKey 的接口方法(https://api.weixin.qq.com/sns/jscode2session...
最近在做一款微信小程序,需要获取用户手机号,具体步骤如下:流程图:1、首先,客户端调用wx.login,回调数据了包含js_code,用于获取openid(用户唯一标识)和sessionkey(会话密钥)。2、拿到js_code后,将其发送...
java后台获取小程序用户信息和生成自定义token,并使用filter过滤header的token源码.
前言: 这次主要是介绍些业务逻辑,技术点倒是没有多少。不过在开发中,优秀的编程思路同样是非常值得学习的。...小程序获取token.png 这里介绍的主要是后端开发的流程,前端的不是本文介绍的重点 二:如何将cod
4、小程序端js代码: wx.login({ success: resp => { // 发送 res.code 到后台换取 openId, sessionKey, unionId console.log(resp); var that = this; // 获取用户信息 wx.getSetting({ success: res => { ...
先简单介绍一下wx.request API,因为获取openId、sessionKey也需要用这个API。 wx.request就是ajax,与后台交互请求数据,基础参数和用法与jQuery的$.ajax方法类似。下面是官方文档对wx.request基础参数的说明:...
最近在做一款微信小程序,需要获取用户手机号,具体步骤如下: 流程图: 1、首先,客户端调用wx.login,回调数据了包含jscode,用于获取openid(用户唯一标识)和sessionkey(会话密钥)。 2、拿到jscode后,将其...
这些URL可以通过链接分析、站点地图、搜索引擎等方式获取。 请求网页: 爬虫使用HTTP或其他协议向目标URL发起请求,获取网页的HTML内容。这通常通过HTTP请求库实现,如Python中的Requests库。 解析内容: 爬虫对...
根据TOP的SDK编写的一个小应用程序,演示了如何获取sessionKey,然后调用TOP中的交易API,获取指定商家的交易数据,希望对于刚刚接触TOP的亲们有所帮助,因为准备开发的是一个C/S应用,所以没有考虑加密问题。
1、接入申请:在接入单位应先向税务局申请,经过审批备案后,将生成的唯一的接入方编号(appCode)和通过使用OpenSSL生成的一对私钥和公钥。其中,私钥由税务局保留,接入方编号(appCode)和公钥分配给申请接入单位,接...
京东api 商家cs授权方式 获取sessionKey
Wx_SessionKey_crypt(1).zip
最近做微信小程序,发现还没人做微信小程序签名解密的ThinkPHP拓展,就自己边做边开发了一个把压缩包解压到extend目录下,在控制器就能直接调用<?php /** * Created by PhpStorm. * User: yang jianmin ...
主要介绍了微信小程序获取session_key,openid,unionid的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
// 发送 res.code 到后台换取 openId, sessionKey, unionId } }) // 获取用户信息 wx.getSetting({ success: res => { if (res.authSetting['scope.userInfo']) { // 已经授权,可以直接调用 getUserInfo ...