Androidを使って開発して、第三者の原生SDKにアクセスして、WeChat登録を実現します。


ウィーチャットオープンプラットフォーム:https://open.weixin.qq.com/
一、準備作業:
1.Android Studio環境下:build.gradleファイルには、次のような依存性を追加すればいいです。

dependencies {
 implementation'com.tencent.mm.opensdk:wechat-sdk-android-with-mta:+'
}
2.リストファイルのAndroid Manifest.xmlに権限を加える:

<uses-permission android:name="android.permission.INTERNET"/>
 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
 
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
 
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
二、アクセス:
1.WeChatを登録する:
私たちのプログラムを起動してから、WeChat端末が私たちのプログラムに応答できるようにするには、コードの中にWeChat端末のようなIDを登録しなければなりません。
(プログラムの入り口ActivityのOnCreatに登録することができます。MyApplicationに登録することもできます。または他の適切な場所で私たちのアプリケーションIDをWeChatに登録することもできます。ここではAppliationで:

// 1.    statid IWXAPI   APPID
private static IWXAPI mWxApi;
private String WX_APPID = "";
 
// 2.     SDK
mWxApi = WXAPIFactory.createWXAPI(this, WX_APPID, true);
mWxApi.registerApp(WX_APPID);
2.登録開始

if (BaseApplication.mWxApi!= null && BaseApplication.mWxApi.isWXAppInstalled()) {
 final SendAuth.Req req = new SendAuth.Req();
 req.scope = "snsapi_userinfo";
 req.state = "wechat_sdk_fth";
 BaseApplication.mWxApi.sendReq(req);
 } else {
 Toast.makeText(LoginActivity.this, "        ", Toast.LENGTH_SHORT).show();
 }
3.新しいカバンの名前はwxapiで、WXEntry Activityというクラスを新たに作っています。このクラス名とカバン名はWeChatで規定されています。木には方法があります。一致しなければなりません。
そして、リストファイルのAndroid Manifest.xmlにこのクラスを宣言します。

<!--        WXEntryActivity -->
<activity
 android:name=".wxapi.WXEntryActivity"
 android:configChanges="keyboardHidden|orientation|screenSize"
 android:exported="true"
 android:screenOrientation="portrait"
 android:theme="@style/NoTitleTranslucentTheme">
</activity>
4.WxEntry Activity類コードは以下の通りです。

public class WXEntryActivity extends Activity implements IWXAPIEventHandler {
 
 private Bundle bundle;
 
 @Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 BaseApplication. mIwapi.handleIntent(getIntent(), WXEntryActivity.this); //       
 }
 
 @Override
 protected void onNewIntent(Intent intent) {
 super.onNewIntent(intent);
 BaseApplication. mIwapi.handleIntent(intent, WXEntryActivity.this);//       
 }
 
 @Override
 public void onReq(BaseReq req) {
 System. out.println();
 }
 
 /**
 * API:https://open.weixin.qq.com/ cgi- bin/showdocument ?action=dir_list&t=resource/res_list&verify=1&id=open1419317853 &lang=zh_CN
 *      Code    https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code    token openID。
 *      https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID         
 */
 @Override
 public void onResp(BaseResp arg0) {
 bundle=getIntent().getExtras();
 SendAuth.Resp resp = new SendAuth.Resp( bundle);
 //   code  ,         access_token
 if (resp. errCode == BaseResp.ErrCode. ERR_OK) {
 String code = resp. token;
 if(BaseApplication. isWxLogin){
 getToken(code);
 } else{
 WXEntryActivity. this.finish();
 }
 } else{
 WXEntryActivity. this.finish();
 }
 
 }
 //       accesstoken  openID
 private void getToken(String code){
 MyProgressDialog. showDialog(WXEntryActivity.this, "  ", "        " );
 HttpBase. get("https://api.weixin.qq.com/sns/oauth2/access_token?appid=wxd7673d08f6c1963d&secret=223d726f966031f30125d0e4e7d4aed3&code=" +code+"&grant_type=authorization_code" , new JsonHttpResponseHandler(){
 @Override
 public void onSuccess( int statusCode, JSONObject response) {
 super.onSuccess(statusCode, response);
 getUserInfo(response.optString( "access_token"),response.optString( "openid"));
 }
 @Override
 public void onFailure( int statusCode, Throwable e,
   JSONObject errorResponse) {
 // TODO Auto-generated method stub
 super.onFailure(statusCode, e, errorResponse);
 MyProgressDialog. closeDialog();
 }
 });
 }
 
 //   token openID  ,           
 private void getUserInfo(String token,String openID){
 HttpBase. get("https://api.weixin.qq.com/sns/userinfo?access_token=" +token+"&openid=" +openID, new JsonHttpResponseHandler(){
 @Override
 public void onSuccess( int statusCode, JSONObject response) {
 super.onSuccess(statusCode, response);
 try {
  String nickname = response.getString("nickname");//       
  String sex = response.getInt("sex") == 1 ? " " : " ";//      
  String header = response.getString( "headimgurl");//      
 } catch (JSONException e) {
  e.printStackTrace();
 }
 }
 @Override
 public void onFailure( int statusCode, Throwable e,
   JSONObject errorResponse) {
 super.onFailure(statusCode, e, errorResponse);
 MyProgressDialog. closeDialog();//  dialog
 HttpBase. onFailureTips(WXEntryActivity.this, errorResponse);
 }
 });
 }
}
ここまで行けばオークです。
補足知識:AndroidはWeChat sdkにアクセスし、WeChatを使用して授権する。
WeChat sdkにアクセスし、授権するには、最初の基本も最も重要なステップであり、アプリケーションのパケット名、アプリケーション署名(新浪署名ツールを使用して閲覧できるかどうかわからない場合、またはWeChatが提供するツール)、app id(WeChatアプリケーションが成功したら入手できる)の3つがWeChat上で申請されたものと一致しなければならないので、そうでない場合はない。
1、自分のプロジェクトでボタンを作成します。
2、Cons.javaのクラスを新設し、WeChat支払いに関するパラメータを保存する。

public class Constants {

 public static final String APP_ID = "wxxxxxxx"; //       app id

}
3、MyApplication.java類での実装
4、登録ページでクリックイベントを登録して、微信授にジャンプします。
scopeはユーザーの個人情報を取得するので、snsapi_に固定します。userinfo
stateで記入可能なパラメータは、政府の提案に従って記入したほうがいいです。csrf攻撃防止に使えます。
5、この場合はWeChatを起動して許可を受けることができますが、WeChatを返してもらうためには、以下の手順が必要です。
1)パッケージ名にwxapiフォルダを追加する(このフォルダ名はWeChat公式規定であり、一致しなければならない)
2)wxapiフォルダの下でActivityに引き継がれ、IWX API EventHandlerインターフェースを実現するWXEntry Activity類が追加されました。

if(baseResp instanceof SendAuth.Resp){

 SendAuth.Resp newResp = (SendAuth.Resp) baseResp;

 //       code

 final String code = newResp.code;

}
得られたコードはWeChatの授権に成功した後に与えられた臨時手形で、codeによって関連のユーザーaccess_を取得することができます。tokenとopenid、そしてaccess_によるとtokenとopenidはユーザー情報を取得します。
6、Android Manifest.xmlにWXEntry Activityを配置する
1)権限を追加する
2)WXEntry Activityの配置を追加します。
その中にandroid:exportd=「true」を追加しなければなりません。そうでないと、コールバックを受信できません。
7、コンパイルして実行を生成すれば、WeChat登録を開始し、WeChatを取得して戻ってきます。
もしまだだめなら、以下の問題に注意してください。
1)アプリIDは正しいですか?
2)パッケージ名は申請時の記入と一致していますか?
3)署名の適用は申請時の記入と一致していますか?(署名生成ツールで比較してもいいです。一般的に発生する可能性がある場合は、申請用の署名パッケージ、デバッグ用の非署名パッケージなどがよくあります。
4)WXEntry Activity.javaファイルの位置は正しいですか?
5)Android Manifest.xmlの構成は正しいですか?
6)公衆番号、モバイルアプリケーション間でアカウントを統一すれば、unionIDを利用して需要を満たすことができます。WeChatが戻ってきたopenidはアプリIDに基づいて生成されていますので、H 5許可であればAndroidで得られたidと一致しないことになります。
最後にWeChatオープンプラットフォームの公式アドレスを添付します。https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=reource/ress_list&verify=1&id=open 1419317851&token=&lang=zh_CN
以上、Androidを使って開発して、第三者の原生SDKにアクセスして、WeChat登録を実現するということは、小編集が皆さんに共有しているすべての内容です。参考にしていただければと思います。どうぞよろしくお願いします。