Quiero eliminar los detalles de la tienda de la aplicación PHP después de desinstalar la aplicación de la tienda Shopify que se almacenan en la base de datos cuando se instala la aplicación.
Ahora tengo una solución para esto como la siguiente:
$create_webhook = array('webhook'=>array( 'topic'=> 'app/uninstalled', 'address'=>'{{ mydomainname}}/uninstalled.php', 'format'=> 'json' )); $request_update = $shopify('POST /admin/webhooks.json ', array(), $create_webhook);Pero, ¿podemos crear este webhook en el momento de la instalación o en cualquier otro momento?
Su código de ejemplo está registrando una devolución de llamada a la que accederá el webhook de desinstalación de Shopify que se ejecutará cuando su aplicación se desinstale a través de la interfaz de usuario de administración de Shopify. Asegúrese de que la propiedad "dirección" sea una URL pública para la devolución de llamada de desinstalación de sus aplicaciones.
Sí, puede registrar una devolución de llamada para webhook en cualquier momento.
Cuando se desinstala la aplicación, Shopify enviará una solicitud POST a la dirección que especificaste en la propiedad 'dirección' con una carga json que tiene los detalles de los clientes.
Tenga cuidado de recopilar el encabezado X-Shopify-Hmac-SHA256 y verifique que se trate de una solicitud genuina antes de que su devolución de llamada elimine los datos del cliente.
Asegúrese de tener todos los datos que necesita antes de ejecutar el enlace de desinstalación. La desinstalación revoca los tokens de cuenta, elimina los webhooks registrados y los datos de la aplicación de Shopify.
Sin conocer el esquema, es difícil saber qué datos está tratando de eliminar. Si puede proporcionar un ejemplo de qué datos está insertando y qué tipo de columnas están disponibles, es posible que podamos brindarle un poco más de ayuda.
Habiendo dicho todo eso, es bastante sencillo eliminar una fila de una base de datos. Supongo que está buscando un script para eliminar algo de una base de datos, lo siguiente lo hará. Debe actualizar la consulta SQL para reflejar su esquema.
<?php $servername = "localhost"; $username = "username"; $password = "password"; $dbname = "myDB"; // Create connection $conn = new mysqli($servername, $username, $password, $dbname); // Check connection if ($conn->connect_error) { die("Connection failed: " . $conn->connect_error); } // sql to delete a record $sql = "DELETE FROM MyGuests WHERE id=3"; if ($conn->query($sql) === TRUE) { echo "Record deleted successfully"; } else { echo "Error deleting record: " . $conn->error; } $conn->close(); ?>Implementé este código para suscribir un webhook a un evento de desinstalación de una aplicación de Shopify. Creé una aplicación de Shopify personalizada en PHP. Así que aquí está la explicación paso a paso:
/* subscribe to app uninstall webhook */ $webhook_array = array( 'webhook' => array( 'topic' => 'app/uninstalled', 'address' => 'https://yourwebsite.com/webhooks/delete.php?shop=' . $shop_url, 'format' => 'json' ) ); $webhook = shopify_call($access_token, $shop_url, "/admin/api/2021-10/webhooks.json", $webhook_array, 'POST'); $webhook = json_decode($webhook['response'], JSON_PRETTY_PRINT); /** subscribe to app uninstall webhook **/ $webhook = shopify_call($token, $shop, "/admin/api/2019-10/webhooks.json", array(), 'GET'); $webhook = json_decode($webhook['response'], JSON_PRETTY_PRINT); echo print_r( $webhook ); <?php require_once("../inc/mysql_connect.php"); require_once("../inc/functions.php"); define('SHOPIFY_APP_SECRET', 'xxxxxxxxxxxxxxxxxxxxxxx'); // Replace with your SECRET KEY function verify_webhook($data, $hmac_header) { $calculated_hmac = base64_encode(hash_hmac('sha256', $data, SHOPIFY_APP_SECRET, true)); return hash_equals($hmac_header, $calculated_hmac); } $res = ''; $hmac_header = $_SERVER['HTTP_X_SHOPIFY_HMAC_SHA256']; $topic_header = $_SERVER['HTTP_X_SHOPIFY_TOPIC']; $shop_header = $_SERVER['HTTP_X_SHOPIFY_SHOP_DOMAIN']; $data = file_get_contents('php://input'); $decoded_data = json_decode($data, true); $verified = verify_webhook($data, $hmac_header); if( $verified == true ) { if( $topic_header == 'app/uninstalled' || $topic_header == 'shop/update') { if( $topic_header == 'app/uninstalled' ) { $sql = "DELETE FROM shops WHERE shop_url='".$shop_header."' LIMIT 1"; $result = mysqli_query($conn, $sql); $response->shop_domain = $decoded_data['shop_domain']; $res = $decoded_data['shop_domain'] . ' is successfully deleted from the database'; } else { $res = $data; } } } else{ $res = "The request is not from Shopify";} error_log('Response: '. $res); //check error.log to see the result ?>