【发布时间】:2017-11-21 22:15:46
【问题描述】:
我正在尝试在我们的应用中实现微信应用内支付。但我们正在努力让它发挥作用。
我会尽量快速总结一下。
- 如果用户没有登录,微信登录界面每次都会出现。
- 假设用户已登录,当点击支付按钮第一次时,微信订单信息屏幕显示,但点击返回,然后点击支付按钮再次(在我们的应用中),微信屏幕不显示。
我们确实实现了WXPayEntryActivity,但没有调用onCreate、onNewIntent 和onResp。是的,这个活动正在发送广播,但没有显示 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();
}
}
【问题讨论】: