WeChatテスト番号の開発の9マイクロクレジットのウェブページの授権:ページはユーザーのopenidを取得します.


一:インターフェースの設定

ここにはURLではなくドメイン名(文字列です)を記入していますので、http:/などのプロトコルヘッダを付けないでください.
微信测试号开发之九 微信网页授权:页面获取用户openid_第1张图片
二:公衆番号メニューを定義し、授権ページにジャンプする(またはリンクを直接ジャンプする)
String url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx59be073ef6eac757&redirect_uri=http://wx.intmote.com/debo_wx/index.html&response_type=code&scope=snsapi_base&state=123#wechat_redirect";
    
        CommonButton btn11 = new CommonButton();
        btn11.setName("      ");
        btn11.setType("view");
        btn11.setUrl(url);
apid公衆番号の一意の表示
redirect_.uri授権後のリダイレクトリンクアドレスは、url Encodeを使ってリンクを処理してください.
レスポンスタイプを返します.コードを記入してください.
scopeアプリケーションのライセンスのスコープ、snsapi_base(ライセンスページをはじかず、直接ジャンプして、ユーザーのopenidを取得するしかない)、snsapi_userinfo(ライセンスページをイジェクトすると、オプニティを通じてニックネーム、性別、所在地を取得することができます.また、関心がない場合でも、ユーザが授権すれば、その情報を得ることができます.)
stateリダイレクト後にstateパラメータを持参します.開発者はa-zA-Z 0-9のパラメータ値を記入できます.最大128バイトです.
ヽoo.ツredirectは、直接開いてもページ302をリダイレクトしても、このパラメータを持つ必要があります.
三:コードの取得
メニューボタンをクリックすると、ページがジャンプします.http://wx.intmote.com/debo_wx/index./?code=CODE&state=STATE.
エラーコードの説明を返します.
10003 redirect_uriドメイン名とバックグラウンドの配置が一致していません.この公衆番号は10005封じられました.この公衆番号はこれらのscopeの権限10006がありません.このテスト番号に注目しなければなりません.uriは空10012 appedではなく、空10013 stateではなく、空10015公衆号で第三者プラットフォームを許可していません.授権状態10016を確認してください.WeChatオープンプラットフォームがサポートされていないアプリを確認してください.公衆番号アプリを使用してください.
index.ページでコードを取得します.
var code = GetQueryString("code");
	  
//          
function GetQueryString(name){
       var reg = new RegExp("(^|&)"+ name +"=([^&]*)(&|$)");
       var r = window.location.search.substr(1).match(reg);
       if(r!=null)return  unescape(r[2]); return null;
 }
四:コードによってaccess_を取得するtoken
フロントエンドajax要求:
//     openId
$.ajax({
	url : "getOpenId.action",
	dataType : "json",
	type : "get",
	data : "code="+GetQueryString("code"),
	success : function(data){
           //   data  openid,  openid    
	}
 })
バックグラウンドjavaコード:
コントローラ:
       /**
	 *         openid
	 * @Title: getOpenId 
	 * @param @param code
	 * @throws
	 */
	@RequestMapping(value = "getOpenId", method = RequestMethod.GET)
	@ResponseBody 
	public String getOpenId(@RequestParam("code") String code) 
	{
		System.out.println("cede="+code);
		//  code  openId
	    JSONObject jsonDate = CommonUtil.getOpenId(code);
	    if(jsonDate.isNull("errcode")){
	    	return jsonDate.getString("openid");
	    }
	    return "";
	    
	}
Common Util:
         /**
	   *       openId
	   * @Title: getOpenId 
	   * @Description: TODO
	   * @param code
	   * @return JSONObject
	   */
	public static JSONObject getOpenId(String code) {
		String url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code";
		String requestUrl = url.replace("APPID", WeChatInfo.WX_APPID).replace("SECRET", WeChatInfo.WX_APPSECRET).replace("CODE", code);
		
		JSONObject jsonObject = httpsRequest(requestUrl, "GET", null);
		return jsonObject;
	}
apped公衆番号の唯一の識別secret公衆番号のappecretcodeは第一歩取得したcodeパラメータgrant_を記入します.typeはauthorization_と記入します.コード
WeCharInfo:
public class WeChatInfo {
	public static final String WX_APPID = "wx59bte0732ef6eeac757";
	public static final String WX_APPSECRET = "3ade4c386340aa47bb55dae0d9b9ac7d73";
}
request Url要求が完了したJSONのパケットは以下の通りです.
{ "access_token":"ACCESS_TOKEN",
"expires_in":7200,
"refresh_token":"REFRESH_TOKEN",
"openid":"OPENID",
"scope":"SCOPE" }
パラメータ
              説明
access_token
ウェブサイトの授権インターフェースは証明書を呼び出して、注意します:このaccess_tokenとベースサポートのaccess_tokenが違います
expiresin
access_tokenインターフェース呼出証明書のタイムアウト時間、単位(秒)
refresh_token
ユーザーがaccess_を更新するtoken
openid
ユーザー固有の識別情報は、公衆番号に注目していない場合、ユーザーは公衆番号のウェブページにアクセスし、ユーザーと公衆番号の唯一のOpenIDも発生することに注意してください.
scope
ユーザーが授権したスコープは、カンマ(,)で区切られます.
エラー時にWeChatはJSONパケットに戻ります.
{"errcode":40029,"errmsg":"invalid code"}
終了しました.もしユーザーの他の情報を取得するなら、WeChatを参考にして文書を開発します.私は直接にopenidからデータベースに行ってユーザー情報を調べます.