.wxapi.WXPayEntryActivity 微信回調入口,靜態配置(安卓)

.wxapi.WXPayEntryActivity 微信回調入口,靜態配置(安卓)

1、微信支付,回調原理

微信的支付結果回調,是微信通過調用應用包名.wxapi.WXPayEntryActivity這個Activity完成的。

不同的應用擁有不同的包名,不同的應用在調用微信支付後,微信通過應用包名下的WXPayEntryActivity返回支付結果,便可傳遞至對應的應用中。

微信回調示例:

package com.sc.demo.wxapi;


import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.widget.Toast;

import com.tencent.mm.opensdk.constants.ConstantsAPI;
import com.tencent.mm.opensdk.modelbase.BaseReq;
import com.tencent.mm.opensdk.modelbase.BaseResp;
import com.tencent.mm.opensdk.openapi.IWXAPI;
import com.tencent.mm.opensdk.openapi.IWXAPIEventHandler;
import com.tencent.mm.opensdk.openapi.WXAPIFactory;


//	在AndroidManifest.xml中添加,靜態包名路徑處理接口類 com.sc.demo.wxapi.WXPayEntryActivity
//	併爲其設置一個Activity別名.wxapi.WXPayEntryActivity,此別名以省略包名開頭,指向靜態處理類targetActivity。
//	後續開發應用時,便不需要再在包名路徑下定義WXPayEntryActivity。
//	
//	<activity android:name="com.sc.demo.wxapi.WXPayEntryActivity" android:exported="true" android:launchMode="singleTop"/>
//	<activity-alias android:name=".wxapi.WXPayEntryActivity" android:exported="true" android:targetActivity="com.sc.demo.wxapi.WXPayEntryActivity"/>

/** 微信支付結果類,需定義爲包名 + wxapi.WXPayEntryActivity(否則無法接收支付結果),用於接收微信支付結果信息 */
public class WXPayEntryActivity extends Activity implements IWXAPIEventHandler
{
	private static final String TAG = "WXPayEntryActivity";
	
	private IWXAPI api;
	public static String wxAPPID = "";		// 在調用微信支付處,設置該變量值
	
	@Override
	public void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		
		// setContentView(R.layout.wx_pay_result);
		// 
		
		api = WXAPIFactory.createWXAPI(this, wxAPPID);
		api.handleIntent(getIntent(), this);
		
	}
	
	@Override
	protected void onNewIntent(Intent intent)
	{
		super.onNewIntent(intent);
		setIntent(intent);
		
		api.handleIntent(intent, this);
	}
	
	@Override
	public void onReq(BaseReq req)
	{	
		
	}
	
	/** 微信返回支付結果,會調用該函數*/
	@Override
	public void onResp(BaseResp resp)
	{
		showText("onPayFinish, errCode = " + resp.errCode);
		
		if (resp.errCode != 0 && resp.errCode != -2)
		{
			showToast(this, "微信支付失敗, errCode:" + resp.errCode);
		}
		
		if (resp.getType() == ConstantsAPI.COMMAND_PAY_BY_WX)
		{
			// AlertDialog.Builder builder = new AlertDialog.Builder(this);
			// builder.setTitle("提示");
			// builder.setMessage("微信支付結果:" + resp.errCode);
			// builder.show();
			
			if(resp.errCode == 0)
			{
				// PaySuccess(this);	// 可在此處,添加應用自己的支付結果統計相關邏輯
				showToast(this, "微信支付成功");
			}
			else if(resp.errCode == -2) showToast(this, "用戶取消支付");
			else showToast(this, "支付失敗,其他異常情形" );
		}
		
		this.finish();
	}
	
	/** 輸出log信息 */
	public static void showText(final String info)
	{
		Log.d(TAG, info);
	}
	
	/** 輸出Toast消息 */
	private void showToast(Context context, final String info)
	{
		Toast.makeText(context, info, Toast.LENGTH_SHORT).show();
		Log.d(TAG, info);
	}
	
}

2、靜態配置,微信回調處理類路徑

微信支付回調會調用 應用包名.wxapi.WXPayEntryActivity路徑下的這個Activity。所以,要收到回調,包名路徑下,必須要有該公開申明的Activity。包名會隨應用變動,想要該WXPayEntryActivity路徑不變,可以通過爲Activity設置動態別名實現。

這樣WXPayEntryActivity類路徑固定,不需要隨包名修改。微信支付結果回調,可通過不同包名調用到應用包名路徑下,對應的WXPayEntryActivity。動態變動,靜態處理,一勞永逸。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章