.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。動態變動,靜態處理,一勞永逸。