天天看點

支付寶APP支付內建文檔一、開發前提二、伺服器配置三、Android端配置

一、開發前提

适用于商家在App應用中內建支付寶支付功能。商家APP調用支付寶提供的SDK調用支付寶用戶端内的支付子產品,商家APP會跳轉到支付寶中完成支付,支付完後跳回到商家APP内,最後展示支付結果。

本文檔旨在指導開發者快速內建支付寶APP支付,包括開簽約APP支付、伺服器配置以及安卓端配置。

1、簽約APP支付

APP要想接入支付寶支付功能需要簽約支付寶的

APP支付

,簽約要符合申請的條件,根據操作提示完成申請,等待稽核通過即可

簽約連結:https://b.alipay.com/signing/productScene.htm?sceneId=wysk&navKey=wysk

如圖:

支付寶APP支付內建文檔一、開發前提二、伺服器配置三、Android端配置
支付寶APP支付內建文檔一、開發前提二、伺服器配置三、Android端配置

2、建立應用并擷取APPID

然後建立應用,建立成功後即可擷取到APPID

建立應用位址:https://openhome.alipay.com/platform/appCreate.htm

如圖:

支付寶APP支付內建文檔一、開發前提二、伺服器配置三、Android端配置
支付寶APP支付內建文檔一、開發前提二、伺服器配置三、Android端配置

3、添加功能

建立應用之後,還有給應用添加

APP支付功能

如圖:

支付寶APP支付內建文檔一、開發前提二、伺服器配置三、Android端配置

勾選APP支付,确定即可

支付寶APP支付內建文檔一、開發前提二、伺服器配置三、Android端配置

4、上線應用

根據提示送出稽核,等待稽核通過即可,注意:測試APP支付必須上線應用,因為沙箱測試不能測試APP支付,可能出現

ALI40247錯誤

,見連結:

https://openclub.alipay.com/read.php?tid=250&fid=2

https://support.open.alipay.com/support/hotProblemDetail.htm?spm=a219a.7386797.0.0.BZfVkv&id=259972

點選上線,按照提示完成操作即可,如圖:

支付寶APP支付內建文檔一、開發前提二、伺服器配置三、Android端配置

5、配置密鑰

參考連結:https://doc.open.alipay.com/doc2/detail.htm?treeId=200&articleId=105310&docType=1

點選這裡下載下傳一鍵生成RSA密鑰工具

生成之後,Java開發找到

pkcs8

格式的私鑰簽名,去除頭尾、換行和空格,作為開發者私鑰

支付寶APP支付內建文檔一、開發前提二、伺服器配置三、Android端配置

将公鑰去除頭尾、換行和空格,填入如圖所示的地方

支付寶APP支付內建文檔一、開發前提二、伺服器配置三、Android端配置

填寫之後,可以驗證公鑰的正确性, 根據圖示操作即可:

支付寶APP支付內建文檔一、開發前提二、伺服器配置三、Android端配置

6、了解業務流程

支付寶APP支付內建文檔一、開發前提二、伺服器配置三、Android端配置

二、伺服器配置

參考文檔:https://doc.open.alipay.com/doc2/detail?treeId=54&articleId=103419&docType=1

1、下載下傳SDK

伺服器SDK有不同的開發語言版本,下載下傳相應的版本,如圖:

支付寶APP支付內建文檔一、開發前提二、伺服器配置三、Android端配置

2、引入jar包

下面以java為例

內建支付寶接口需要引入的檔案是:

alipay-sdk-java*.jar

commons-logging-1.1.1.jar

若進一步了解代碼實作請引入檔案:

alipay-sdk-java*-source.jar

commons-logging-1.1.1-sources.jar

3、調用示例

傳入伺服器建立訂單所需參數參考文檔:

https://doc.open.alipay.com/docs/doc.htm?spm=a219a.7629140.0.0.Q48Wtz&treeId=193&articleId=105465&docType=1

參考事例代碼:

//執行個體化用戶端
AlipayClient client = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do",APP_ID,APP_PRIVATE_KEY,"json","GBK",ALIPAY_PUBLIC_KEY);
//執行個體化具體API對應的request類,類名稱和接口名稱對應,目前調用接口名稱:alipay.trade.app.pay 
AlipayTradeAppPayRequest request = new AlipayTradeAppPayRequest();
//SDK已經封裝掉了公共參數,這裡隻需要傳入業務參數
//此次隻是參數展示,未進行字元串轉義,實際情況下請轉義
request.setBizContent("  {
     "primary_industry_name":"IT科技/IT軟體與服務",
     "primary_industry_code":"/",
     "secondary_industry_code":"/",
     "secondary_industry_name":"IT科技/IT軟體與服務"
  }
");
AlipayTradeAppPayResponse response = client.execute(request); 
//調用成功,則處理業務邏輯
if(response.isSuccess()){
      //.....
}
           

三、Android端配置

參考文檔:https://doc.open.alipay.com/docs/doc.htm?spm=a219a.7629140.0.0.rSXklx&treeId=193&articleId=105296&docType=1

1、下載下傳SDK并導入

下載下傳位址:https://doc.open.alipay.com/doc2/detail.htm?treeId=54&articleId=104509&docType=1

下載下傳後導入工程中

2、注冊Activity并添權重限

<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>

<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、添加混淆規則

-libraryjars libs/alipaySDK-jar
-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 *;}
           

4、調用支付接口

需要在新線程中調用支付接口(可參考alipay_demo實作)

擷取

PayTask

支付對象調用支付(支付行為需要在獨立的非ui線程中執行),代碼示例:

final String orderInfo = info;   // 訂單資訊
Runnable payRunnable = new Runnable() {
    @Override
    public void run() {
        PayTask alipay = new PayTask(DemoActivity.this);
        String result = alipay.payV2(orderInfo,true);
        Message msg = new Message();
        msg.what = SDK_PAY_FLAG;
        msg.obj = result;
        mHandler.sendMessage(msg);
    }
};
 // 必須異步調用
Thread payThread = new Thread(payRunnable);
payThread.start();
           

5、支付結果擷取和處理

(1)、同步傳回

商戶應用用戶端通過目前調用支付的Activity的Handler對象,通過它的回調函數擷取支付結果。(可參考alipay_demo實作)

private Handler mHandler = new Handler() {
    public void handleMessage(Message msg) {
        Result result = new Result((String) msg.obj);
        Toast.makeText(DemoActivity.this, result.getResult(), Toast.LENGTH_LONG).show();
    };
};
           

(2)、異步通知

商戶需要提供一個http協定的接口,包含在請求支付的入參中,其key對應notify_url。

支付寶伺服器在支付完成後,會以POST方式調用notify_url傳輸資料。