.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。动态变动,静态处理,一劳永逸。

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