DOCS

      SDK integration process

      #Import development resource

      For JAR SDK v15.5.5:

      1. Import AlipaySDK-(Date).jar into libs folder in the merchant project, as shown in the figure below.
      2. Go to the project's Java Build Path and import alipaySDK-(Date).jar under libs.
      3. Select Order and Export, and check alipaySDK-(Date).jar

      • Migrate from JAR SDK to AAR SDK (from v15.5.5 to v15.6.8):
        If you have already imported the .jar package, complete following steps: 

      1、Remove the dependency on the Alipay SDK JAR package in the build.gradle file of the App Module (not the entire project).

      dependencies {
      //annotationProcessor 'com.android.databinding:compiler:3.2.0'
      // 支付宝SDK AAR 包所需的配置
      implementation(name: 'alipaySdk-15.7.4-20200228192259', ext: 'aar')
      //implementation(name: 'alipaySdk-15.6.8-20191021122514', ext: 'aar')
      implementation'com.android.support:support-v4:25.3.1'
      implementation'com.android.support:appcompat-v7:25.3.1'
      
      }


      2、Delete the old alipaySdk-xxx.jar file from the libs directory. 

      SDK integration process


      3、Remove the registration for the following activities from AndroidManifest.xml (no need to manually register if using AAR):

      <!-- Remove the following content -->  
      <activity     
             android:name="com.alipay.sdk.app.H5PayActivity"     
             android:configChanges="orientation|keyboardHidden|navigation|screenSize"     
             android:exported="false"     
             android:screenOrientation="behind"     
             android:windowSoftInputMode="adjustResize|stateHidden" >  
      </activity>  
      <activity     
             android:name="com.alipay.sdk.app.H5AuthActivity"     
             android:configChanges="orientation|keyboardHidden|navigation"     
             android:exported="false"     
             android:screenOrientation="behind"     
             android:windowSoftInputMode="adjustResize|stateHidden" >  
      </activity>  
      <!-- Remove the above content -->

      For AAR SDK v15.6.8: You can view Demo for reference.
      1、Place the alipaySdk-15.6.8-20191021122514.aar package in the libs directory of your application project.


      2、In the build.gradle of your main project, add the following content to make the libs directory a dependent repository: 
      SDK integration process

      allprojects {
           repositories {
               // 支付宝 SDK AAR 包所需的配置
               flatDir {             dirs 'libs'         }         jcenter()
               maven { url "https://maven.google.com"}
           }
       }


      3、In the build.gradle of your App Module, add the following to the Alipay SDK as a project dependency:

      SDK integration process


      dependencies {
      //annotationProcessor 'com.android.databinding:compiler:3.2.0'
      // 支付宝SDK AAR 包所需的配置
      implementation(name: 'alipaySdk-15.7.4-20200228192259', ext: 'aar')
      //implementation(name: 'alipaySdk-15.6.8-20191021122514', ext: 'aar')
      implementation'com.android.support:support-v4:25.3.1'
      implementation'com.android.support:appcompat-v7:25.3.1'
      
      }


      Now, the SDK import is completed.

      #Modify manifest

      Add the following declaration into file AndroidManifest.xml in the project:

      <activity
          android:name="com.alipay.sdk.pay.demo.PayDemoActivity"
          android:icon="@drawable/msp_icon"
          android:label="@string/app_name" >
          <intent-filter>
              <action android:name="android.intent.action.MAIN" />
      
              <category android:name="android.intent.category.LAUNCHER" />
          </intent-filter>
      </activity>
      <activity
          android:name="com.alipay.sdk.pay.demo.H5PayDemoActivity"
          android:configChanges="orientation|keyboardHidden|navigation"
          android:exported="false"
          android:screenOrientation="behind" >
      </activity>

      And privilege declaration:

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

      #Add confusing rules

      Add relevant rules below into proguard-project.txt of seller's project:

      -keep public class * extends android.app.Activity
      -keep public class * extends android.app.Application
      -keep public class * extends android.app.Service
      -keep public class * extends android.content.BroadcastReceiver
      -keep public class * extends android.content.ContentProvider
      -keep public class * extends java.lang.Throwable {*;}
      -keep public class * extends java.lang.Exception {*;}
      
      -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>;
      }

      This step completes importing of SDK development resource.

      #Construct order data

      Order information is required when calling SDK to pay. All parameters is displayed in the format of key="value", connected with &.

      #Call payment API

      Payment API needs to be called in new thread. (Reference alipay_demo)
      It is required to call the payment API in a new thread. (Reference alipay_demo)
      Get PayTask payment object to pay (pay or authorize activity needs to be executed in non-ui thread), code demo:

          final String orderInfo = OrderUtils1_0_Global.getSignedOrderInfo("test_subject", "test_body", "0.01");//order information
         final Runnable payRunnable = new Runnable() {
      
            @Override
            public void run() {
               PayTask alipay = new PayTask(PayDemoActivity.this);
               Map<String, String> result = alipay.payV2(orderInfo, true);
               Log.i("msp", result.toString());
      
               Message msg = new Message();
               msg.what = SDK_PAY_FLAG;
               msg.obj = result;
               mHandler.sendMessage(msg);
            }
         };
      
         // must call asynchronously 
         Thread payThread = new Thread(payRunnable);
         payThread.start();
      }

      #Payment result handling

      After payment, there are 2 ways to get the result:


      #Synchronize responses

      Merchant app client calls the payment Activity's handler object and get the payment result using the callback function.(Reference alipay_demo)
      Demo code:


      private Handler mHandler = new Handler() {
         @SuppressWarnings("unused")
         public void handleMessage(Message msg) {
            switch (msg.what) {
            case SDK_PAY_FLAG: {
               @SuppressWarnings("unchecked")
               PayResult payResult = new PayResult((Map<String, String>) msg.obj);
               String resultInfo = payResult.getResult();
               String resultStatus = payResult.getResultStatus();
               if (TextUtils.equals(resultStatus, "9000")) {
                  showAlert(PayDemoActivity.this, getString(R.string.pay_success) + payResult);
               } else {
                  showAlert(PayDemoActivity.this, getString(R.string.pay_failed) + payResult);
               }
               break;
            }
            case SDK_AUTH_FLAG: {
               @SuppressWarnings("unchecked")
               AuthResult authResult = new AuthResult((Map<String, String>) msg.obj, true);
               String resultStatus = authResult.getResultStatus();
      
               if (TextUtils.equals(resultStatus, "9000") && TextUtils.equals(authResult.getResultCode(), "200")) {
                  showAlert(PayDemoActivity.this, getString(R.string.auth_success) + authResult);
               } else {
                  showAlert(PayDemoActivity.this, getString(R.string.auth_failed) + authResult);
               }
               break;
            }
            default:
               break;
            }
         };
      };


      #Async notification

      Merchant needs to provide an http protocol interface, put in parameter notify_url and pass to the payment request. After payment is completed, Alipay server will call notify_url using POST method, the data is transferred in xml format.

      #Get the SDK version

      Call object PayTask's getVersion() method. Demo code:

      PayTask payTask = new PayTask(activity);String version = payTask.getVersion();