es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Recibo el mensaje “parámetro no válido” al intentar llamar a la API de pago de Alipay en el entorno de prueba (Sandbox).

Entonces lo que estoy intentando hacer es hacer algunas llamadas de API con AliPay’s https://global.alipay.com/docs/ac/ams/api API.

Seguí la guía de integración y creé las claves privadas/públicas necesarias y el Client Id. También seguí la guía de generación de firma aquí: https://global.alipay.com/docs/ac/ams/digital_signature#gNWs0.

También copié parte del código de iTest, las Herramientas de Desarrollador de Alipay, por lo que la función signWithSHA256RSA es de Alipay.

Sé que mi clave privada debería funcionar, porque pude probar con éxito la misma solicitud con las Herramientas de Desarrollador de Alipay.

// generar fecha ISO 8601
$oDateTime = new \DateTime();
$sDate = $oDateTime->format('c');

$privatekey = '<clave privada="" removida="">';

$curl = curl_init(); 
curl_setopt($curl, CURLOPT_URL, 'https://open-eu.alipay.com/ams/api/v1/payments/pay');

$reqBody = json_encode(array('productCode' => 'IN-STORE_PAYMENT'));

$headers = array();
$headers[] = "Content-Type:application/json; charset=UTF-8";
$headers[] = "Request-Time:".$sDate;
$headers[] = "client-id:<id de="" cliente="" removido="">";
$headers[] = "Signature:" . "algorithm=RSA256,keyVersion=1,signature=" . signWithSHA256RSA($sDate, $reqBody, $privatekey);

curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
curl_setopt($curl, CURLOPT_HEADER, true);
curl_setopt($curl, CURLOPT_POST, true);

curl_setopt($curl, CURLOPT_POSTFIELDS, $reqBody);
$rspContent = curl_exec($curl);

function signWithSHA256RSA($timeString, $reqBody, $privateKey) {
    $priKey = "-----BEGIN RSA PRIVATE KEY-----\n" .
              wordwrap($privateKey, 64, "\n", true).
              "\n-----END RSA PRIVATE KEY-----";

    $signContent = "POST /ams/api/v1/payments/pay"."<id de="" cliente="" removido="">". "." . $timeString . "." . $reqBody;

    openssl_sign($signContent, $signValue, $priKey, OPENSSL_ALGO_SHA256);

    return base64_encode($signValue);
}

El código de error que estoy obteniendo es:

{"result":
{
"resultCode":"PARAM_ILLEGAL",
"resultMessage":"parámetro ilegal: OpenapiV2签名字段异常: algorithm=RSA256,keyVersion=1,signature=<firma removida="">",
"resultStatus":"F"}
}

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Según el código proporcionado, parece que el problema está en la generación de la firma. El mensaje de error indica que el campo de firma OpenapiV2 es ilegal. Esto podría significar que la firma no se está generando correctamente o que el formato es incorrecto.

    Aquí hay algunas cosas que se pueden verificar:

    • Asegúrese de que la clave privada que se está utilizando sea correcta y coincida con la registrada en AliPay.
    • Verifique que el algoritmo de firma que se está utilizando sea RSA256, como se especifica en el mensaje de error.
    • Compruebe que la versión de clave que se está utilizando sea correcta y coincida con la registrada en AliPay.
    • Asegúrese de que la firma se esté generando y formateando correctamente, ya que el mensaje de error sugiere que puede haber un problema con el formato.

    También puede ser útil consultar la documentación de AliPay o los recursos de soporte para obtener más información sobre los códigos de error de la API y la solución de problemas.

Comments are closed.