webview頁面中調(diào)用原生支付寶APP支付

網(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ā)資源

    1. 將alipaySdk-xxxxxxxx.jar包放入商戶應(yīng)用工程的libs目錄下。
    2. 將libs目錄下的alipaySDK-xxxxxxxx.jar導(dǎo)入
  • 修改Manifest

    1. 在商戶應(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>
      
    2. 權(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"/>
      
    3. 添加混淆規(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支付

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末寓盗,一起剝皮案震驚了整個濱河市灌砖,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌傀蚌,老刑警劉巖基显,帶你破解...
    沈念sama閱讀 222,865評論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異善炫,居然都是意外死亡撩幽,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,296評論 3 399
  • 文/潘曉璐 我一進(jìn)店門箩艺,熙熙樓的掌柜王于貴愁眉苦臉地迎上來窜醉,“玉大人,你說我怎么就攤上這事舅桩〗椿ⅲ” “怎么了?”我有些...
    開封第一講書人閱讀 169,631評論 0 364
  • 文/不壞的土叔 我叫張陵擂涛,是天一觀的道長读串。 經(jīng)常有香客問我,道長撒妈,這世上最難降的妖魔是什么恢暖? 我笑而不...
    開封第一講書人閱讀 60,199評論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮狰右,結(jié)果婚禮上杰捂,老公的妹妹穿的比我還像新娘。我一直安慰自己棋蚌,他們只是感情好嫁佳,可當(dāng)我...
    茶點故事閱讀 69,196評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著谷暮,像睡著了一般蒿往。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上湿弦,一...
    開封第一講書人閱讀 52,793評論 1 314
  • 那天瓤漏,我揣著相機(jī)與錄音,去河邊找鬼。 笑死蔬充,一個胖子當(dāng)著我的面吹牛蝶俱,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播饥漫,決...
    沈念sama閱讀 41,221評論 3 423
  • 文/蒼蘭香墨 我猛地睜開眼榨呆,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了趾浅?” 一聲冷哼從身側(cè)響起愕提,我...
    開封第一講書人閱讀 40,174評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎皿哨,沒想到半個月后浅侨,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,699評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡证膨,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,770評論 3 343
  • 正文 我和宋清朗相戀三年如输,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片央勒。...
    茶點故事閱讀 40,918評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡不见,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出崔步,到底是詐尸還是另有隱情稳吮,我是刑警寧澤,帶...
    沈念sama閱讀 36,573評論 5 351
  • 正文 年R本政府宣布井濒,位于F島的核電站灶似,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏瑞你。R本人自食惡果不足惜酪惭,卻給世界環(huán)境...
    茶點故事閱讀 42,255評論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望者甲。 院中可真熱鬧春感,春花似錦、人聲如沸虏缸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,749評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽刽辙。三九已至窥岩,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間扫倡,已是汗流浹背谦秧。 一陣腳步聲響...
    開封第一講書人閱讀 33,862評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留撵溃,地道東北人疚鲤。 一個月前我還...
    沈念sama閱讀 49,364評論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像缘挑,于是被迫代替她去往敵國和親集歇。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,926評論 2 361

推薦閱讀更多精彩內(nèi)容