Utilizo la API REST de PayPal para crear un proceso de pago en mi aplicación de tienda web. Casi todo funciona bien, pero el perfil de experiencia web.

Hasta ahora, trato de verificar si ya existe un perfil con un nombre específico (porque la aplicación web lo creó antes):

function get_pp_profiles($pp_token)
{
    $ct = curl_init();

    // set URL and other appropriate options
    curl_setopt($ct, CURLOPT_URL, PP_PROFILE_ENDPOINT);
    curl_setopt($ct, CURLOPT_HEADER, false);
    curl_setopt($ct, CURLOPT_RETURNTRANSFER, true);

    $curl_http_headers = array('Content-Type: application/json', 'Accept: application/json', 'Authorization: ' . $pp_token->token_type . ' ' . $pp_token->access_token);
    curl_setopt($ct, CURLOPT_HTTPHEADER, $curl_http_headers);


    if ( $out = curl_exec($ct) )
    {
        $profile_list = json_decode($out);
        curl_close($ct);
        return $profile_list;
    } else
    {
        curl_close($ct);
        return false;
    }
}

Luego obtengo una matriz vacía (sin error). Intenté esto en la consola con curl "simple" (sin PHP), el mismo resultado.

Entonces, como no hay un perfil, se supone que debo configurar uno nuevo como este:

function set_pp_profile(&$pp_token)
{
    $ct = curl_init();
    $now = time();

    // set URL and other appropriate options
    curl_setopt($ct, CURLOPT_URL, PP_PROFILE_ENDPOINT);
    curl_setopt($ct, CURLOPT_HEADER, false);
    curl_setopt($ct, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ct, CURLOPT_POST, true);

    $profile = 
                array(
                      "name" => PP_PROFILE_NAME,
                      "temporary" => true,
                      "presentation" => array(
                                            "brand_name" => "My brand name",
                                            "logo_image" => "http://sonedomain.com/whatever.png",
                                            "locale_code" => "DE"
                                            ),
                      "input_fields" => array(
                                            "no_shipping" => 1,
                                            "address_override" => 1
                                          ),
                      "flow_config" => array(
                                            "landing_page_type" => "billing",
                                            "user_action" => "commit",
                                            "bank_txn_pending_url" => "http://somedomain.com/some_path/"
                                          )
                    );

    $pdata = json_encode($profile, JSON_PRETTY_PRINT | JSON_NUMERIC_CHECK | JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE);
    $curl_http_headers = array('Content-Type: application/json', 'Accept: application/json', 'Authorization: ' . $pp_token->token_type . ' ' . $pp_token->access_token, 'Content-length: ' . strlen($pdata));

    curl_setopt($ct, CURLOPT_HTTPHEADER, $curl_http_headers);
    curl_setopt($ct, CURLOPT_POSTFIELDS, $pdata);

    if ( $out = curl_exec($ct) )
    {
        echo $out;
        curl_close($ct);
        $profile_object = json_decode($out);
        return $profile_object;
    } else
    {
        curl_close($ct);
        return false;
    }
}

Pero esto fallará con esta devolución de PayPal:

{"name":"VALIDATION_ERROR","debug_id":"956cbce081ac2","message":"Invalid request - see details","information_link":"https://developer.paypal.com/webapps/developer/docs/api/","details":[{"field":"name","issue":"A profile with this name already exists"}]}

¿Alguien sabe lo que está pasando allí?

¡Muchas gracias por adelantado!

Ejecución de prueba adicional e información:

Sé que el nombre del perfil debe ser único. (Pero no sé si puedo usar un nombre que se haya usado antes de eliminar todos los perfiles).

Entonces probé de la siguiente manera:

  1. Llame a la función set_pp_profile (), pero cambió la línea 14 de la siguiente manera:

    "nombre" => substr (md5 ("". time (). rand ()), 0, 12),

El resultado es, como se esperaba, un objeto de perfil.

  1. Llame a la función get_pp_profiles (). La función devuelve una matriz vacía. Lo apagué con var_dump y obtendré:

    matriz (0) {}

Mi conclusión es que el problema no tiene nada que ver con nombres de perfil únicos. Los documentos de desarrollador de PayPal dicen que el perfil durará 3 horas o para siempre, dependiendo del parámetro "temporal". Pero esto parece no ser cierto.

1
Andreas 6 abr. 2017 a las 13:00

2 respuestas

La mejor respuesta

RESUELTO: El problema es el manual del desarrollador de PayPal . La llamada a la API

GET /v1/payment-experience/web-profiles

Devolverá solo perfiles con el parámetro "temporal" establecido en "falso". Pero, si creó perfiles con temporaria == verdadero, ¡también existirán (pero estarán ocultos)! Es por eso que no puede crear un nuevo perfil con el mismo nombre durante 3 horas. Bastante mala documentación.

2
Andreas 12 abr. 2017 a las 11:37

Debe usar un nombre de perfil de experiencia único cada vez.

0
bluepnume 7 abr. 2017 a las 00:06