导航:首页 > 编程语言 > java微信oauth

java微信oauth

发布时间:2022-07-16 01:06:57

A. OAuth2.0网页授权微信怎么用java获取openid

第一步:用户同意授权,获取code 引导用户进入授权的URL 修改一些参数

在确保微信公众账号拥有授权作用域(scope参数)的权限的前提下(服务号获得高级接口后,默认带有scope参数中的snsapi_base和snsapi_userinfo),引导关注者打开如下页面:

B. oauth2.0网页授权微信怎么用java获取code

@RequestMapping(value="oauth2/{type}/{appId}/{scope}", method=RequestMethod.GET)
public ModelAndView index(@PathVariable String type,@PathVariable String appId,@PathVariable String scope,String openId){
ModelAndView view=new ModelAndView();
if(StringUtils.isEmpty(appId)||mapWxAppInfo.get(appId)==null){
view.setViewName("fail");
return view;
}
//scope=snsapi_base 获取用户openId,无需授权
//scope=snsapi_userinfo 获取用户基本信息,需授权
String oauthUrl="https://open.weixin.qq.com/connect/oauth2/authorize?appid=%s&redirect_uri=%s&response_type=code&scope=%s&state=%s#wechat_redirect";
//处理授权回调地址
String callback="http://wx.lrlz.com/wx/callback/"+appId;
if(!StringUtils.isEmpty(openId)){
callback += "/"+openId;
}
oauthUrl=String.format(oauthUrl, appId,callback,scope,type);
log.info("微信授权认证地址="+oauthUrl);
view.setViewName("redirect:" + oauthUrl);
return view;
}

/**
* 处理网页授权回调
* */
@RequestMapping(value="callback/{appId}")
public ModelAndView callback(@PathVariable String appId,String code,String state,String redirectUri,HttpServletRequest req,HttpServletResponse response){
return getCallback(appId,code,state,null);
}

这样就行了

C. 如何在订阅号里实现oauth微信授权登录

通过 微信公众平台---->权限接口 可以得知 微信的订阅号是没有授权登录接口的,只有服务号才有该权限。这点微信公众平台在多处反复强调
最终的事实是:微信订阅号是可以实现授权登录的!

二:具体实现步骤:
1. 首先在 微信公众平台(https://mp.weixin.qq.com/) 【开发】----> 【基本配置】----->【服务器配置】完成基本的配置信息
URL: 这里的地址我写的是我们HTML5项目的某个Controller或Servlet的地址,例如 http://www.example.com/weixin/checkSignature.do
注意这个CheckSignatureController中是要写代码的,代码的业务逻辑是要验证签名并返回echostr字段;还需要注意www.example.com 这个地址必须是外网地址(内网不行的), 因为当你配置完所有的基本信息时,当提交的时候,微信公众平台会回答你刚才填的URL地址即http://www.example.com/weixin/checkSignature.do, 如果你填内网的地址,那么这个URL调不到,如果签名验证不过去,这个基本配置就配置不成功。当你写好这个CheckSignatureController后,还要将代码放到测试环境中去,以便微信公众平台可以回调你这个Controller

[java] view plain
@Controller
@RequestMapping(value="/weixin")
public class CheckSignatureController extends BaseController {

private static transient final Logger log = LoggerFactory.getLogger(CheckSignatureController.class);
public static String WEIXIN_TOKEN = "Token";

@RequestMapping(value ="checkSignature.do", proces = "application/json; charset=utf-8")
@ResponseBody
public String checkSignature(HttpServletRequest request) {
String echostr = request.getParameter("echostr"); // 随机字符串

if (isSignature(request)) {
return echostr;
}

return null;
}

// 检查签名
public boolean isSignature(HttpServletRequest request) {
String signature = request.getParameter("signature"); // 微信加密签名
String timestamp = request.getParameter("timestamp"); // 时间戳
String nonce = request.getParameter("nonce"); // 随机数

String[] arr = new String[] {timestamp, nonce, WEIXIN_TOKEN};
Arrays.sort(arr);
String s = arr[0] + arr[1] + arr[2];
MessageDigest md;
byte[] digest = null;
try {
md = MessageDigest.getInstance("SHA-1");
digest = md.digest(s.getBytes("utf-8"));
} catch (Exception e) {
e.printStackTrace();
}

String sign = bytesToHexString(digest);
return signature.equals(sign);
}

public static final String bytesToHexString(byte[] bArray) {
StringBuffer sb = new StringBuffer(bArray.length);
String sTemp;
for (int i = 0; i < bArray.length; i++) {
sTemp = Integer.toHexString(0xFF & bArray[i]);
if (sTemp.length() < 2)
sb.append(0);
sb.append(sTemp.toUpperCase());
}
return sb.toString().toLowerCase();
}
}

当你点击基本信息的【提交】按钮时,微信公众平台会向你项目发送http请求:
http://www.example.com/weixin/checkSignature.do?signature=&echostr=8312595572152199567×tamp=1460511115&nonce=534926942

如果这个地址能返回http请求中的echostr参数,就能提交成功,否则提交还会提示报错
Token:是一个字符串,自己随意写,但是要保证一点CheckSignatureController中会用到Token这个值,两者要保证完全一致即可
EncodingAESKey: 我选择的是随机生成的
2: 测试号管理
登录这个地址,进行配置:http://mp.weixin.qq.com/debug/cgi-bin/sandboxinfo?action=showinfo&t=sandbox/index

在这个地址中要配置完所有信息

接口配置信息
URL: http://www.example.com/weixin/checkSignature.do 和基本信息配置一样
Token:和基本配置中的token保持一致
JS接口安全域名
域名:http://www.example.com

D. 微信如何设置开发者中心的 “OAuth2.0”网页授权

需要在微信公众后台配置授权回调域名,配置注意事项请参考公众平台接口详细说明,配置成功后,可以通过请求授权页面,直到授权后重定向到回调地址。

具体操作:粘贴如下代码:

public ActionResult WXBind()
{
string sUrl = "/oauth2/access_token?appid=" + ViewUtil.WXappID + "&secret=" + ViewUtil.WXappsecret + "&code=" + Request["code"] + "&grant_type=authorization_code";
WebClient webClient = new WebClient();
Byte[] bytes = webClient.DownloadData(sUrl);
string result = Encoding.GetEncoding("utf-8").GetString(bytes);
JSONObject obj = JSONConvert.DeserializeObject(result);
string sParam = Request["state"];
string sRedictUrl = "";
switch (sParam)
{
case "myorder":
sRedictUrl = "/Account/Order?OpenID=" + obj["openid"] +"&Param=order";
break;
case "book":
sRedictUrl = "/Book/WXHotels";break;
default:
sRedictUrl = "/Account/Index?OpenID={0}" + obj["openid"];
break;
}
Response.Redirect(sRedictUrl);
return View();
}

E. 微信OAuth2.0网页授权​可以添加多个域名吗

不可以,只能添加一个域名。授权回调域名配置规范为全域名,比如需要网页授权的域名为:www.qq.com,配置以后此域名下面的页面http://www.qq.com/music.html 、 http://www.qq.com/login.html 都可以进行OAuth2.0鉴权。但http://pay.qq.com 、 http://music.qq.com 、 http://qq.com 无法进行OAuth2.0鉴权。

F. java基于微信开发,用oauth2静默授权是,回调的url总是执行两次,怎么回事呀

  1. 用户关注微信公众账号;

  2. 微信公众账号提供用户请求授权页面URL;

  3. 用户点击授权页面URL,将向服务器发起请求;

  4. 服务器询问用户是否同意授权给微信公众账号;

  5. 用户同意(scope为snsapi_base时无此步骤);

  6. 服务器将CODE通过回调传给微信公众账号;

  7. 微信公众账号获得CODE;

  8. 微信公众账号通过CODE向服务器请求Access Token;

  9. 服务器返回Access Token和OpenID给微信公众账号;

  10. 微信公众账号通过Access Token向服务器请求用户信息;

  11. 服务器将用户信息回送给微信公众账号。

G. 你好,看到您提问OAuth2.0网页授权微信怎么用java获取openid

  1. 首先需要在微信后台的网页授权那边添加你的信任的域名下地址

  2. 页面上获取code参数

    function getQueryString(name){
    var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
    var r = window.location.search.substr(1).match(reg);
    if (r != null) return unescape(r[2]); return null;
    }

var code = "";
$(function(){
code = getQueryString('code');

。。。。。

3.传入code调用接口获取openid

public static String oauth2GetOpenid(String code) {
HttpClient client = null;
String result = "";
try {
client = new DefaultHttpClient();
HttpGet httpget = new HttpGet("https://api.weixin.qq.com/sns/oauth2/access_token?appid="+Constant.WECHATAPPID+"&secret="+Constant.WECHATAPPSECRET+"&code="+code+"&grant_type=authorization_code");
ResponseHandler<String> responseHandler = new BasicResponseHandler();
String response = client.execute(httpget, responseHandler);
Object obj = JSONValue.parse(response);
JSONObject jbt = (JSONObject) obj;
result = String.valueOf(jbt.get("openid"));
} catch (Exception e) {
e.printStackTrace();
} finally {
client.getConnectionManager().shutdown();
}
return result;
}

H. 怎么用java调用微信支付接口

1.调用微信接口授权

授权这里有两种方式,一种是snsapi_bases,另一种是snsapi_userinfo,这里官方文档介绍的比较清楚,可以参考官网

https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1419316505&token=&lang=zh_CN

appid登录微信公众号-基本配置-开发者ID-APPID

redirect_uri就是一个回调地址,当你调用完微信的这个链接后,他会自动调用你定义的这个地址,返回code参数

注意,redirect_uri也需要在公众号里面配置,在接口权限-网页帐号里修改。

2.可以在页面中写一个调用授权的页面

<%@pagelanguage="java"contentType="text/html;charset=UTF-8"pageEncoding="UTF-8"%>
<!DOCTYPEhtmlPUBLIC"-//W3C//DTDHTML4.01Transitional//EN""

<%
Stringpath=request.getContextPath();
StringbasePath=request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<html>
<head>
<title>用户管理</title>
<scripttype="text/javascript"src="js/jquery/jquery-1.11.1.min.js"></script>
<scripttype="text/javascript">
functionoauth(){
varurl="<%=basePath%>getOauth2Url";
$.ajax({
url:url,
success:function(result){
//varresult=eval('('+result+')');
if(result.success){
location.href=result.obj;//
}else{
}
}
});
}
</script>
</head>

<body>
<ponclick="oauth()">非用户认证鉴权</p>
</body>
</html>
</pre><preclass="html"name="code"snippet_file_name="blog_20160608_3_8825275"code_snippet_id="1711669">java中的方法

<preclass="html"name="code">/**
*获取授权地址
*@return
*/
@RequestMapping(value="/getOauth2Url",method=RequestMethod.GET)
publicvoidgetOauth2Url(Modelmodel,HttpServletResponseresponse){
Jsonj=newJson();
try{
Stringauthorize_url=PayConfig.AUTHORIZE_URL;
StringappId=PayConfig.APPID;
Stringredirect_uri=PayConfig.REDIRECT_URI;
Stringurl=authorize_url+"?appid="+appId+"&redirect_uri="+urlEncodeUTF8(redirect_uri)+"&response_type=code&scope=snsapi_base&state=STATE#wechat_redirect";
System.out.println(url);
j.setSuccess(true);
j.setMsg("保存成功!");
j.setObj(url);
write(response,JSON.toJSONString(j));
}catch(Exceptione){
j.setMsg(e.getMessage());
}
}

/**
*对回调地址进行encode
*@paramsource
*@return
*/
(Stringsource){
Stringresult=source;
try{
result=java.net.URLEncoder.encode(source,"utf-8");
}catch(UnsupportedEncodingExceptione){
e.printStackTrace();
}
returnresult;
}
<preclass="html"name="code"> /**
*获取授权地址
*@return
*/
@RequestMapping(value="/getOauth2Url",method=RequestMethod.GET)
publicvoidgetOauth2Url(Modelmodel,HttpServletResponseresponse){
Jsonj=newJson();
try{
Stringauthorize_url=PayConfig.AUTHORIZE_URL;
StringappId=PayConfig.APPID;
Stringredirect_uri=PayConfig.REDIRECT_URI;
Stringurl=authorize_url+"?appid="+appId+"&redirect_uri="+urlEncodeUTF8(redirect_uri)+"&response_type=code&scope=snsapi_base&state=STATE#wechat_redirect";
System.out.println(url);
j.setSuccess(true);
j.setMsg("保存成功!");
j.setObj(url);
write(response,JSON.toJSONString(j));
}catch(Exceptione){
j.setMsg(e.getMessage());
}
}

/**
*对回调地址进行encode
*@paramsource
*@return
*/
(Stringsource){
Stringresult=source;
try{
result=java.net.URLEncoder.encode(source,"utf-8");
}catch(UnsupportedEncodingExceptione){
e.printStackTrace();
}
returnresult;
}

packagecom.crm.common;

publicclassPayConfig{
publicstaticStringAPPID="wx91af774aae000dcb";//APPID
publicstaticStringMCHID="1347742701";//商户编号
publicstaticStringPAYKEY="";//支付密钥
publicstaticStringAPPSECRET="";//公众号-基本配置-APPSECRET密钥
publicstaticStringREDIRECT_URI="
回调地址
publicstaticStringAUTHORIZE_URL="
微信授权地址
publicstaticStringACCESS_TOKEN_URI="

publicstaticStringSCOPE="snsapi_base";//snsapi_base和snsapi_userinfo
publicstaticStringGRANT_TYPE="grant_type";//获取openid时用,不用改
}


3.成功后,回到你当时写的回调地址

<preclass="html"name="code">/**
*微信授权后的回调地址的方法
*@paramcode
*@paramresponse
*/
@RequestMapping(value="/authorize",method=RequestMethod.GET)
publicvoidauthorize(Stringcode,HttpServletResponseresponse,Stringopenid){
code="test";
Stringaccess_token_uri=PayConfig.ACCESS_TOKEN_URI;
Stringappid=PayConfig.APPID;
Stringsecret=PayConfig.APPSECRET;
access_token_uri=access_token_uri.replace("APPID",appid).replace("SECRET",secret).replace("CODE",code);
System.out.println(access_token_uri);
if(openid!=null){
UniteOrderorder=getUniteOrder(openid);
StringreqXML=PayImpl.generateXML(order,PayConfig.PAYKEY);
StringrespXML=PayImpl.requestWechat(ORDER_URL,reqXML);
System.out.println("respXML="+respXML);
UniteOrderResultresult=(UniteOrderResult)PayImpl.turnObject(UniteOrderResult.class,respXML);
getWechatPay(result);
}
}

I. java怎么获取微信的openid

java获取微信的openid的方法是根据授权code来获取的,方法如下:
一个Servlet请求 获取code:
/**
* 根据code取得openId
*
* @param appid 公众号的唯一标识
* @param secret 公众号的appsecret密钥
* @param code code为换取access_token的票据
* @return
*/
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//参数
String code = request.getParameter("code");

if(null != code && !"".equals(code)){
log.info("==============[OAuthServlet]获取网页授权code不为空,code="+code);
//根据code换取openId
OAuthInfo oa = WeixinUtil.getOAuthOpenId(Constants.appId,Constants.appSecret,code);
UserInfo info = WeixinUtil.getUserInfo(oa.getAccessToken(), oa.getOpenId());
if(!"".equals(oa) && null != oa){
request.setAttribute("openid", oa.getOpenId());
request.setAttribute("nickname", info.getNickname());
request.getRequestDispatcher("/index.jsp").forward(request, response);

}else{
log.info("==============[OAuthServlet]获取网页授权openId失败!");
}
}else{
log.info("==============[OAuthServlet]获取网页授权code失败!");
}
}

替换相应的APPID APPSECRET SCOPE。
过code换取网页授权access_token 这里的access_token与基础获取的access_token不同

获取code后,请求以下链接获取access_token:
https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code

具体做法与上面基本一致。更换相对应的值。需要注意的是code可以写一个Servlet获取。String code = request.getParameter("code");get/post都可以。
这样子就会返回一下json格式数据
{
"access_token":"ACCESS_TOKEN",
"expires_in":7200,
"refresh_token":"REFRESH_TOKEN",
"openid":"OPENID",
"scope":"SCOPE"
}

阅读全文

与java微信oauth相关的资料

热点内容
怎么降为安卓10 浏览:994
javaweb程序设计郭 浏览:247
gm声望命令 浏览:484
pdf转换器电脑版免费 浏览:41
解压歌曲什么歌最好 浏览:151
诺贝尔pdf 浏览:967
云服务器快速安装系统原理 浏览:788
苹果腾讯管家如何恢复加密相册 浏览:115
手机软件反编译教程 浏览:858
sqlserver编程语言 浏览:650
gpa国际标准算法 浏览:238
服务器编程语言排行 浏览:947
怎么下载快跑app 浏览:966
小红书app如何保存视频 浏览:172
如何解开系统加密文件 浏览:811
linux切换root命令 浏览:283
c编译之后界面一闪而过怎么办 浏览:881
怎么看ic卡是否加密 浏览:726
lgplc编程讲座 浏览:811
cnc手动编程铣圆 浏览:724