微信InApp支付界面第一次出现
WeChat InApp payment screen shows up only for first time
我正在尝试在我们的应用中实现微信应用内支付。但我们正在努力让它发挥作用。
我会尽量快速总结。
- 给定用户未登录,微信登录屏幕每次都会出现。
- 给定用户已登录,当第一次点击支付按钮时,微信订单信息屏幕出现,但是当单击 返回,然后再次单击支付按钮 (在我们的应用程序中),微信屏幕 没有出现。
我们确实实现了 WXPayEntryActivity
,但是 onCreate
、onNewIntent
和 onResp
都没有被调用。是的,这个 activity 正在发送广播,但是 toast 和日志都没有出现。
我尝试在应用程序启动时调用 registerApp
,我在创建付款请求之前尝试过。
有人遇到过这个问题吗?
微信可以直接帮我吗?
想看一些代码吗?
这是我的付款class
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"/>
和class:
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();
}
}
我遇到了同样的问题...您的代码看起来不错。
让我们介绍场景:
- 这是正常的...如果用户未登录..微信应用程序将
重定向到登录屏幕
- "Only first time payment passed" 由于包名错误而发生。考虑这些检查:
- 您需要使用 ApplicationId 而不是 packageName
- 空白
- Debug buildType 默认有后缀:
.debug
到 applicatonId
- 检查 AppSign,它是您签署的证书的 MD5。注意不要将默认的用于调试 buildType。
- 再次尝试重新分配 ApplicationId 和 AppSign。(这是我们的问题)由于隐藏的 WS 不可见。
- 联系微信团队支持。他们有支付日志。
我正在尝试在我们的应用中实现微信应用内支付。但我们正在努力让它发挥作用。
我会尽量快速总结。
- 给定用户未登录,微信登录屏幕每次都会出现。
- 给定用户已登录,当第一次点击支付按钮时,微信订单信息屏幕出现,但是当单击 返回,然后再次单击支付按钮 (在我们的应用程序中),微信屏幕 没有出现。
我们确实实现了 WXPayEntryActivity
,但是 onCreate
、onNewIntent
和 onResp
都没有被调用。是的,这个 activity 正在发送广播,但是 toast 和日志都没有出现。
我尝试在应用程序启动时调用 registerApp
,我在创建付款请求之前尝试过。
有人遇到过这个问题吗?
微信可以直接帮我吗?
想看一些代码吗?
这是我的付款class
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"/>
和class:
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();
}
}
我遇到了同样的问题...您的代码看起来不错。 让我们介绍场景:
- 这是正常的...如果用户未登录..微信应用程序将 重定向到登录屏幕
- "Only first time payment passed" 由于包名错误而发生。考虑这些检查:
- 您需要使用 ApplicationId 而不是 packageName
- 空白
- Debug buildType 默认有后缀:
.debug
到 applicatonId - 检查 AppSign,它是您签署的证书的 MD5。注意不要将默认的用于调试 buildType。
- 再次尝试重新分配 ApplicationId 和 AppSign。(这是我们的问题)由于隐藏的 WS 不可见。
- 联系微信团队支持。他们有支付日志。