使用Node.js登录Shopify

Logging into Shopify using Node.js

本文关键字:Shopify 登录 js Node 使用      更新时间:2024-04-24

我正试图使用此处显示的逆向工程说明将折扣代码发布到用户的商店http://ma.rtin.so/reverse-engineering-shopify-private-apis(说明用PHP)

第一步是正确登录用户帐户,这样我就可以从响应中获取信息。我做这一步正确吗?我觉得我错过了一些与令牌有关的东西,但我很难理解指令中给出的PHP代码。

我从登录功能收到了一个没有错误状态码的响应,但我仍然不知道这是否意味着我做得正确。谢谢你的帮助。

Node.js折扣创建控制器(请查看登录功能,但包含了全部内容)

use strict';
var request = require('request');
var cookie = require('cookie');
var USER_AGENT = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_3) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.57 Safari/537.17';

var login = function(req, res, cb) {
    req.url = 'https://' + req.body.name + '.myshopify.com';
    var post_data = {
        'utf8': '✓',
        'redirect': '',
        'subdomain': req.body.name,
        'login': req.body.email,
        'password': req.body.pwd
    }
    var headers = {
        'User-Agent': USER_AGENT,
        'Content-Type': 'application/x-www-form-urlencoded'
    };
    var url = req.url + '/admin/auth/login';
    request.post({ url: url, form: post_data, headers: headers }, function(err, response, body) {
        if (err) 'ERROR LOGGING IN';
        else {
            if (response.statusCode !== 200) throw 'ERROR LOGGING IN';
            console.log('Login response headers:', response.headers);
            var shopCookies = response.headers['set-cookie'];
            var j = request.jar();
            for (var i = 0; i < shopCookies.length; i++) {
                var cookie = request.cookie(shopCookies[i]);
                j.setCookie(cookie, url);
            }
            req.cookie_string = j.getCookieString(url);
            if (cb !== undefined) cb(req, res);
        }
    });
};
var setCoupons = function(req, res) {
    var url = req.url + '/admin/discounts/new';
    var headers = {
        'User-Agent': USER_AGENT,
        'Content-Type': 'application/x-www-form-urlencoded',
        'Cookie': req.cookie_string
    };
    request.get({ url: url, headers: headers }, function(err, response, body) {
        if (err) throw 'Problem setting coupons';
        var value = response.body.match(/name="authenticity_token" value=".*"/i)[0];
        var index = value.indexOf('value="');
        value = (value.substring(index + 7, value.length - 1));
        var count = parseInt(req.body.amount) + 1;
        var checkCount = count;
        var codes = [];
        for (var i = 1; i < count; i++) {
            var post_data = {
                utf8: '✓',
                authenticity_token: value,
                discount: {
                    code: req.body.code + "_" + i,
                    discount_type: req.body.discount_type,
                    value: parseInt(req.body.value),
                    applies_to_resource: '',
                    starts_at: '2016-04-10'
                },
                'unlimited-uses': '',
                discount_never_expires: ''
            }
            codes.push(post_data.discount);
            var url = req.url + '/admin/discounts';
            request.post({ url: url, form: post_data, headers: headers }, function(err, response, body) {
                checkCount--;
                if (checkCount < 2) {
                    res.send(codes);
                }
            });
        }

    });
};
export function create(req, res) {
    login(req, res, setCoupons);
}

折扣码仅适用于Shopify Plus客户。然而,API现在可用:https://docs.shopify.com/api/reference/discount

此外,与其使用Shopify Plus,还可以创建自己的折扣代码引擎作为应用程序,并将折扣应用于销售订单。