【问题标题】:WeChat InApp payment screen shows up only for first time微信应用内支付界面首次出现
【发布时间】:2017-11-21 22:15:46
【问题描述】:

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

我会尽量快速总结一下。

  1. 如果用户没有登录,微信登录界面每次都会出现。
  2. 假设用户登录,当点击支付按钮第一次时,微信订单信息屏幕显示,但点击返回,然后点击支付按钮再次(在我们的应用中),微信屏幕不显示

我们确实实现了WXPayEntryActivity,但没有调用onCreateonNewIntentonResp。是的,这个活动正在发送广播,但没有显示 toast 和日志。

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

有人遇到过这个问题吗?

微信可以直接帮我吗?


想看一些代码吗?

这是我的支付类

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

【问题讨论】:

    标签: android payment wechat


    【解决方案1】:

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

    • 这是正常的......如果用户没有登录......微信应用程序将 重定向到登录屏幕
    • “仅第一次付款通过”是由于错误的包裹名称而发生的。考虑以下检查:
    • 您需要使用 ApplicationId 而不是 packageName
    • 空白
    • Debug buildType 默认有后缀:.debug to applicatonId
    • 检查 AppSign,它是您签名证书的 MD5。注意不要将默认的用于调试 buildType。
    • 由于隐藏的 WS 不可见,请尝试重新分配 ApplicationId 和 AppSign。(这是我们的问题?)。
    • 联系微信团队支持..他们有支付日志。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-09-16
      • 1970-01-01
      • 2019-07-24
      • 2016-07-06
      • 2012-01-20
      • 2017-09-10
      • 2023-03-30
      • 1970-01-01
      相关资源
      最近更新 更多