微信InApp支付屏幕仅显示第一次

时间:2017-11-21 22:15:46

标签: android payment wechat

我正在尝试在我们的应用中实施微信InApp付款。但我们正在努力使其发挥作用。

我会尽快快速总结一下。

  1. 如果用户登录,则每次都会显示微信登录界面。
  2. 如果用户 已登录,当点击付费按钮第一次时,会显示微信订单信息屏幕,但点击后退,再点击付款按钮 (在我们的应用中),微信屏幕显示。
  3. 我们确实实施了WXPayEntryActivity但未调用onCreateonNewIntentonResp。是的,这个活动正在发送广播,但是没有吐司或日志显示。

    我尝试在应用程序启动时调用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();
        }
    }
    

1 个答案:

答案 0 :(得分:0)

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

  • 这是正常现象……如果用户尚未登录。 重定向到登录屏幕
  • 由于packageName错误,发生了“仅第一次付款通过”。考虑以下检查:
  • 您需要使用ApplicationId而不是packageName
  • WhiteSpace
  • 默认情况下,调试buildType具有后缀:.debug至applicatonId
  • 检查与您签名的证书的MD5相符的AppSign。请注意不要将默认值用于调试buildType。
  • 由于隐藏的WS不可见,请尝试重新分配ApplicationId并再次对其进行AppSign。(这是我们的问题)。
  • 与微信团队支持联系。.他们有付款记录。