Я пытаюсь реализовать платежи WeChat InApp в нашем приложении. Но мы изо всех сил пытаемся заставить его работать.
Я постараюсь подвести итог очень быстро.
- Если пользователь не вошел в систему, каждый раз появляется экран входа в WeChat.
- Если пользователь вошёл в систему, при нажатии кнопки оплаты в первый раз отображается экран с информацией о заказе 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();
}
}