序文
あなたが考慮すべき最初の必要性を達成バーゲン機能を招待するためのマイクロ文字の友人の多くを、戦う場合、私は知らない情報マイクロチャネルのユーザーを集めることです。ユーザー情報がユーザーのマイクロチャネル公共番号で情報を収集することで取得し、今日の私は、マイクロチャネルの公共番号からユーザー情報を取得する方法について何かを言うだろう。
公共のマイクロチャネルサービス番号にユーザー情報を取得することが重要であることを宣言する必要がありますのみ権の数ではなく、個々のサブスクリプション番号が正しいです。
ユーザーの公開情報実際の数を取得します
最初のステップは、あなたは、Webインターフェイスのテスト番号と認証の設定を申請する必要があり
適用するには、以下のリンクインターフェイスのテストをご覧ください。
https://developers.weixin.qq.com/doc/offiaccount/Basic_Information/Requesting_an_API_Test_Account.html
テスト選択インターフェース出願番号、下記のように:
:以下に示すように、スキャンコードをログに記録するにはサインクリックして
、以下のようにログインした後:
以下のページでは、アカウントの列には、ページを追加するIPまたはドメイン名を承認しました。
私はここで設定したループバックアドレスになり、テスト目的のためには、特定のIPアドレスまたはドメイン名の情報を設定することが最善です。ドメイン名とIPアドレスは、httpまたはhttpsを追加しないでください。ここではIPとドメイン名は、ネットワークアドレスを指定できます。
認可は、こちらのページを設定するには!
第二段階は、PCでテストすることができ、マイクロ文字のWeb開発者向けツールをダウンロードすることです。
https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/Web_Developer_Tools.html
ステップインストールにより、愚か者のステップ。
第3のステップは、マイクロチャネルを見て、チュートリアルの操作コードを完了することです
コードの次のセクションは、書かれているチュートリアルマイクロチャネルパブリック数のユーザー情報を探すための最初の必要性開発の前に:
します。https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/Wechat_webpage_authorization.html訪問しています。4つのステップ以下の動作を取得する特定のマイクロチャネルユーザ情報。
最初のステップ:ユーザーの同意、アクセスコード
操作は、コードは、マイクロチャネルの許可アドレスを介してユーザをガイドして、マイクロチャネルサービスにリダイレクト、URLのリダイレクトに基づいて、当社のサーバーにリダイレクト中のマイクロチャネルサービスとコードを運ぶスプライスされます。このステップでは、設定され、公共の数APPID REDIRECT_URIを持ってする必要があります。
次のコードに示すように、アドレスは、リダイレクションを符号化するために特定の操作を必要とすることに注意してください。
String url = URLEncoder.encode(request.getRequestURL().toString());
以下に示すように、特定のアドレス:私たちの公共のニーズに赤い枠を変更するとREDIRECT_URI番号が情報をのappid、その他の内容は変化しません。
以下に示すように、プログラムアドレスの後、認可するためにユーザーをリダイレクトします:
ユーザーが同意をクリックすると、マイクロチャネルサービスは、当社のサービスに合わせてバックリダイレクトアドレスにリダイレクトされ、コードを実行されます。
第二段階は、権限access_tokenはとOpenIDの下のコードページを得ることです。
次のマイクロチャネルに示すように変更を加えずに赤枠コード取得コード、その他のコンテンツを置き換え、APIを呼び出します。
第三段階:(必要な場合)access_tokenはリフレッシュします
access_tokenはの有効期限が切れたとき、あなたは再認証をすることをユーザーに要求する、refresh_token障害が発生した後、30日間有効なrefresh_token、リフレッシュをrefresh_token使用することができ、7200sのために有効なaccess_tokenは。このステップを行うことができないでください、私たちは、この手順を省略するためにここにいます。
第四段階:(必須スコープsnsapi_userinfoとして)ユーザ情報を引っ張っ
命令の権限の範囲の違いで2つのページ
1ウェブ開始のための許可範囲をsnsapi_baseするために、OpenIDのは、ユーザーのページに入る取得するために使用され、そして静か承認され、自動的にページのコールバックにジャンプしています。これは、直接、コールバック・ページ(多くの場合、ビジネスページ)に、ユーザによって知覚されます
2は、スコープが開始されてsnsapi_userinfoするページの任務は、利用者の基本的な情報を取得するために使用されます。しかし、これは手動で同意を許可するユーザーを必要とし、ユーザーが同意し、私は注意を必要としないので、あなたは承認した後、ユーザーの基本的な情報を得ることができます。
ユーザaccess_tokenはマイクロチャネルに係る情報を取得し、第二のステップは、取得opendId。APIは、図に示したマイクロチャネルを呼び出しに従い、opendId access_tokenは得られた赤枠で置換しても、変更することなく、他の図面に従います。JSONは情報が公共財の数のユーザー情報で返されます。
操作手順を終了し、次のステップは、コードです。次のようにコントローラを取得する特定のマイクロチャンネルユーザー情報:
@RestController
@RequestMapping("/weixin")
public class WeiXinDemoController {
@Autowired
private WeiXinService weiXinService;
@RequestMapping("/getWeiXinUserInfo")
public String getWeiXinUserInfo(String code,HttpServletRequest request,HttpServletResponse response,HttpSession session) throws IOException{
//第一步:用户同意授权,获取code
if (code == null) {
String url = URLEncoder.encode(request.getRequestURL().toString());
String authorizeUrl = weiXinService.buildAuthorizeURL(url);
response.sendRedirect(authorizeUrl);
return null;
}
//第二步:通过code换取网页授权access_token和openid
String htmlInfo = "";
Map<String, Object> openIdInfo = weiXinService.getOpenIdInfo(code);
String errcode = (String)openIdInfo.get("errcode");
if(StringUtils.isEmpty(errcode)){
//第四步:拉取用户信息(需scope为 snsapi_userinfo)根据access_token和OpenId
Map<String, Object> weiXinUserInfo = weiXinService.getWeiXinUserInfo(openIdInfo);
String userInfohtml = createUserInfoHtml(weiXinUserInfo);
return userInfohtml;
}
return htmlInfo;
}
@Component
@ConfigurationProperties(prefix="wx")
public class WeiXinConfig {
private String appID;
private String mchID;
private String appsecret;
private String key;
//省略getter and setter
}
ように構成されapplication.propertiesは、以下:
WeiXinServiceにおけるマイクロチャネル処理コア、マイクロチャネルRestTemplateインタフェース呼び出しによって実装されるとき。
スプライシングはユーザアドレスマイクロチャネル認証コードを案内以下の通りであります:
/**
* 拼接用户授权重定向的URL
* @param url
* @return
*/
public String buildAuthorizeURL(String url){
return concatAuthorizeURL(url);
}
private String concatAuthorizeURL(String url) {
StringBuilder authorizeUrl = new StringBuilder(AUTHORIZEURL);
authorizeUrl.append("?appid=").append(weiXinConfig.getAppID());
authorizeUrl.append("&redirect_uri=").append(url);
authorizeUrl.append("&response_type=code");
//snsapi_base (不弹出授权页面,直接跳转,只能获取用户openid),
//snsapi_userinfo (弹出授权页面,可通过openid拿到昵称、性别、所在地。并且, 即使在未关注的情况下,只要用户授权,也能获取其信息 )
authorizeUrl.append("&scope=snsapi_userinfo");
authorizeUrl.append("&state=").append("STATE");
authorizeUrl.append("#wechat_redirect");
return authorizeUrl.toString();
}
次のように認証コードページとaccess_tokenはOpenIDのコードを取得するためによると、次のとおりです。
/**
* 获取 access_token 和 openid
* @param code
* @return
*/
public Map<String,Object> getOpenIdInfo(String code){
String getAccessTokenUrl = concatGetOpenIdInfoURL(code);
String json = postRequestForWechat(getAccessTokenUrl);
Map<String,Object> map = jsonToMap(json);
return map;
}
private String concatGetOpenIdInfoURL(String code) {
StringBuilder getAccessTokenUrl = new StringBuilder(GE_TACCESSTOKEN_URL);
getAccessTokenUrl.append("?appid=").append(weiXinConfig.getAppID());
getAccessTokenUrl.append("&secret=").append(weiXinConfig.getAppsecret());
getAccessTokenUrl.append("&code=").append(code);
getAccessTokenUrl.append("&grant_type=authorization_code");
return getAccessTokenUrl.toString();
}
private String postRequestForWechat(String getAccessTokenUrl) {
ResponseEntity<String> postForEntity = restTemplate.postForEntity(getAccessTokenUrl, null, String.class);
String json = postForEntity.getBody();
return json;
}
private Map jsonToMap(String json) {
Gson gons = new Gson();
Map map = gons.fromJson(json, new TypeToken<Map>(){}.getType());
return map;
}
マイクロチャネルのユーザーコードによって取得された情報とaccess_tokenはOpenIDのは、次のとおりです。
/**
* 获取微信用户信息通过 access_token 和 openid
* @param map
* @return
*/
public Map getWeiXinUserInfo(Map<String, Object> map) {
String getUserInfoUrl = concatGetWeiXinUserInfoURL(map);
String json = getRequestForWechat(getUserInfoUrl);
Map userInfoMap = jsonToMap(json);
return userInfoMap;
}
private String concatGetWeiXinUserInfoURL(Map<String, Object> map) {
String openId = (String) map.get("openid");
String access_token = (String) map.get("access_token");
// 绕过检验授权凭证(access_token)是否有效
StringBuilder getUserInfoUrl = new StringBuilder(GE_USERINFO_URL);
getUserInfoUrl.append("?access_token=").append(access_token);
getUserInfoUrl.append("&openId=").append(openId);
getUserInfoUrl.append("&lang=zh_CN");
return getUserInfoUrl.toString();
}
private String getRequestForWechat(String getUserInfoUrl) {
ResponseEntity<String> postForEntity = restTemplate.getForEntity(getUserInfoUrl.toString(), String.class);
String json = postForEntity.getBody();
return json;
}
テスト
完了するために、マイクロ文字のWeb開発者向けツールをダウンロードした後、合わせばかにインストールすることができます。インストールは、以下に示すように、完全なオープンなWeb開発者向けツール、公共の数字がページを選択した後。
HTTPを入力します:127.0.1:8090 / SBE2 / weixin / getWeiXinUserInfo、 ユーザーがパブリックテストの数に関する情報が表示されます。
方法は、我々のプロジェクトの設定でAPPID APPIDサービス番号を交換することができることで、テストは、認可サービス番号にウェブドメイン名を使用して設定することができた後、通常の状況下で、我々は、IPをテストするためのインタフェーステスト環境のドメイン名または番号を介して設定しました。次のように具体的な動作は以下のとおりです。
概要
、マイクロチャネルに対処する権限スプライシングガイドユーザの最初のステップ、アドレスに基づいてサービスをリダイレクトする認証コードを取得する第二工程、およびOpenIDのaccess_tokenはコードを取得し、第3の取得ステップに応じとOpenIDのaccess_tokenは:のステップでユーザ情報の公開マイクロチャンネル番号を取得します微信ユーザー情報。
私はここで最も単純な3ステップをご紹介し、通常のaccess_tokenはの面でも、故障リフレッシュaccess_tokenは後に、この手順の妥当性もレイドでaccess_tokenはにキャッシュされ、有効期限を設定することができますを確認する必要があります。
ここで再び、それは詳細の多くは、ドキュメントに記載されているので、マイクロチャネル動作のドキュメントは、いくつかを見なければならない提供して強調しています。あなたを介して見ることのドキュメントを提供するために、マイクロチャネル動作を入れたとき、あなたはそれがAPI呼び出しであることを感じるだろう。
サンプルコード
具体的なコード例では、春・ブート2.xの-weixinビューの私のGitHubリポジトリspringbootexamplesを参照してください。
GitHubの:https://github.com/zhuoqianmingyue/springbootexamples