首先下载支付宝jar放到libs下
然后androidstudio代码
public void Pay(
final String orderInfo)
{
Runnable payRunnable =
new Runnable() {
@Override
public void run() {
PayTask alipay =
new PayTask(MainActivity.
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);
}
};
Thread payThread =
new Thread(payRunnable);
payThread.start();
}
@SuppressLint(
"HandlerLeak")
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();
UnityPlayer.UnitySendMessage(
"Canvas",
"AliPayCallback", resultStatus);
if (TextUtils.equals(resultStatus, RESULT_SUCCESS))
{
Toast.makeText(MainActivity.
this, TIP_PAY_SUCCESS, Toast.LENGTH_SHORT).show();
}
else
{
Toast.makeText(MainActivity.
this, TIP_PAY_FAILED, Toast.LENGTH_SHORT).show();
}
break;
}
default:
break;
}
};
}
然后在xml里添加
<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" />
<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>
添加混淆规则
应用工程的proguard-rules.pro里添加以下相关规则:
-libraryjars libs/alipaySdk-
20170922.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 *
-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.** { *
最后unity里调用
public IEnumerator
AliPay(PayInfo payInfo)
{
Dictionary<
string,
string> headdress =
new Dictionary<
string,
string>
{
{
"Cookie", PlayerPrefs.GetString(SaveUserInfoOnPrefas.UserCookiePHPSESSID) }
};
string data =
"";
byte[] bs = System.Text.Encoding.UTF8.GetBytes(data);
WWW www =
new WWW(StaticData.APICheckRecepitIsValid, bs, headdress);
yield return www;
if (www.error !=
null)
{
Debug.Log(www.error);
}
else
{
var userOrder = JsonMapper.ToObject(www.text);
if (userOrder[
"errno"].ToString() ==
"0")
{
string orderInfo = userOrder[
"result"][
"data"].ToString();
#if UNITY_ANDROID && !UNITY_EDITOR
AndroidJavaClass javaClass =
new AndroidJavaClass(
"com.unity3d.player.UnityPlayer");
currentActivity = javaClass.GetStatic<AndroidJavaObject>(
"currentActivity");
#endif
currentActivity.Call(
"Pay", orderInfo);
}
else
{
}
}
}
如果不在android里处理弹窗,可以放到unity里
AndroidJavaClass PayResult =
new AndroidJavaClass(
"android.widget.Toast");
PayResult.CallStatic<AndroidJavaObject>(
"makeText", currentActivity,
"支付成功或失败",
0).
Call(
"show");