调用支付宝接口Android客户端没有支付宝APP的情况下解决无法调用支付宝页面的问题

这几天一直研究支付宝接口调用,因为当前应用中需要调用支付宝接口作移动支付。

遇到一个问题困扰几天,就是当我们的手机端未安装支付宝APP的时候,需要在自己应用中调用支付宝的登陆网页进行支付。我是Android开发,网上有很多小伙伴都遇到了无法调起网页支付宝登陆页面的问题,在此给大家分享一个解决方案,希望能帮助遇到同样问题困扰的小伙伴。

网上也有很多贴,都是说要加入H5PayActivity和AuthActivity的配置来解决,但是并不起作用,我的就是,虽然有跳转的动作,但是直接一个白板页面招呼,就没有然后了。

支付宝技术文档中其实有写,那就是需要将调用支付宝支付那一段代码单独放在一个线程里进行调用,如下:

final String payInfo=args.getString(0);
Runnable payRunnable = new Runnable() {
@Override
public void run() {
PayTask alipay = new PayTask(activity);
String result = null;
// 调用支付接口,获取支付结果
result = alipay.pay(payInfo, true);
Message msg = new Message();
msg.what = SDK_PAY_FLAG;
msg.obj = result;
new Handler() {
@SuppressWarnings("unused")
public void handleMessage(Message msg) {
switch (msg.what) {
case SDK_PAY_FLAG: {
PayResult payResult = new PayResult((String) msg.obj);
/**
* 同步返回的结果必须放置到服务端进行验证(验证的规则请看https://doc.open.alipay.com/doc2/
* detail.htm?spm=0.0.0.0.xdvAU6&treeId=59&articleId=103665&
* docType=1) 建议商户依赖异步通知
*/
String resultInfo = payResult.getResult();// 同步返回需要验证的信息

String resultStatus = payResult.getResultStatus();
// 判断resultStatus 为“9000”则代表支付成功,具体状态码代表含义可参考接口文档
if (TextUtils.equals(resultStatus, "9000")) {
Toast.makeText(activity, "支付成功", Toast.LENGTH_SHORT).show();
PluginResult pluginResult=new PluginResult(PluginResult.Status.OK,"支付成功");
pluginResult.setKeepCallback(true);
callbackContext.sendPluginResult(pluginResult);
} else {
// 判断resultStatus 为非"9000"则代表可能支付失败
// "8000"代表支付结果因为支付渠道原因或者系统原因还在等待支付结果确认,最终交易是否成功以服务端异步通知为准(小概率状态)
if (TextUtils.equals(resultStatus, "8000")) {
Toast.makeText(activity, "支付结果确认中", Toast.LENGTH_SHORT).show();

} else {
// 其他值就可以判断为支付失败,包括用户主动取消支付,或者系统返回的错误
Toast.makeText(activity, "支付失败", Toast.LENGTH_SHORT).show();

}
}
break;
}
default:
break;
}
};
}.sendMessage(msg);
}
};
// 必须异步调用
Thread payThread = new Thread(payRunnable);
payThread.start();
            return true;

这样就可以调通了,应该没有大问题,因为我还是用插件的方式写的了,有外层的嵌套,都没问题。

时间: 2024-10-12 18:21:53

调用支付宝接口Android客户端没有支付宝APP的情况下解决无法调用支付宝页面的问题的相关文章

android客户端应用(native app)适配测试自动化 东海陈光剑 2014年5月5日 0:39:04

未命名 android客户端应用(native app)适配测试自动化 东海陈光剑 2014年5月5日 0:39:04 http://10.125.1.58:88/report.html?run_stamp=20140428054354&min=3&sec=214 <!doctype html><html><head>    <meta charset="UTF-8">    <title>适配测试报告<

一次http请求,谁会先断开TCP连接?什么情况下客户端先断,什么情况下服务端先断?

我们有2台内部http服务(nginx): 201:这台服务器部署的服务是account.api.91160.com,这个服务是供前端页面调用: 202:这台服务器部署的服务是hdbs.api.91160.com,    这个服务是供前端页面调用: 近期发现,这2台服务器的网络连接中,TIME_WAIT 数量差别很大,201的TIME_WAIT大概20000+,202的TIME_WAIT大概1000 ,差距20倍:2台的请求量差不多,都是以上内部调用的连接,且服务模式也没有什么差异,为什么连接数

layoutSubviews在以下情况下会被调用

1.init初始化不会触发layoutSubviews2.addSubview会触发layoutSubviews3.设置view的Frame会触发layoutSubviews,当然前提是frame的值设置前后发生了变化4.滚动一个UIScrollView会触发layoutSubviews5.旋转Screen会触发父UIView上的layoutSubviews事件6.改变一个UIView大小的时候也会触发父UIView上的layoutSubviews事件 7.直接调用setLayoutSubvie

classes could not be found: - android.support.v7.internal.app.WindowDecorActionBar问题的解决方法

转载至----http://my.oschina.net/u/2425146/blog/546649?fromerr=aDYrFDVx.仅作个人收藏使用,有转载的朋友请连续原作者,谢谢 刚刚进入studio 的小伙伴们遇到很多问题吧,这个是我曾经遇到的问题,希望能帮助大家,如果觉的有帮助您记得给个赞哦 Rendering Problems The following classes could not be found: - android.support.v7.internal.app.Win

iOS 手机没有安装支付宝的情况下,不调支付宝网页的解决的方法

NSArray *array = [[UIApplication sharedApplication] windows]; UIWindow* win=[array objectAtIndex:0]; [win setHidden:NO]; 在调用支付宝payOrder 之前,写上上面三行代码就可以,可是写这又一个坏处.就是会把viewcontroller的全部逻辑都走一遍的,另一个方法.就是找到info.plistMain storyboard file base name删除就能够了.

android 设备在设置节能模式的情况下 调用 Toast 会 唤醒屏幕 突然变亮

最近在开发中遇到题目所说的问题 特此记录一下 首先,设备设置从不休眠,设置节能模式为15秒(即:15秒后设备亮度变暗) 然后,进入我们开发的应用,在我们开发的应用中会定时执行某项上传任务,当网络未连接时,会提示用户 "网络未连接,请检查网络" 如果用 Toast.makeText(NetWorkErrorActivity.this, "网络未连接,请检查网络",Toast.LENGTH_SHORT).show(); 这样提示的话 会唤醒屏幕  ,因为会定时执行任务,

android在开启飞行模式的情况下,禁止打开蓝牙

(1)将alps/framework/base/packages/settingsprovider/res/values/defaults.xml里 面airplane_mode_toggleable_radios标签中的"bluetooth"去掉. (2)在packages/apps/settings/src/android/settings/bluetoothangel/BluetoothEnabler.java这支文件里进行如下修改: 1.import 如下两个包: import

Android 读写权限,已经授权情况下,仍然(Permission denied)

首次安装APP,获取读写权限以后, 当读取文件时候,仍然会遇见(Permission denied)错误,解决方案是杀掉APP,重新打开APP即可. 应该属于部分版本系统的bug,直到APP所有的processes被killed,操作系统才会更新设置里面的权限设置,解决方案 代码判断是否授权成功的状态以后再捕获读取文件抛的异常(Permission denied),然后重启APP即可. 原文地址:https://www.cnblogs.com/spring87/p/9570270.html

layoutSubviews在以下情况下会被调用:

1.init初始化不会触发layoutSubviews2.addSubview会触发layoutSubviews3.设置view的Frame会触发layoutSubviews,当然前提是frame的值设置前后发生了变化4.滚动一个UIScrollView会触发layoutSubviews5.旋转Screen会触发父UIView上的layoutSubviews事件6.改变一个UIView大小的时候也会触发父UIView上的layoutSubviews事件