Integração com o seu serviço
Documentação do comerciante
Criar pedido
Usar método public/exchanger/order/create
Nome | Descrição | Tipo |
routeId | id rota | ObjectID |
partner | link parceiro | STRING |
amount | quantidade em | FLOAT |
fromValues[0][key] | nome da chave | ObjectID |
fromValues[0][value] | valor para este campo | STRING |
toValues[0][key] | nome da chave | STRING |
toValues[0][value] | valor para este campo | STRING |
routeValues[0][key] | nome da chave | ObjectID |
routeValues[0][value] | valor para este campo | STRING |
lang | idioma do cliente (ru,en) | STRING |
agreement | acordo | BOOLEAN |
hideOutData | proteger os requisitos de saída | BOOLEAN |
clientCallbackUrl | um callback quando o pedido for concluído, o cliente verá um botão para retornar ao site e será redirecionado para este URL ?status=success ou ?status=error | STRING |
ipnUrl | URL de notificação instantânea de pagamento (será chamado quando o pedido mudar de status) | STRING |
ipnSecret | string para criar hash seguro no URL IPN | STRING |
Você pode encontrar a documentação para o sistema de autorização no seu gabinete pessoal. Mais sobre o trabalho com métodos e dados adicionais pode ser encontrado no
IPN (Notificação sobre a mudança de status do pedido de pagamento)
Para receber uma notificação de alteração de status de pedido ao criar um pedido, você precisa enviar parâmetros adicionais:
clientCallbackUrl
- um callback quando o pedido for concluído, o cliente verá um botão para retornar ao site e será redirecionado para este URLhideOutData
- ocultar os detalhes do destinatárioipnUrl
- Link HTTP/HTTPS para notificar o seu servidor.ipnSecret
- String aleatória para criar uma assinatura de solicitação (para manter a integridade da solicitação)
- A solicitação será enviada pelo método POST
- O IPN será enviado uma vez
- A entrega do IPN não é garantida (se o servidor não responder à solicitação, ela não será reenviada)
Exemplo de IPN
- POST
- ['Content-Type'] = 'application/x-www-form-urlencoded'
orderUID
:Number() - pedido uidorderId
:String(ObjectId) -pedido idnewStatus
:String() - pedido status atualinAmount
:String(number) - order in sumoutAmount
:String(number) - order out sumxml_from
:String() - pedido uidxml_to
:String() - pedido uidtimestamp
:Number() - tempo unix da notificação IPNtoValues
:Array([{key,name,value}]) - requisitos do pedido
Lista de status
new
- novo pedidowaitPayment
- aguardando pagamento do usuárioerrorPayment
- erro no pagamento do usuário (comerciante envia erro)inProgress
- em andamento (aguardando admin ou pagamento do pedido)inProgressPayout
- em fila para pagamento (pagamento aceito com sucesso) (se configurado em moeda de pagamento automático, será iniciado)errorPayout
- erro no pagamento (ocorreu erro durante o pagamento)hold
- congelado (problemas com o pedido)done
- pedido concluído com sucessoreturned
- o pedido foi pago, mas nem todas as condições da troca foram cumpridas, e os meios são devolvidos ao remetentedeleted
- pedido excluído (cancelado)
Verificação do checksum da solicitação (IPN)
sha256(orderId:newStatus:inAmount:outAmount:xml_from:xml_to:timestamp:ipnSecret)
const stringForHash = orderId+":"+newStatus+":"+inAmount+":"+outAmount+":"+xml_from+":"+xml_to+":"+timestamp+":"+ipnSecret;
// example string for hash 5d8e6002b80b7b4cd75a6424:inProgress:2:317.42:ETH:WMZ:1571328406072:SECRET123
const hash = crypto.createHash('sha256').update(stringForHash).digest('hex')
// example hash af3acf947e6f0e0f2c267e300b8582e504dba12d1f2d058652b7414163c09f48
Controle de pagamento
- Se você precisar controlar o status dos pedidos, crie-os usando autorização, então todos os pedidos serão refletidos no seu gabinete pessoal;
- Você pode salvar o UID do pedido e a chave secreta e acessar o pedido manualmente especificando esses dados na barra de endereços
Pagamento
-
Você pode usar /payment/ para mostrar a página de pagamento
// schema
https://bcx.exchange/user-lang/payment/order-uid/order-secret
// example result
https://bcx.exchange/en/payment/1409/dGqwF2M2eBPaSN1G5ljMS1cb - Também pode simplesmente fornecer um link para a troca, conforme visto por todos os clientes, de acordo com o mesmo esquema especificado na primeira variante, exceto que /payment/ deve ser substituído por /order/
- Há parâmetros no método que permitem exibir os dados de pagamento ou o formulário de pagamento no seu site. IMPORTANTE: se o método for com pagamento manual, você precisará atualizar o status do pedido de waitPayment para inProgress após o pagamento.