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