Helper to access closed shopify api's
Switch branches/tags
Nothing to show
Clone or download
Latest commit db2b378 Feb 16, 2018
Permalink
Failed to load latest commit information.
.gitignore removed DS_Store Feb 25, 2013
README.md Update README.md Feb 16, 2018
shopify.php missed one expanded tab in the previous commit //bdunlap May 26, 2016

README.md

PHP Shopify Private API Wrapper


Note: This isn't officially supported by Shopify and thus functionality could be adversely affected at any time


Faced with the need of automatically generating coupon codes I turned to the Shopify public API. Unfortunately, no such functionality existed. I figured the ones used by their admin panel were just undocumented, however the typical API credentials weren't accepted. This wrapper enables this use of such API's.

If you'd like to read more about how and why this works, see https://ma.rtin.so/reverse-engineering-shopify-private-apis

Requirements

  • PHP 5.4+
  • PHP curl
  • Shopify store admin account

Usage


<?php

require 'shopify.php';

$api = new \Shopify\PrivateAPI('username', 'password', 'https://mystore.myshopify.com/admin');

if (!$api->isLoggedIn() && !$api->login()) {
	echo 'invalid credentials';
} else {
	
	# Create a 5% discount coupon
	$new_discount = ['discount' => [
		'applies_to_id' => '',
		'code' => 'automatic_coupon',
		'discount_type' => 'percentage',
		'value' => 5,
		'usage_limit' => 1,
		'starts_at' => date('Y-m-d\TH:i:sO', mktime(0, 0, 0)),
		'ends_at' => null,
		'applies_once' => false
	]];
	
	# Set the CSRF token for the POST request
	try { $api->setToken('https://mystore.myshopify.com/admin/discounts/new'); } 
	catch (\Exception $ex) { }
	
	$do_discount = $api->doRequest('POST', 'discounts.json', $new_discount);

	print_r($do_discount);
	
	# List coupons
	$params = [
		'limit' => 50, 
		'order' => 'id+DESC', 
		'direction' => 'next'
	];
		
	$discounts = $api->doRequest('GET', 'discounts.json', $params);
	if (isset($discounts->discounts)) {
		$coupons = $discounts->discounts;
		foreach ($coupons as $coupon) {
			print_r($coupon);
		}
	}
	
	$params = [
		'reportcenter' => true,
		'start_date' => '2013-02-22',
		'end_date' => '2013-03-01',
		'timezone' => 'Pacific+Time+(US+%26+Canada)'
	];
	
	$referrals = $api->doRequest('GET', 'referrals.json', $params);
	print_r($referrals);
	
	$facts = $api->doRequest('GET', 'facts.json', $params);
	print_r($facts);
	
	$periodical_facts = $api->doRequest('GET', 'periodical_facts.json', $params);
	print_r($periodical_facts);
}

Sample Output

Create Token


stdClass Object
(
    [discount] => stdClass Object
        (
            [applies_once] => 
            [applies_to_id] => 
            [code] => automated_token_example
            [ends_at] => 
            [id] => 16956508
            [minimum_order_amount] => 0.00
            [starts_at] => 2013-03-01T00:00:00-08:00
            [status] => enabled
            [usage_limit] => 1
            [value] => 5.0
            [discount_type] => percentage
            [applies_to_resource] => 
            [times_used] => 0
        )

)

Get Token

(
	stdClass Object
	(
	    [applies_once] => 
	    [applies_to_id] => 
	    [code] => automated_token_example
	    [ends_at] => 
	    [id] => 16956508
	    [minimum_order_amount] => 0.00
	    [starts_at] => 2013-03-01T00:00:00-08:00
	    [status] => enabled
	    [usage_limit] => 1
	    [value] => 5.0
	    [discount_type] => percentage
	    [applies_to_resource] => 
	    [times_used] => 0
	)
	
	...	
)

Referrals

stdClass Object
(
    [start_date] => 2013-02-22
    [end_date] => 2013-03-01
    [search_terms] => Array
        (
            [0] => stdClass Object
                (
                    [terms] => shopify.com
                    [count] => 1
                    [percentage] => 100
                )

        )

    [top_referrals] => Array
        (
            [0] => stdClass Object
                (
                    [referrer] => www.example.com
                    [count] => 530
                    [percentage] => 56.025369978858
                )
                
            ....
        )
)

Facts

stdClass Object
(
    [start_date] => 2013-02-22
    [end_date] => 2013-03-01
    [facts] => stdClass Object
        (
            [orders] => xxx4
            [visits] => xxx83
            [customers] => xxx0
            [unique_visits] => xxx8
            [revenue_per_visitor] => x2.600408834586
            [revenue_per_customer] => xx9.10291304348
            [revenue_order_average] => xxx9.34515748031
            [repeat_customer_percentage] => 29.4488188976378
            [revenue] => xxxxxxx8
        )

    [conversions] => stdClass Object
        (
            [total] => stdClass Object
                (
                    [count] => xxx3
                    [percentage] => 100
                )

            [cart] => stdClass Object
                (
                    [count] => xxx1
                    [percentage] => 40.663436451733
                )

Notes

Use at your own risk, enjoy!