支付宝沙箱集成
我当时是无法唤起支付宝客户端支付界面,显示服务端订单错误 ALIN10146
这里我是将官方demo复制然后进行更改的,这是需要留下的类
这是主页面代码
/**
* 用于支付宝支付业务的入参 app_id。
*/
//这个需要换成自己的ID
public static final String APPID = "2021000118612472";
//换成对应的私钥
public static final String RSA2_PRIVATE = "MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCbQqXPz2GbFCnPl33lHQSxNc2nmdiV8FOj6jitNv1W2c4LI3j4tEXQZSXUqxjBIrgO1aYosTMPBzyMddBa3AP2FuZzjqpHW/jHoJ07HtJAtHCmLAJi4rsPu0OtZjgNyoOVYHuflGlftdTjW7WeoxO9+r/oS88HaQUqvL4ZgQdKxr4u6Nyf8tGk+ArFEpzhNhF2RsXNpfCP516cTms1/OhUXdDQzuEqhm+kruo9Ou30CDkepftmIn4FrMUNPIm5l+U34IX/wyNSz9gkzEnnJBZlOadypWBX83VphecYVVXfAGAH0MrkuhOH8jVYsGTGOU8BuFmhCciB/LA9u1GUv50tAgMBAAECggEBAJNAJpptCRlXikAEYbaGSwj3ClFGrA+omur/HTnKyYMxlyUhQ349G2mGRNbqXtPt5brMDobRaKd8KYTdx/okaO1g0rgOOpjrNYu/XN/RX39WovA3FRxMBTXqWUl/hPIve5SUqSq0Sywm+/2V4S7PY83un0vlejiA9hGOaI0vvoa/ccfV8sjhRXA43UFg4H4tOGPunu7tnSAVDYZasi6koLlpfIHAaCl469RTI3FfXnRkjsV37ZZoks7u7W1F2mw/AHLLIxV/H38m7Vyhm1H1VoveRrluGsDOSLCGKGn22j2lhnzg9Fv0p1RKnuFGaHEnIuQPpOS7OQzQQkXKTzSdGwECgYEA5DkP2ATfhgrP1Cz1xKura1XDaSZM1rOHsfRYwGPHcSURQy2uZT+uDxNfRGkgqi3+uL7ssixVT17g0RRBv4gZjIHCZhsZgjZeg7lYhPCa7jcN7esKTK/U82232axBNPSwQ5JOUrXfahFbu1N98TMjNqIEukMcvEVER/DDDQsl4H0CgYEArig6eKy4MoFNxPm/0iJGkKOn127e4AtRTUlgqwef6TsFGD3nGEmJhihfJsHagioGp5/uUmi2ZIrQx1NL+nBjU0A6AiuX7nNJhls2YouL5/k7+XxRNB3G7BXfYULlG+epVmP7nn/W6J+NYtMK+JfIiEG1EYB9RrjePK8KiLbSfnECgYEAjdi9dTkKKIi9xZUwJ82/HFZQvyDz7xnkhAFnzCP4COXOBd/1na5no60ZsC5bBArUX8Ui3lbZqxxARRL/Dmkr3/2ics3zG9BpDBv93Zqh4N9NBAvq+eDrTWVrOJpsaNqQV18u2Q97TbR+PD7XbzumbkVjBNXDnWy71K7avFeqcg0CgYB4dvMbDb3LkY1NtsNsgrD0038BkXsw1iNCpoLrSrbeCSkY/5ieQB+UYNCQan7OkmtP/1xGPJANM8f+WCux65OIvmBhp+3LzosJGIah24zGxKsrg0ZYGlDCdM6y5Ca+CpwjWb1ugVcSSWru9LQeCD95oJmypYICLVXr+9f5gRxQwQKBgFKLbYCyvLlbKglqI7t92WPef4YZH6A5cgA5jMI50p2CkQeIXhnU5U9wUoCGkgGcsZcvzSITmox9uK4i5l7tXOs8UUi4AknWn8u4YX2J2biAHQXGlAP8jy2olMF23PPNhKzHcWUguqz7oYqCSdwjrEHtAodgzVnvCGDNCRGyKY6H";
public static final String RSA_PRIVATE = "";
private static final int SDK_PAY_FLAG = 1;
private static final int SDK_AUTH_FLAG = 2;
@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();
// 判断resultStatus 为9000则代表支付成功
if (TextUtils.equals(resultStatus, "9000")) {
// 该笔订单是否真实支付成功,需要依赖服务端的异步通知。
LogUtils.getInstance().log("支付成功");
} else {
// 该笔订单真实的支付结果,需要依赖服务端的异步通知。
LogUtils.getInstance().log("支付失败"+resultInfo);
}
break;
}
default:
break;
}
};
};
public void payV2() {
if (TextUtils.isEmpty(APPID) || (TextUtils.isEmpty(RSA2_PRIVATE) && TextUtils.isEmpty(RSA_PRIVATE))) {
LogUtils.getInstance().log("错误");
return;
}
/*
* 这里只是为了方便直接向商户展示支付宝的整个支付流程;所以Demo中加签过程直接放在客户端完成;
* 真实App里,privateKey等数据严禁放在客户端,加签过程务必要放在服务端完成;
* 防止商户私密数据泄露,造成不必要的资金损失,及面临各种安全风险;
*
* orderInfo 的获取必须来自服务端;
*/
boolean rsa2 = (RSA2_PRIVATE.length() > 0);
Map<String, String> params = OrderInfoUtil2_0.buildOrderParamMap(APPID, rsa2);
String orderParam = OrderInfoUtil2_0.buildOrderParam(params);
String privateKey = rsa2 ? RSA2_PRIVATE : RSA_PRIVATE;
String sign = OrderInfoUtil2_0.getSign(params, privateKey, rsa2);
final String orderInfo = orderParam + "&" + sign;
final Runnable payRunnable = new Runnable() {
@Override
public void run() {
PayTask alipay = new PayTask(LiveStreamActivity.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();
}
我天真的以为这样就完了,结果onCreate没有添加这句话
//打开沙箱环境
EnvUtils.setEnv(EnvUtils.EnvEnum.SANDBOX);
加上之后终于成功了,记录一下,引以为戒