網(wǎng)上方案舞箍,經(jīng)測試可行
//啟動支付寶,并跳轉(zhuǎn)到付款頁面
if (url.contains("platformapi/startapp")) {
startAlipayActivity(url);
}
private void startAlipayActivity(String url) {
Intent intent;
try {
intent = Intent.parseUri(url,
Intent.URI_INTENT_SCHEME);
intent.addCategory(Intent.CATEGORY_BROWSABLE);
intent.setComponent(null);
startActivity(intent);
LogUtils.d("alipay", "start intent = " + intent.toString());
} catch (Exception e) {
e.printStackTrace();
LogUtils.d("alipay", "error " + e.getMessage());
}
}
詳情看這個作者 http://www.reibang.com/p/e335333574a8
該方案通過攔截支付寶支付uri的方式役听,調(diào)用支付寶app付款草丧。但是有一個問題涩澡,支付完成之后沒有回調(diào)智蝠,你不知道什么時候成功咕娄,完成之后停留在之前頁面亥揖,體驗有點差。通過https://open.alipay.com/support/supportCenter.htm 支付寶技術(shù)客服提供的方案圣勒,不得不說费变,阿里的技術(shù)客服還是很到位的,比微信文檔和技術(shù)客服友好太多圣贸,為支付寶點贊~
好了挚歧,以下是具體步驟:
下載Demo
http://p.tb.cn/rmsportal_6680_WS_APP_PAY_SDK_BASE_2.0.zip-
導(dǎo)入開發(fā)資源
- 將alipaySdk-xxxxxxxx.jar包放入商戶應(yīng)用工程的libs目錄下。
- 將libs目錄下的alipaySDK-xxxxxxxx.jar導(dǎo)入
-
修改Manifest
-
在商戶應(yīng)用工程的AndroidManifest.xml文件里面添加聲明:
<activity android:name="com.alipay.sdk.app.H5PayActivity" android:configChanges="orientation|keyboardHidden|navigation" android:exported="false" android:screenOrientation="behind" > </activity> <activity android:name="com.alipay.sdk.auth.AuthActivity" android:configChanges="orientation|keyboardHidden|navigation" android:exported="false" android:screenOrientation="behind" > </activity>
-
權(quán)限聲明:
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
-
添加混淆規(guī)則
-keep class com.alipay.android.app.IAlixPay{*;} -keep class com.alipay.android.app.IAlixPay$Stub{*;} -keep class com.alipay.android.app.IRemoteServiceCallback{*;} -keep class com.alipay.android.app.IRemoteServiceCallback$Stub{*;} -keep class com.alipay.sdk.app.PayTask{ public *;} -keep class com.alipay.sdk.app.AuthTask{ public *;} -keep class com.alipay.sdk.app.H5PayCallback { <fields>; <methods>; } -keep class com.alipay.android.phone.mrpc.core.** { *; } -keep class com.alipay.apmobilesecuritysdk.** { *; } -keep class com.alipay.mobile.framework.service.annotation.** { *; } -keep class com.alipay.mobilesecuritysdk.face.** { *; } -keep class com.alipay.tscenter.biz.rpc.** { *; } -keep class org.json.alipay.** { *; } -keep class com.alipay.tscenter.** { *; } -keep class com.ta.utdid2.** { *;} -keep class com.ut.device.** { *;}
-
至此吁峻,開發(fā)包開發(fā)資源導(dǎo)入完成滑负。
如何實現(xiàn)手機(jī)網(wǎng)站轉(zhuǎn)Native支付?
步驟一: 在接入方App中攔截H5的URL用含;
步驟二: 調(diào)用新增攔截+支付二合一接口(payInterceptorWithUrl...)進(jìn)行URL攔截及支付轉(zhuǎn)化矮慕;具體參照如下接口說明。
具體代碼
mWebView.setWebViewClient(new android.webkit.WebViewClient() {
public boolean shouldOverrideUrlLoading(final WebView view, String url) {
if (!(url.startsWith("http") || url.startsWith("https"))) {
return true;
}
/**
* 推薦采用的新的二合一接口(payInterceptorWithUrl),只需調(diào)用一次
*/
final PayTask task = new PayTask(CommonWebActivity.this);
/**
* 支付寶H5支付URL攔截器啄骇,完成攔截及支付方式轉(zhuǎn)化
* 本接口首先是個攔截器痴鳄,攔截支付寶H5支付URL;其次是個支付方式轉(zhuǎn)化器肠缔,將手機(jī)網(wǎng)站支付方式轉(zhuǎn)化為APP支付方式。
*
* @param h5PayUrl 待過濾攔截的 URL 手機(jī)網(wǎng)站支付的請求URL
* @param isShowPayLoading 是否出現(xiàn)loading
* @param callback 異步回調(diào)接口
*/
/**
* 返回值
* 1. 如果h5PayUrl是有效的支付寶H5支付URL哼转,則說明攔截轉(zhuǎn)化成功明未,返回ture,商戶容器無需再加載該URL壹蔓;
* 2. 如果是無效的趟妥,則返回false,商戶容器需要繼續(xù)加載該URL佣蓉。
*/
boolean isIntercepted = task.payInterceptorWithUrl(url, true, new H5PayCallback() {
@Override
public void onPayResult(final H5PayResultModel result) {
final String url = result.getReturnUrl();
String resultCode = result.getResultCode();
if (!TextUtils.isEmpty(url)) {
CommonWebActivity.this.runOnUiThread(new Runnable() {
@Override
public void run() {
view.loadUrl(url);
}
});
}
//這里返回支付結(jié)果披摄,根據(jù)resultCode 回調(diào) 返回碼 做不同處理
if (TextUtils.equals(resultCode, "9000")) {
ToastUtils.showToast("支付成功");
startActivity(FreeOrderActivity.class, true); //跳轉(zhuǎn)支付成功頁面
}
}
});
/**
* 判斷是否成功攔截
* 若成功攔截亲雪,則無需繼續(xù)加載該URL;否則繼續(xù)加載
*/
if (!isIntercepted)
view.loadUrl(url);
return true;
}
});
以上方案基于支付寶最新支付SDK疚膊,alipaySdk-20170725义辕,詳細(xì)請查看支付寶文檔,真的很清晰~ 手機(jī)網(wǎng)站支付轉(zhuǎn)Native支付