npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

payselection-pay-app-sdk-reactnative

v1.0.6

Published

PaySelection PayApp SDK позволяет интегрировать прием платежей в мобильное приложение для платформы React Native.

Downloads

200

Readme

Payselection-SDK-React-Native

PaySelection PayApp SDK позволяет интегрировать прием платежей в мобильное приложение для платформы React Native.

Возможности SDK:

  • Одностадийная операция оплаты;
  • Получение статуса транзакции по TransactionId;
  • Получение информации о текущем статусе по идентификатору заказа orderId.

Требования

Перед установкой необходимо убедиться, что версия Node 18 и выше.

Note: Убедитесь, что вы завершили настройку окружения React Native - Environment Setup до шага "Creating a new application", перед тем как начать.

Установка

# using npm
npm install payselection-pay-app-sdk-reactnative

# using yarn
yarn add payselection-pay-app-sdk-reactnative

Полезные ссылки

Личный кабинет
Разработчикам

Использование paymentApi

Создание тела запроса для метода оплаты

В зависимости от типа оплаты создайте экземпляр структуры TokenBasedPayment, QRCodePayment, ExternalFormPayment, SberPayPayment, CryptogramPayment или CryptogramRSAPayment с информацией о транзакции и данными карты, передав туда customerInfo, если требуется.

Внимание! Необходимо валидировать передаваемые данные, иначе сервер вернет ошибку. Подробнее о форматах можно прочесть в документации Payselection API. Также обратите внимание на тип чека (FFD1.05, FFD1.2).

import { CryptogramPayment } from 'payselection-pay-app-sdk-reactnative/src/types/payment/paymentPayload';

export const cryptogramPaymentDataFFD1_05: CryptogramPayment = {
    OrderId: "SAM_SDK_3",
    Amount: "11.00",
    Currency: "RUB",
    Description: "test payment",
    RebillFlag: false,
    CustomerInfo: {
        Email: "[email protected]",
        Phone: "+19991231212",
        Language: "en",
        Address: "string",
        Town: "string",
        ZIP: "1234567",
        Country: "USA",
        IP: "10.0.2.56",
        UserId: "string"
    },
    ExtraData: {
        ReturnUrl: "https://api.payselection.com/",
        WebhookUrl: "https://webhook.site/94a06b69",
        ScreenHeight: "768",
        ScreenWidth: "1024",
        ChallengeWindowSize: "5",
        TimeZoneOffset: "-180",
        ColorDepth: "8",
        Region: "ru",
        UserAgent: "Mozilla/5.0+(Macintosh;+Intel+Mac+OS+X+10_15_5)+AppleWebKit/527.36+(KHTML,+Gecko)+Chrome83.0.4103.116+Safari/537.36",
        acceptHeader: "text/html",
        JavaEnabled: true,
        javaScriptEnabled: true
    },
    ReceiptData: {
        timestamp: "string",
        external_id: "string",
        receipt: {
            client: {
                name: "string",
                inn: "string",
                email: "string",
                phone: "string"
            },
            company: {
                email: "string",
                sno: TaxSystem.osn,
                inn: "string",
                payment_address: "string",
            },
            agent_info: {
                type: AgentInfoType.bank_paying_agent,
                paying_agent: {
                    operation: "string",
                    phones: ["+375298763261"],
                },
                receive_payments_operator: {
                    phones: ["+375298763262"]
                },
                money_transfer_operator: {
                    phones: ["+375298763263"],
                    name: "string",
                    address: "string",
                    inn: "string"
                }
            },
            supplier_info: {
                phones: ["375298763264"]
            },
            items: [
                {
                    name: "string",
                    price: 42949673,
                    quantity: 99999.999,
                    sum: 42949672.95,
                    measurement_unit: "string",
                    payment_method: PaymentMethodType.full_payment,
                    payment_object: PaymentObjectFFD1_05.commodity,
                    nomenclature_code: "string",
                    vat: {
                        type: VatType.vat10,
                        sum: 99999999.99,
                    },
                    agent_info: {
                        type: AgentInfoType.bank_paying_agent,
                        paying_agent: {
                            operation: "string",
                            phones: ["+375441238751"]
                        },
                        receive_payments_operator: {
                            phones: ["+375441238752"]
                        },
                        money_transfer_operator: {
                            phones: ["+375441238734"],
                            name: "string",
                            address: "string",
                            inn: "string",
                        },
                    },
                    supplier_info: {
                        phones: ["+375441238731"],
                        name: "string",
                        inn: "string",
                    },
                    user_data: "string",
                    excise: 0,
                    country_code: "str",
                    declaration_number: "string",
                }
            ],
            payments: [{
                type: PaymentsType.cash,
                sum: 99999999.99,
            }],
            vats: [{
                type: VatType.vat0,
                sum: 99999999.99,
            }],
            total: 99999999.99,
            additional_check_props: "string",
            cashier: "string",
            additional_user_props: {
                name: "string",
                value: "string"
            }
        }
    },
    PaymentDetails: {
        Value: "",
    },
    PaymentMethod: "Cryptogram",
}

Получение Value для PaymentDetails для методов оплаты Cryptogram и CryptogramRSA

Для получения Value необходимо вызвать функцию getCryptogramValue


//Для методы оплаты CryptogramRSA
    cryptogram = getCryptogramRSAValue(cryptogramValue, publicRSAKey);

//Для метода оплаты Cryptogram
    try {
        cryptogram = await getCryptogramECDHValue(cryptogramValue, publicKey);
        break;
    } catch (error) {
        console.error(error);
    }

Создание заголовка для вызова методы оплаты

Создания заголовка для метода оплаты paymentApi.publicPay:

import { PublicPayHeader } from 'payselection-pay-app-sdk-reactnative/src/types/payment/paymentPayload';

const payHeader: PublicPayHeader = {
  X_SITE_ID: '99999',
  X_REQUEST_ID: 'Tkrdjvb87630Uegp', // X_REQUEST_ID должен быть уникальным
}

Вызов метода оплаты paymentApi.publicPay

import paymentApi from 'payselection-pay-app-sdk-reactnative/src/api/payment';

const result = await paymentApi.publicPay(cryptogramPaymentDataFFD1_05, payHeader);

Использование getStatusApi

Генерация подписи запроса (X-REQUEST-SIGNATURE)

Перед тем как использовать getStatusApi необходимо сгенерировать уникальную подпись запроса. Для этого необходимо создать интерфейс типа SignatureProps и вызвать метод signatureGeneration для генерации подписи запроса:

const signaturePayment: SignatureProps = {
  requestMethod: 'POST', // Request method (Метод запроса)
  url: 'https://example.com', // URL (Адрес запроса)
  xSiteId: '99999', // X-SITE-ID (Находится в личном кабинете мерчанта, в разделе “Сайты”, параметр ID сайта)
  xRequestId: 'Tkrdjvb87630Uegp', // X-REQUEST-ID (Генерируется на стороне мерчанта)
  siteSecretKey: 'jdPnu3LKGnBqShN3', // Cекретный ключ или публичный ключ
}

const signature = signatureGeneration(signaturePayment);

Создание заголовка для вызова методы оплаты

В зависимости от используемого запроса необходимо создать заголовок подходящего типа (GetStatusByOrderIdHeader для getStatusApi.getStatusByOrderId, GetStatusByTransactionIdHeader для getStatusApi.getStatusByTransactionId).

Ниже приведен пример создания заголовка для запроса на getStatusApi.getStatusByOrderId:

import { GetStatusByOrderIdHeader, GetStatusByTransactionIdHeader } from 'payselection-pay-app-sdk-reactnative/src/types/status/statusPayload.ts';
 
const getStatusByOrderIdHeader: GetStatusByTransactionIdHeader = {
  X_SITE_ID: '99999',
  X_REQUEST_ID: 'Tkrdjvb87630Uegp', // X_REQUEST_ID должен быть уникальным
  X_REQUEST_SIGNATURE: signature, // Сгенерированная подпись запроса с данными для получения статуса транзакции
}

Вызов методов получения информации о транзакции по orderId или TransactionId

import getStatusApi from 'payselection-pay-app-sdk-reactnative/src/api/status';

// Для получения информации по `orderId`
// orderId из ответа publicPay
 const result = await getStatusApi.getStatusByOrderId(orderId, getStatusByOrderIdHeader);
// Для получения информации по `TransactionId`
// TransactionId из ответа publicPay
 const result = await getStatusApi.getStatusByTransactionId(transactionId, getStatusByTransactionIdHeader);

Поддержка

По возникающим вопросам технического характера обращайтесь на [email protected]