1. 程式人生 > >Android微信支付直接跳轉WXPayEntryActivity

Android微信支付直接跳轉WXPayEntryActivity

本文寫於Android端微信支付v10。

呼叫IWXAPI.sendReq(BaseReq baseReq)方法後,出現如下情況:

  • 沒有跳轉到微信支付,而是直接調轉到WXPayEntryActivity
  • WXPayEntryActivity中實現的void onReq(BaseReq baseReq)並沒有被回撥

出現這種情況,網上“將微信APP清空資料”的方法是坑爹的,治標不治本,難道使用者每次支付也要清空自己的微信資料?
解決辦法:如果你已經檢查過了appid、請求引數和簽名演算法等等仍然出問題,那麼就檢查WXPayEntryActivity,確保:

  • AndroidManifest.xml中WXPayEntryActivity的android:exported="true"
  • 這個類的完整路徑是你的包名.wxapi.WXPayEntryActivity,其中包名是在微信開放平臺設定的包名
  • 應用apk需要被簽名,簽名和微信開放平臺上的應用簽名要一致,附包名檢查工具
  • void onCreate(Bundle savedInstanceState)void onNewIntent(Intent intent)中需要呼叫IWXAPI.handleIntent(intent, context),重要!!如果漏了,是調不起微信的!!

關於最後一點,完整示例如下:

public class WXPayEntryActivity extends AppCompatActivity
implements IWXAPIEventHandler {
private IWXAPI api; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.ac_wxpay_entry); api = WXAPIFactory.createWXAPI(this, WxPayUtils.APP_ID); api.handleIntent(getIntent(), this
); } @Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); setIntent(intent); api.handleIntent(intent, this); } @Override public void onReq(BaseReq baseReq) { //... } @Override public void onResp(BaseResp baseResp) { if (baseResp.getType() == ConstantsAPI.COMMAND_PAY_BY_WX) { //... } } }