導航:首頁 > 編程語言 > 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相關的資料

熱點內容
壽司解壓系列全集視頻 瀏覽:911
物體三維重建演算法 瀏覽:982
fuli直播app哪個好 瀏覽:918
租辦公室用什麼app 瀏覽:104
醫師定期考核刷題app哪個好 瀏覽:336
導出dmp文件命令 瀏覽:286
手機百度網盤怎麼解壓密碼文件 瀏覽:583
索引重新編譯 瀏覽:604
命令與征服4免cd補丁完美版 瀏覽:426
kotlin編譯為native 瀏覽:140
家用編譯機 瀏覽:549
電子加密貨幣最新政策 瀏覽:379
androidcanvas撤銷 瀏覽:269
安卓手機怎麼把圖標全部下移 瀏覽:185
飢荒被伺服器踢出怎麼進 瀏覽:171
c編譯器哪款好 瀏覽:732
快手寶哥發明什麼app 瀏覽:822
張艷玲編譯 瀏覽:66
android展開收起動畫 瀏覽:237
linuxxz文件 瀏覽:160