skip to Main Content

I am creating a Shopify app using PHP. I want to delete the store info from the database when someone uninstalls the app. I have found this code but I have no idea where to add this and how to trigger it when an app in uninstalled from the store.

$webhook_delete = [
    'webhook' =>
        [
            'topic' => 'app/uninstalled',
            'address' => 'https://icodebreakers.us/shopifyapp/delete_store_info.php?shop=' . $shop_url . '',
            'format' => 'json',
        ],
];
$result = $shopify('POST /admin/webhooks.json', $webhook_delete);

2

Answers


  1. The code you have shared in a Webhook Subscription creation code. You need to create this webhook subscription in Shopify when the app is installed. Now with this done when your App is uninstalled, you will get a notification in the URL you have mentioned in the address of the webhook subscription. You can validate the request and perform whatever task you want to.

    Update: Create uninstall webhook for Shopify

    $uninstallWebhook = $shopify('POST /admin/webhooks.json', array(), array
    (
        'webhook' => array
        (
            "topic" => "app/uninstalled",
            "address"=> "<URL where you want shopify to notify you about the uninstall>",
            "format"=> "json"
        )
    ));
    
    Login or Signup to reply.
  2. If your use ngrok I believe it will appear in the console this when your app is uninstalled:

    POST /abc/yourfile 200 OK

    If you believe that the webhook had been created. In delete_store_info.php put these line of code

    $webhook = file_get_contents('php://input');
    $webhook = json_decode($webhook, TRUE);
    $newFileName = "something.txt";
    file_put_contents($newFileName, $webhook);
    

    It will catch the json shopify send when you uninstall your apps and put into file something.txt after that get the info you use to store in db. Json usually look like

    {
      "id": 690933842,
      "name": "Super Toys",
      "email": "[email protected]",
      "domain": "super.myshopify.com",
      "province": "Tennessee",
      "country": "US",
      "address1": "190 MacLaren Street",
      "zip": "37178",
      "city": "Houston",
      "source": null,
      "phone": "3213213210",
      "latitude": null,
      "longitude": null,
      "primary_locale": "en",
      "address2": null,
      "created_at": null,
      "updated_at": null,
      "country_code": "US",
      "country_name": "United States",
      "currency": "USD",
      "customer_email": "[email protected]",
      "timezone": "(GMT-05:00) Eastern Time (US & Canada)",
      "iana_timezone": null,
      "shop_owner": "Steve Jobs",
      "money_format": "$",
      "money_with_currency_format": "$ USD",
      "weight_unit": "kg",
      "province_code": "TN",
      "taxes_included": null,
      "tax_shipping": null,
      "county_taxes": null,
      "plan_display_name": "Shopify Plus",
      "plan_name": "enterprise",
      "has_discounts": true,
      "has_gift_cards": true,
      "myshopify_domain": null,
      "google_apps_domain": null,
      "google_apps_login_enabled": null,
      "money_in_emails_format": "$",
      "money_with_currency_in_emails_format": "$ USD",
      "eligible_for_payments": true,
      "requires_extra_payments_agreement": false,
      "password_enabled": null,
      "has_storefront": true,
      "eligible_for_card_reader_giveaway": false,
      "finances": true,
      "primary_location_id": 905684977,
      "checkout_api_supported": true,
      "multi_location_enabled": false,
      "setup_required": false,
      "force_ssl": false,
      "pre_launch_enabled": false,
      "enabled_presentment_currencies": [
        "USD"
      ]
    }
    

    The ?shop= is no needed because Shopify send info your need already.

    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search