Android 跳转到小程序支付,再返回app的各种问题
开发该功能的时候来到微信开发平台官网,代码短短几行,想起来对接起来应该很简单,然而写完后出现好几个问题,比如 1,白屏,2,如何拿到微信小程序之后返回的数据。再去看看微信开放平台的的常见问题,依然一无所获。就开起来填坑之路:
1:AndroidManifest.xml的配置
在AndroidManifest.xml的WXEntryActivity中加入如下属性:(这里如果不加的话,小程序无法跳转回APP)
android:taskAffinity="your packagename"
android:launchMode="singleTask"
2:WXEntryActivity实现IWXAPIEventHandler接口,且实现onResp方法(小程序支付后返回的数据就在该方法中)
public class WXEntryActivity extends Activity implements IWXAPIEventHandler
@Override
public void onResp(BaseResp baseReq) {
int type = baseReq.getType();
if(type == ConstantsAPI.COMMAND_LAUNCH_WX_MINIPROGRAM){
if(baseReq != null && baseReq instanceof WXLaunchMiniProgram.Resp){
WXLaunchMiniProgram.Resp launchMiniProResp = (WXLaunchMiniProgram.Resp) baseReq;
String extraData =launchMiniProResp.extMsg;
EventBus.getDefault().post(extraData);
LogUtil.i("=====收到小程序返回的数据="+extraData);
}
finish();
overridePendingTransition(0,0);
}
注意:在onResp方法中得到的任何数据后,需要执行finish()
因为从小程序调回app其实是跳转到了页面WXEntryActivity,需要执行finish之后才会跳转到之前跳转小程序的页面(这也就是解决小程序跳转回app白屏问题)
3:在onCreate处理返回值(处理调用异常返回情况)
// IWXAPI 是第三方app和微信通信的openapi接口
private IWXAPI api;
@Override
protected void onCreate(Bundle bundle) {
super.onCreate(bundle);
// 通过WXAPIFactory工厂,获取IWXAPI的实例
api = WXAPIFactory.createWXAPI(this, Constants.APP_ID, false);
//注意:
//第三方开发者如果使用透明界面来实现WXEntryActivity,需要判断handleIntent的返回值,如果返回值为false,则说明入参不合法未被SDK处理,应finish当前透明界面,避免外部通过传递非法参数的Intent导致停留在透明界面,引起用户的疑惑
try {
if (!api.handleIntent(getIntent(), this)) {
finish();
}
} catch (Exception e) {
e.printStackTrace();
}
}
至此app调用小程序支付完成
后续线下反馈,出现小程序多次调起,支付导致订单状态异常问题
问题:app在执行小程序调起的方法后,可能会间隔1秒左右弹出微信小程序页面,这间隔1秒(大致)如果用户多次点击就会出现小程序支付页面多次调起问题
解决方案:因为目前没发现小程序正常调起的回调方法,所以可以加个1秒延迟,既触发调起微信小程序代码,handler写个1秒延迟即可,但是还是没有最终解决问题。
所以还是得后台处理,只要支付成功一次,既成功,状态改变,这个问题也就解决了
原文出处 https://blog.csdn.net/gemgaozhen/article/details/104800353