Экран оплаты WeChat InApp отображается только в первый раз

Я пытаюсь реализовать платежи WeChat InApp в нашем приложении. Но мы изо всех сил пытаемся заставить его работать.

Я постараюсь подвести итог очень быстро.

  1. Если пользователь не вошел в систему, каждый раз появляется экран входа в WeChat.
  2. Если пользователь вошёл в систему, при нажатии кнопки оплаты в первый раз отображается экран с информацией о заказе WeChat, но при нажатии назад и нажал снова кнопку оплаты (в нашем приложении), экран WeChat не появляется.

Мы реализовали WXPayEntryActivity, но ни onCreate, ни onNewIntent, ни onResp не вызываются. И да, это действие отправляет широковещательную рассылку, но ни всплывающие уведомления, ни журнал не отображаются.

Я пробовал вызывать registerApp при запуске приложения, пробовал прямо перед созданием платежного запроса.

Кто-нибудь сталкивался с этой проблемой?

Может ли WeChat помочь мне напрямую?


Хотите увидеть код?

Это мой класс оплаты

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"/>

И класс:

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();
    }
}

person Samuel Bilý    schedule 21.11.2017    source источник


Ответы (1)


Я столкнулся с той же проблемой... Ваш код выглядит нормально. давайте рассмотрим сценарий:

  • Это нормально... если пользователь не вошел в систему. Приложение Wechat перенаправит вас на экран входа в систему.
  • «Платеж прошел только в первый раз» произошло из-за неправильного имени пакета. рассмотрите эти проверки:
  • Вам нужно использовать ApplicationId, а не packageName
  • БелыйКосмос
  • Debug buildType по умолчанию имеет суффикс: .debug для applicationId
  • Проверьте AppSign, который является MD5 сертификата, с которым вы подписываетесь. Будьте осторожны, чтобы не использовать значение по умолчанию для отладки buildType.
  • Попробуйте переназначить ApplicationId и AppSign еще раз (это была наша проблема ????) из-за того, что скрытый WS не виден.
  • Свяжитесь со службой поддержки Wechat.. у них есть логи для оплаты.
person Maher Abuthraa    schedule 03.09.2018