Conéctese al SDK de pagos de Alipay
Acceso al SDK de pago de Alipay
Se puede decir que el acceso de pago de Alipay es el mejor acceso a todos los SDK, sin excepción.
El cliente no necesita firmar, ni preocuparse por el nombre del paquete, ni necesita preocuparse por el archivo de firma. Simplemente devuelve la orden a través de la interfaz y le da la orden. El SDK de Alipay para realizar llamadas se le devolverá en la interfaz actual. Vas a la interfaz de notificaciones nuevamente.
Diagrama de flujo de pagos
Dirección del documento oficial
! Dirección del documento oficial de pago de Alipay
Siga las instrucciones del documento para acceder al SDK y las configuraciones relacionadas, que no se repetirán aquí
Código de clave de pago del cliente ===》Llamada a la interfaz de pago (llamar (Iniciar el cuadro emergente de pago)
Recuerde que la llamada a la interfaz de pago debe ejecutarse en un hilo independiente que no sea ui, es decir, debe llamarse en un nuevo hilo. Puede utilizar el nuevo método Thread como en la demostración oficial.
A continuación daré un código de muestra usando el método Observable
En PayUtils
/**
*desc: Pago Alipay p>
* Creado por conge el 27/8/2018 17:20
* @param orderInfo El pedido devuelto por la interfaz
**/
public static void aliPay(actividad de actividad final, OrderInfo de cadena final, OrderListener final orderListener) {
Observable.just(orderInfo)
.map(new Function () { p>
@Override
public String apply(String orderInfo) lanza una excepción {
//Cuando el usuario hace clic para pagar dentro de la aplicación comercial, ¿se requiere una carga antes? ¿Se activa la billetera? Transición, este valor se establece en verdadero
return new PayTask(activity).pay(orderInfo, true);
}
} )
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Consumer () { p>
@ Override
public void aceptar(String payResult) lanza una excepción {
orderListener.onPayResult(payResult);
}
});
}
Procesamiento de devolución de resultados de pago
Ejemplo de devolución:
resultStatus={9000};memo= {};result={ {"alipay_trade_app_pay_response":{"code":"10000","msg":"Éxito","app_id":"2016091300503896","auth_app_id":"2016091300503896","charset":"utf -8","timestamp ":"2018-08-28 17:51:11","out_trade_no":"nVElbd74TW6WnEyxQwvX8A","total_amount":"0.01","trade_no":"2018082821001004680500208879","seller_id":" 208810217 5487650"},"signo ":"W0Hg9k4GxL8Oaxymvqk2i65WNDQxYp6HGve32ek6VjSRnymmI3GQTjpQVbZuDzvjcwQ/HIkM97PoBGAVlTmi/wiJcqDgSSDzDY7AFnNN0OcK0ehWGwK QINA4IDGh51A7yY/vYKmR0VW+2 OwGhlRPPMMZtQOEqh8a9/aIijzT6ZLwy9Hl4ayG/fVKhdC1VdckF6+C25BFNp3fIxarg5tfEunm7N9iWngKCUsnP+IZz05OHdvynimgYPcBnbBERH
G97GVqRT/EdBWTQyIDMc0LemScAYxJixTVgXDkRddQjzWZ7HgLdBfjs0nXY24puHudT76ERxVY+8NkoKle/QI+FA==","sign_type":"RSA2"}}
También puedes iniciar sesión tú mismo
Procesando código de muestra:
//Pago Alipay
PayUtils.aliPay(this, result.getSignDataStr(), new PayUtils.OrderListener() {
@Override
public void onPayResult(String payResult) {
PayResult pr = new PayResult(payResult);
String rs = pr.getResultStatus();
String r = pr .getResult();
cambiar (rs) {
caso AliPayResultStatus.PAY_SUCCESS:
ToastUtils.show(R.string.pay_success);
p>//Notificar a la interfaz que el pago se realizó correctamente
interrupción;
caso AlipayResultStatus.PAY_PROCESSING:
caso AlipayResultStatus.PAY_UNKNOWN:
ToastUtils.show(R.string.pay_fail);
//El pago puede realizarse correctamente, utilice la interfaz para consultar
break;
default:
ToastUtils.show(R.string.pay_fail);
//Notifica a la interfaz que el pago falló y el pedido fue cancelado
}
}
});
En el método anterior:
//Notificar a la interfaz que el pago se realizó correctamente//El el pago puede ser exitoso, debe consultar la interfaz // Notificar a la interfaz que el pago falló y cancelar el pedido. Si debe notificarle las operaciones realizadas por el servidor de acuerdo con los requisitos de su producto.
Normalmente requerido, se utiliza para cambiar el estado del pedido
PayResult.class
public class PayResult {
private String resultStatus;
resultado de cadena privada;
nota de cadena privada;
resultado de pago público(String rawResult) {
if (TextUtils.isEmpty(rawResult))
return;
String[] resultParams = rawResult.split(";");
for (String resultParam : resultParams) {
if (resultParam . comienza con("resultStatus")) {
resultStatus = gatValue(resultParam, "resultStatus");
}
if (resultParam.startsWith("resultado) " )) {
resultado = gatValue(resultParam, "resultado");
}
if (resultParam.startsWith("memo")) {
p>
memo = gatValue(resultParam, "memo");
}
}
}
@Override
public String toString() {
return "resultStatus={" + resultStatus + "};memo={" + memo
+ "};resultado= {" + resultado + "}";
}
cadena privada gatValue(contenido de cadena, clave de cadena) {
prefijo de cadena = clave + "={ ";
return content.substring(content.indexOf(prefix) + prefix.length(),
content.lastIndexOf("}"));
}
public String outOrder() {
String order = ""out_trade_no"";
if (result.contains( orden)) {
p>Cadena comenzar = resultado.substring(result.indexOf(orden));
Cadena ss = comenzar.split(",")[0];
String newS = ss.replace(""", "")
.replace("}", "")
.replace(": ", "")
.replace("out_trade_no", "");
prueba {
return newS;
} captura (Excepción e) { p>
> e.printStackTrace();
}
}
return "";
}
/ **
* @return the resultStatus
*/
public String getResultStatus() {
return resultStatus;
}
/**
* @devolver la nota
*/
public String getMemo() { p>
devolver nota;
}
/**
* @devolver el resultado
*/
public String getResult() {
return result;
}}
Finalmente, aquí está la tabla de códigos de devolución de pago
PayPayResultStatus.class
public classPayPayResultStatus {
/**
* Si el pago del pedido es exitoso, el único que definitivamente es un pago exitoso
* /
public static final String PAY_SUCCESS = "9000";
/**
* En proceso, el resultado del pago se desconoce (el pago puede haber sido exitoso), verifique el estado de pago del pedido en la lista de pedidos del comerciante
*/
public static final String PAY_PROCESSING = "8000";
/**
* Error en el pago del pedido
*/
public static final String PAY_FAIL = "4000";
/**
* Repetir solicitud
*/
public static final String PAY_REPEAT = "5000";
/**
* Usuario a mitad de camino Cancelar
*/
cadena final estática pública PAY_PROCESS_CANCEL = "6001";
/**
* Error de conexión de red
p>*/
public static final String PAY_NET_ERROR = "6002";
/**
* Se desconoce el resultado del pago (es posible que se haya pagado correctamente), verifique el estado de pago del pedido en la lista de pedidos del comerciante
*/
public static final String PAY_UNKNOWN = "6004";}
Hay otro Abandone el modo de depuración de la zona de pruebas directamente; de lo contrario, provocará una falla en el pago y es posible que no sepa cuál es el error. gran cantidad, discútalo con la interfaz y use 0.01 para el servidor de prueba.