前段时间接入支付宝sdk在网上找了很多帖子,都不能成功接入支付宝sdk。后面自己研究了下可以成功支付了,发个帖分享一下,方便大家开发,如有错误的地方也请大家指出,谢谢。

开发环境:

unity版本:2019.4.28f1c1

gradle版本 :6.1.1

android sufaceview 直播 android直播sdk 2019_android

*** 本篇文章使用的是aar接入方式,官方不推荐使用jar方式接入了 ***

步骤1:

android studio 新建工程,包名与Unity项目包名一样。

步骤2:

安卓工程新建Module ,  File -> New -> New Module

android sufaceview 直播 android直播sdk 2019_android_02

android sufaceview 直播 android直播sdk 2019_jar_03

步骤3: 

导入对应Unity对应版本的文件,这两个文件路径在Unity安装路径下,可自行百度。

 

android sufaceview 直播 android直播sdk 2019_jar_04

 步骤4:

导入支付宝aar, 本文用的是 alipaysdk-15.8.03.210428205839.aar,这个网上也很多,不要用太久的版本,可以去自行下载。

 

android sufaceview 直播 android直播sdk 2019_jar_05

双击打开新建的Module下的build.gradle(注意是Module下的,不是app下的)添加如下代码,然后Sync 一下项目:

compileOnly fileTree(include: ['*.jar','*.aar'], dir: 'libs')

android sufaceview 直播 android直播sdk 2019_支付宝_06

步骤5:

新建一个MainActivity,代码直接复制粘贴即可(回调)

package 自己的包名.myalipaylib;  // 此处需要修改

import android.os.Bundle;
import android.util.Log;

import com.alipay.sdk.app.PayTask;
import com.unity3d.player.UnityPlayer;

public class MainActivity extends UnityPlayerActivity{

    @Override
    protected void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
    }

    // 支付宝支付
    public  void AliPay(final String orderInfo , String callBackObjectName,String CallBackFuncName)
    {
        Log.i("Unity", " >>> enter alipay native");
        Runnable payRun = new Runnable() {
            @Override
            public void run() {
                PayTask task=new PayTask(MainActivity.this);
                String result= task.pay(orderInfo, true);
                Log.i("Unity", "onALIPayFinish, result = " + result);
                // 这里可以自己添加Unity回调接收
                UnityPlayer.UnitySendMessage(callBackObjectName, CallBackFuncName, result); 
            }
        };
        Thread payThread = new Thread(payRun);
        payThread.start();
    }
}

android sufaceview 直播 android直播sdk 2019_android studio_07

C#端代码 

/// <summary>    ///  原生调用支付宝支付    /// </summary>
    /// <param name="orderInfo"></param>
    void ShowALiPay(string orderInfo)
    {
        Debug.Log("服务器返回 >>>> " + orderInfo);  // 此处是后端返回的订单信息
#if UNITY_ANDROID 
        AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
        AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");
        jo.Call("AliPay", orderInfo, "Panel_Pay", "ALiPayResult");
#endif
    }


    /// <summary>
    ///  支付宝 支付回调
    /// </summary>
    /// <param name="result"></param>
    public void ALiPayResult(string result)
    {
        Debug.Log(" unity 获取支付宝回调>>>> " + result);
    }

步骤6:

完成以上步骤后,Sync一下安卓工程,等待Sync成功后,点击右侧Gradle,在点击build

android sufaceview 直播 android直播sdk 2019_android_08

等待build完成后 ,此路径会出现aar

android sufaceview 直播 android直播sdk 2019_jar_09

步骤7:(有更新,请阅读完此步骤再操作)

文件管理器打开aar路径,修改后缀为zip,双击打开

android sufaceview 直播 android直播sdk 2019_jar_10

再双击打开classes.jar,找到里面有个文件Build.class 删除掉,然后保存,再将zip后缀改回aar

android sufaceview 直播 android直播sdk 2019_jar_11

**************** 更新步骤7****************** 

上面的步骤太麻烦 ,现在优化一下

在新建的模块下的build.gradle加入一下代码 ,  打包出来的aar就不会包含BuildConfig文件

android{
    .......
    .......

buildFeatures{
    buildConfig = false
}
    ........
}

步骤8:

将支付宝aar和上面修改好的aar一并导入Unity工程的Plugins文件夹,发布apk真机运行即可。

 

android sufaceview 直播 android直播sdk 2019_jar_12

**********重要补充:

勾选自定义Main Manifest

android sufaceview 直播 android直播sdk 2019_支付宝_13

Plugins文件夹会出一个AndroidManifest.xml文件,添加以下内容:

android sufaceview 直播 android直播sdk 2019_android_14