Платёжная система Alipay OpenAPI SDK
Yet Another Alipay OpenAPI Smart Development Kit
method({запрос параметров}[, {общие параметры запроса}[, {специальные параметры заголовка}]])
в качестве драйвера HTTP-интерфейса. Это означает:
общие параметры запроса
метода используются как стандартная цепочка методов SDK, которая является масштабируемой. Пример использования метода см. ниже. Подробные сведения см. в конце статьи.Object
.Object
.multipart/form-data
, которая определяется как третий параметр объекта Object
. Пример см. ниже.Formatter.page
. Результаты могут быть непосредственно выведены на страницу/интерфейс. См. пример ниже.headers[x-alipay-verified]
— результат проверки, который может быть ok
или undefined
;headers[x-alipay-signature]
— исходное значение подписи данных ответа, которое может быть undefined
;headers[x-alipay-responder]
— перевод имени поля исходного ответа, который может быть undefined
, error
или фактическим значением метода запроса.Используйте командную строку для взаимодействия с OpenAPI gateway.
Usage: cli.js [options]
Options:
-k, --privateKey The privateKey pem file path [required]
-p, --publicCert The publicCert pem file path [required]
-m, --method The method, eg: alipay.trade.query [required]
-s, --search The search parameters, eg: search.app_id=2088 [required]
-b, --biz The biz_content, eg: biz.out_trade_no=abcd1234 [required]
-d, --log Turn on the request trace log [boolean]
-u, --baseURL The OpenAPI gateway, eg: https://openapi.alipaydev.com/gateway.do
-h, --help Show help [boolean]
-V, --version Show version number [boolean]
Examples:
cli.js -k merchant.key -p alipay.pub -m alipay.trade.pay The Face2Face barCode scenario
-s.app_id=2088 -b.subject=HelloKitty
-b.out_trade_no=Kitty0001 -b.scene=bar_code
-b.total_amount=0.01 -b.auth_code=
cli.js -k merchant.key -p alipay.pub -m alipay.trade.refund The trade refund scenario
-s.app_id=2087 -b.refund_amount=0.01 -b.refund_currency=CNY
-b.out_trade_no=Kitty0002
cli.js -d -u https://openapi.alipaydev.com/gateway.do -k The trade query scenario over the sandbox environment
merchant.key -p alipay.pub -m alipay.trade.query with trace logging
-s.app_id=2089 -b.out_trade_no=Kitty0003
Usage: cert.js [command] [options]
Commands:
cert.js SN Get the certificatie(s) `SN` [default]
cert.js extract Extract the
``` **Цепочка сертификатов (chained certificate(s))**
*Опции:*
-f, --file — путь к файлу сертификата (требуемый)
-p, --pattern — префикс или суффикс алгоритма, точка (.) для всех
-h, --help — показать справку
-V, --version — показать номер версии
Примеры:*
cert.js SN -f alipayRootCert.crt — получить сертификат sha256 (по умолчанию) SN
cert.js SN -f alipayRootCert.crt -p ec — получить сертификат с подписью, содержащей слова «ec»
cert.js SN -f alipayRootCert.crt -p . — получить все связанные сертификаты SN
cert.js extract -f alipayRootCert.crt — извлечь сертификат sha256 (по умолчанию)
cert.js extract -f alipayRootCert.crt -p sha1 — извлечь сертификат sha1
cert.js extract -f alipayRootCert.crt -p . — извлечь все связанные сертификаты
cert.js extract -f alipayRootCert.crt -p sha1 | openssl x509 — передать команду openssl x509
-noout -text
cert.js extract -f alipayRootCert.crt -p sha1 > tmp.pem — сохранить в файл
Этот инструмент командной строки используется для расчёта и получения необходимых публичных сертификатов приложения (*app_cert_sn*) и публичных сертификатов платёжной системы Alipay (*alipay_root_cert_sn*).
>./bin/cert.js SN -f /path/your/app_cert.crt
>./bin/cert.js SN -f /path/your/alipay_root_cert.crt -p RSAEncryption
Команда SN является синтаксическим сахаром для Helpers.SN и может быть просмотрена в API документации.
### Инициализация
```javascript
const { Alipay, Rsa } = require('whats-alipay');
// Приложение app_id
const app_id = '2014072300007148';
// Торговый ключ RSA, входящий параметр — это строка BASE64, полученная из официального инструмента
const privateKey = Rsa.fromPkcs1('MIIEpAIBAAKCAQEApdXuft3as2x...');
// Вышеприведённый код является синтаксическим сахаром, формат: 'private.pkcs1://' + 'полученная строка'
// const privateKey = Rsa.from('private.pkcs1://MIIEpAIBAAKCAQEApdXuft3as2x...');
// Node10 поддерживает только следующий способ, необходимо убедиться, что private_key.pem имеет полный формат X509
// const privateKey = require('fs').readFileSync('/your/openapi/private_key.pem');
// Публичный ключ RSA от Alipay, входящий параметр — это строка BASE64, полученная из официального инструмента
const publicKey = Rsa.fromSpki('MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCg...');
// Вышеприведённый код является синтаксическим сахаром, формат: 'public.spki://' + 'полученная строка'
// const publicKey = Rsa.from('public.spki://MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCg...');
// Node10 поддерживает только следующий способ, необходимо убедиться, что public_key.pem имеет полный формат X509
// const publicKey = require('fs').readFileSync('/the/alipay/public_key.pem');
const whats = new Alipay({ privateKey, publicKey, params: { app_id, } });
whats
.alipay.trade.query({out_trade_no})
.then(({headers,data}) => ({headers,data}))
.catch(({response: {data}}) => data)
.then(console.log)
{
headers: {
server: 'Tengine/2.1.0',
date: 'Fri, 25 Sep 2020 03:27:32 GMT',
'content-type': 'text/html;charset=utf-8',
'content-length': '829',
connection: 'close',
'set-cookie': [
'JSESSIONID=6FF6F65BB1EC785992117C95EA7C27BB; Path=/; HttpOnly',
'spanner=ubOmkyHGnYLtouOsffShT4n70pJgSji6Xt2T4qEYgj0=;path=/;secure;'
],
via: 'spanner-internet-5396.sa127[200]',
'x-alipay-responder': 'alipay.trade.query',
'x-alipay-signature': 'gALtsKSWEWRG4wSx8==',
'x-alipay-verified': 'ok'
},
data: {
code: '10000',
msg: 'Success',
buyer_logon_id: '134******38',
buyer_pay_amount: '183.00',
buyer_user_id: '2088101117955611',
fund_bill_list: [ { amount: '183.00', fund_channel: 'ALIPAYACCOUNT' } ],
invoice_amount: '183.00',
out_trade_no: '6823789339978248',
point_amount: '0.00',
receipt_amount: '183.00',
send_pay_date: '2020-09-19 17:00:28',
total_amount: '183.00',
trade_no: '2013112011001004330000121536',
trade_status: 'TRADE_SUCCESS'
}
}
whats
.alipay.trade.pay({
out_trade_no,
scene,
auth_code,
product_code,
subject,
total_amount,
})
.then(({data}) => data)
.catch(({response: {data}}) => data)
.then(console.log)
В тексте запроса не удалось найти информацию о предварительном создании транзакции по торговому счёту. ``` whats .alipay.trade.precreate({ out_trade_no, subject, total_amount, }) .then(({data}) => data) .catch(({response: {data}}) => data) .then(console.log);
**Интерфейс создания предварительного торгового запроса Alipay**
whats .alipay.trade.wap.pay({ out_trade_no, subject, total_amount, product_code, quit_url, }, {}, Formatter.page) .then(res => res) .then(console.log);
**Интерфейс оплаты через веб-приложение Alipay**
whats .alipay.trade.page.pay({ out_trade_no, subject, total_amount, product_code, }, {return_url}, Formatter.page) .then(res => res) .then(console.log);
**Интерфейс оплаты с помощью страницы оформления заказа Alipay**
whats .alipay.trade.advance.consult({/文档上的参数就好/}) .then(({data}) => data) .catch(({response: {data}}) => data) .then(console.log);
**Запрос списка маркетинговых кампаний Koubei**
whats .koubei.marketing.campaign.activity.batchquery(/文档上的参数就好/) .then(({data}) => data) .catch(({response: {data}}) => data) .then(console.log);
**API для оплаты > Загрузка изображений**
```javascript
const { Multipart } = require('whats-alipay');
const form = new Multipart();
form.append(
'image_content',
require('fs').readFileSync('/path/for/uploading.jpg'),
'uploading.jpg'
);
whats
.ant.merchant.expand.indirect.image.upload(
form.getBuffer(),
{image_type: 'jpg'},
{...form.getHeaders()}
)
.then(({data}) => data)
.catch(({response: {data}}) => data)
.then(console.log);
API магазина > Загрузка фотографий и видео в магазин
const { Multipart } = require('whats-alipay');
const form = new Multipart();
form.append(
'image_content',
require('fs').readFileSync('/path/for/uploading.jpg'),
'uploading.jpg'
);
whats
.alipay.offline.material.image.upload(
form.getBuffer(),
{image_type: 'jpg', image_name: 'uploading.jpg'},
{...form.getHeaders()}
)
.then(({data}) => data)
.catch(({response: {data}}) => data)
.then(console.log);
Zhima API для проверки кредитоспособности > Запрос авторизации
whats
.zhima.auth.info.authquery(/*文档上的参数就好*/)
.then(({data}) => data)
.catch(({response: {data}}) => data)
.then(console.log);
Сервис для владельцев автомобилей > Интерфейс входа транспортного средства
whats
.alipay.eco.mycar.parking.enterinfo.sync(/*文档上的参数就好*/)
.then(({data}) => data)
.catch(({response: {data}}) => data)
.then(console.log);
Финансовый API > Односторонний перевод средств
whats
.alipay.fund.trans.uni.transfer(/*文档上的参数就好*/)
.then(({data}) => data)
.catch(({response: {data}}) => data)
.then(console.log);
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.