這幾天一直研究支付寶接口調用,因為當前應用中需要調用支付寶接口作移動支付。
遇到一個問題困擾幾天,就是當我們的手機端未安裝支付寶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;


這樣就可以調通了,應該沒有大問題,因為我還是用插件的方式寫的了,有外層的嵌套,都沒問題。