No description, website, or topics provided.
Switch branches/tags
Nothing to show
Clone or download
Latest commit 7b2a8a2 Sep 7, 2017
Permalink
Failed to load latest commit information.
lib grant_type duplicate Jul 29, 2017
test Fix typo in test Jun 15, 2017
.gitignore readme file Oct 4, 2014
.travis.yml yamoney constants Oct 5, 2014
LICENSE license Oct 3, 2014
README.md Update README.md Jan 22, 2017
constants.js.enc basic travis setup Oct 4, 2014
constants.js.enc.yamoney yamoney constants Oct 5, 2014
index.js hosts configuration Nov 14, 2014
package.json Update package.json Sep 7, 2017

README.md

Build Status Coverage Status

NodeJS Yandex.Money API SDK

Requirements

  1. requests == 2.9.x

Links

  1. Yandex.Money API page: Ru, En

Getting started

Installation

Simply run npm install yandex-money-sdk

Payments from the Yandex.Money wallet

Using Yandex.Money API requires following steps

  1. Obtain token URL and redirect user's browser to Yandex.Money service. Note: client_id, redirect_uri, client_secret are constants that you get, when register app in Yandex.Money API.

    var yandexMoney = require("yandex-money-sdk");
    // scope is array(e.g. scope = ['account-info', 'operation-history'])
    url = yandexMoney.Wallet.buildObtainTokenUrl(clientId, redirectURI, scope);
    // redirect user to url
  2. After that, user fills Yandex.Money HTML form and user is redirected back to REDIRECT_URI?code=CODE.

  3. You should immediately exchange CODE with ACCESS_TOKEN.

    function tokenComplete(err, data) {
        if(err) {
            // process error
        }
        var access_token = data.access_token;
        // save it to DB, config, etc..
    }
    yandexMoney.Wallet.getAccessToken(clientId, code, redirectURI, clientSecret,
        tokenComplete);
  4. Now you can use Yandex.Money API.

    var api = new yandexMoney.Wallet(access_token);
    
    // get account info
    api.accountInfo(function infoComplete(err, data) {
        if(err) {
            // process error
        }
        // process data
        var balance = data.balance;
        var user_account = data.account;
        // etc..
    });
    
    // fetch last 3 records of operation history
    api.operationHistory({ records: 3 }, function operationHisComplete(err, data) {
        if(err) {
            // process error
        }
        // process data
        var opertaions = data.operations;
        var first_title = operations[0].title;
        // etc..
    });
    
    //make request payment and process it
    var options = {
        "pattern_id": "p2p",
        "to": "410011161616877",
        "amount_due": "0.02",
        "comment": "test payment comment from yandex-money-nodejs",
        "message": "test payment message from yandex-money-nodejs",
        "label": "testPayment",
        "test_payment": true,
        "test_result": "success"
    };
    api.requestPayment(options, function requestComplete(err, data) {
        if(err) {
            // process error
        }
        if(data.status !== "success") {
            // process failure
        }
        var request_id = data.request_id;
    
        api.processPayment({
            "request_id": request_id
            }, processComplete);
    });
    
    function processComplete(err, data) {
        if(err) {
            // process error
        }
        // process status
    }

Payments from bank cards without authorization

  1. Fetch instantce-id(ussually only once for every client. You can store result in DB).

    yandexMoney.ExternalPayment.getInstanceId(clientId,
            function getInstanceComplete(err, data) {
        if(err) {
            // process error
        }
        var instanceId = data.instance_id;
        // save it to DB
    
    });
  2. Make request payment

    var externalPayment = new yandexMoney.ExternalPayment(instanceId)
    
    var options = {
        // pattern_id, etc..
    };
    
    externalPayment.request(options, function requestComplete(err, data) {
        if(err) {
            // process error
        }
        var requestId = data.request_id;
    });
  3. Process the request with process-payment.

    externalPayment.process({"request_id": requestId}, function (err, data) {
        if(err) {
            // process error
        }
        // process data
    });

Side notes

  1. Each API function recieves a callback in args err, data and response. Where err is equal to null when status of response is 2**, data is JSONed response and response is a full server response(you can check response.statusCode for example).

Running tests

  1. Clone this repo, install deps and devDeps.
  2. Create test/constants.js using test/constants.js.sample as a template.
  3. Run npm run test and check the output.