微信InApp支付界面第一次出现

WeChat InApp payment screen shows up only for first time

我正在尝试在我们的应用中实现微信应用内支付。但我们正在努力让它发挥作用。

我会尽量快速总结。

  1. 给定用户登录,微信登录屏幕每次都会出现。
  2. 给定用户登录,当第一次点击支付按钮时,微信订单信息屏幕出现,但是当单击 返回,然后再次单击支付按钮 (在我们的应用程序中),微信屏幕 没有出现。

我们确实实现了 WXPayEntryActivity,但是 onCreateonNewIntentonResp 都没有被调用。是的,这个 activity 正在发送广播,但是 toast 和日志都没有出现。

我尝试在应用程序启动时调用 registerApp,我在创建付款请求之前尝试过。

有人遇到过这个问题吗?

微信可以直接帮我吗?


想看一些代码吗?

这是我的付款class

public class WXInAppPayment {

    public void startPayment(AppCompatActivity activity, PaymentDataResponse data) {
        IWXAPI api = getApi(activity);
        if (api.isWXAppInstalled()) {
            api.sendReq(getPayRequest(data));
        } else {
            // Showing toast
        }
    }

    public WXReceiver getReceiver() {
        // returning BR for wechat payments
        return new WXReceiver();
    }

    public IntentFilter getIntentFilter() {
        IntentFilter intentFilter = new IntentFilter();
        intentFilter.addAction(Constants.WE_CHAT_BR_ID);
        return intentFilter;
    }

    private IWXAPI getApi(AppCompatActivity activity) {
        final IWXAPI api = WXAPIFactory.createWXAPI(activity, null);
        api.registerApp(Constants.WE_CHAT_APP_ID);
        return api;
    }

    private PayReq getPayRequest(PaymentDataResponse data) {
        PayReq request = new PayReq();
        request.appId = dataFromAPI.appId;
        request.partnerId = dataFromAPI.partnerId;
        request.prepayId = dataFromAPI.prepayId;
        request.packageValue = dataFromAPI.packageValue;
        request.nonceStr = dataFromAPI.nonceStr;
        request.timeStamp = dataFromAPI.timestimeStampamp;
        request.sign = dataFromAPI.sign;
        return request;
    }
}

这是WXPayEntryActivity。在清单中:

<activity android:name=".wxapi.WXPayEntryActivity"
          android:label="@string/app_name"
          android:exported="true"/>

和class:

public class WXPayEntryActivity extends Activity implements IWXAPIEventHandler {

    private final String TAG = getClass().getSimpleName();
    private IWXAPI api;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        api = WXAPIFactory.createWXAPI(this, Constants.WE_CHAT_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) {
        Log.e(TAG, "onReq: " + baseReq.transaction);
    }

    @Override
    public void onResp(BaseResp baseResp) {
        Log.e(TAG, "onResp: " + baseResp.errStr + " " + baseResp.errCode);
        Intent intent = new Intent(Constants.WE_CHAT_BR_ID);
        intent.putExtra("error_code", baseResp.errCode);
        intent.putExtra("error_string", baseResp.errStr);
        sendBroadcast(intent);
        finish();
    }
}

我遇到了同样的问题...您的代码看起来不错。 让我们介绍场景:

  • 这是正常的...如果用户未登录..微信应用程序将 重定向到登录屏幕
  • "Only first time payment passed" 由于包名错误而发生。考虑这些检查:
  • 您需要使用 ApplicationId 而不是 packageName
  • 空白
  • Debug buildType 默认有后缀:.debug 到 applicatonId
  • 检查 AppSign,它是您签署的证书的 MD5。注意不要将默认的用于调试 buildType。
  • 再次尝试重新分配 ApplicationId 和 AppSign。(这是我们的问题)由于隐藏的 WS 不可见。
  • 联系微信团队支持。他们有支付日志。