PingPlusPlus / pingpp-android

414 stars 190 forks source link

无法收到微信支付成功回调 #36

Closed kamikat closed 7 years ago

kamikat commented 7 years ago

使用测试环境支付,服务器收到支付信息,客户端正确回调。 使用支付宝支付,服务器收到支付信息,客户端正确回调。 使用微信支付,服务器收到支付信息,客户端无法回调。

dong11 commented 7 years ago

测试其他机型吗? 都不可以回调?

GiaoGiaoCat commented 7 years ago

测试设备:LG G4 操作系统:Android 6.0 SDK版本:2.1.3

同样的问题,支付成功,客户端无法回调。

dong11 commented 7 years ago

更新一下Ping++SDK 试试, 你调起支付的方式是怎样的

GiaoGiaoCat commented 7 years ago

我得先说一下,以前一直没问题,我们也没更新过 Ping++SDK,大概最近一阵才发现这个问题。能不能是微信版本更新的问题? 服务端生成 charge,然后客户端 SDK 用该 charge 走的支付流程。

dong11 commented 7 years ago

能调起微信支付的界面不?

GiaoGiaoCat commented 7 years ago

能调起支付界面,并且支付也成功了。微信那边收到了扣费提示,但是 收不到支付成功的回调

dong11 commented 7 years ago

截一下你调起支付的代码吧

kamikat commented 7 years ago

调起支付 payment.charge 存储服务器返回的 charge 对象

Intent intent = new Intent(this, com.pingplusplus.android.PaymentActivity.class);
intent.putExtra(com.pingplusplus.android.PaymentActivity.EXTRA_CHARGE, payment.charge);
startActivityForResult(intent, REQUEST_CODE_PAYMENT);

支付回调

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == REQUEST_CODE_PAYMENT) {
        if (resultCode == Activity.RESULT_OK) {
            String result = data.getExtras().getString("pay_result");
            assert result != null;
            switch (result) {
                case "success":
                    // ...
                    break;
                case "fail":
                    Toast.makeText(this, R.string.error_payment_failure, Toast.LENGTH_SHORT).show();
                    break;
                case "cancel":
                    break;
                case "invalid":
                    Toast.makeText(this, R.string.error_payment_invalid, Toast.LENGTH_SHORT).show();
                    break;
            }
        }
    }
}

AndroidManifest.xml 声明


<!-- Ping++ SDK -->
<activity
    android:name="com.pingplusplus.android.PaymentActivity"
    android:configChanges="orientation|keyboardHidden|navigation|screenSize"
    android:launchMode="singleTop"
    android:theme="@android:style/Theme.Translucent.NoTitleBar" />

<!-- 微信支付 -->
<activity-alias
    android:name=".wxapi.WXPayEntryActivity"
    android:exported="true"
    android:targetActivity="com.pingplusplus.android.PaymentActivity" />

<!-- 支付宝 -->
<activity
    android:name="com.alipay.sdk.app.H5PayActivity"
    android:configChanges="orientation|keyboardHidden|navigation|screenSize"
    android:exported="false"
    android:screenOrientation="behind" >
</activity>
<activity
    android:name="com.alipay.sdk.auth.AuthActivity"
    android:configChanges="orientation|keyboardHidden|navigation|screenSize"
    android:exported="false"
    android:screenOrientation="behind" >
</activity>
dong11 commented 7 years ago

你调起的方式不对

dong11 commented 7 years ago

String packageName = activity.getPackageName(); Intent intent = new Intent(); ComponentName componentName = new ComponentName(packageName, packageName + ".wxapi.WXPayEntryActivity"); intent.setComponent(componentName); intent.putExtra(PaymentActivity.EXTRA_CHARGE, charge); activity.startActivityForResult(intent, REQUEST_CODE_PAYMENT);

dong11 commented 7 years ago

新的SDK可以使用Pingpp.createPayment(ClientSDKActivity.this, charge)来调起支付

kamikat commented 7 years ago

使用 Pingpp.createPayment 调起支付时发生了 ActivityNotFoundException: Unable to find explicit activity class {$packageName/$packageName.wxapi.WXPayEntryActivity}; 检查 AndroidManifest.xml 有

<!-- 微信支付 -->
<activity-alias
    android:name=".wxapi.WXPayEntryActivity"
    android:exported="true"
    android:targetActivity="com.pingplusplus.android.PaymentActivity" />

需要什么额外的 AndroidManifest.xml 配置么?

dong11 commented 7 years ago

你的AndroidManifest.xml和build.gradle中的包名不一致吧

dong11 commented 7 years ago

packageName.wxapi.WXPayEntryActivity 可以将路径 补充完整

kamikat commented 7 years ago

啊,好像是这个问题,用 ${applicationId}.wxapi.WXPayEntryActivity 换掉了。多谢多谢。