Cobrar a tarjeta inscrita

¿Te has fijado que servicios como Uber, Netflix o Spotify piden ingresar los datos de la tarjeta sólo una vez, y luego generan cobros automáticos por servicio?

Con QVO tus clientes podrán inscribir sus tarjetas de crédito y recibir cobros sin necesidad de re-ingresar sus datos.

Antes de empezar debes crear un cliente e inscribirle una tarjeta. Visita estos links para ver como hacerlo.

Con lo anterior listo puedes generar cobros de inmediato o en el futuro haciendo una llamada a POST /customers/{customer_id}/cards/{card_id}/charge especificando en la URL el identificador del cliente customer_id y de la tarjeta card_id. Estos identificadores son proporcionados en la creación de cliente e inscripción de tarjeta respectivamente. Además, la llamada debe incluir en los parámetros el monto amount que se quiere cobrar.

curl -X POST "https://playground.qvo.cl/customers/cus_qos_6r3-4I4zIiou2BVMHg/cards/woc_bMz2iAH1mJ8M4cvv0b7IMA/charge" \
  -H "Authorization: Bearer <COPIA TU TOKEN AQUÍ>" \
  -d amount=3000 \
  -d description="For the watch"
<?php
require 'guzzle.phar';

$client = new GuzzleHttp\Client();

$body = $client->request('POST', 'https://playground.qvo.cl/customers/cus_qos_6r3-4I4zIiou2BVMHg/cards/woc_bMz2iAH1mJ8M4cvv0b7IMA/charge', [
  'json' => [
    'amount' => 3000,
    'description' => 'For the watch'
  ],
  'headers' => [
    'Authorization' => 'Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJuYW1lIjoiVGVzdCBjb21tZXJjZSIsImFwaV90b2tlbiI6dHJ1ZX0.AXt3ep_r23w9rSPTv-AnK42s2m-1O0okMYrYYDlRyXA'
  ]
])->getBody();

$response = json_decode($body);

var_dump($response);
?>
require 'rest-client'
require 'json'

result =
  RestClient.post 'https://playground.qvo.cl/customers/cus_qos_6r3-4I4zIiou2BVMHg/cards/woc_bMz2iAH1mJ8M4cvv0b7IMA/charge', {
    amount: 3000,
    description: 'For the watch'
  }, {
    Authorization: 'Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJuYW1lIjoiVGVzdCBjb21tZXJjZSIsImFwaV90b2tlbiI6dHJ1ZX0.AXt3ep_r23w9rSPTv-AnK42s2m-1O0okMYrYYDlRyXA'
  }

p JSON.parse(result)
const fetch = require('node-fetch-json');

fetch('https://playground.qvo.cl/customers/cus_qos_6r3-4I4zIiou2BVMHg/cards/woc_bMz2iAH1mJ8M4cvv0b7IMA/charge', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJuYW1lIjoiVGVzdCBjb21tZXJjZSIsImFwaV90b2tlbiI6dHJ1ZX0.AXt3ep_r23w9rSPTv-AnK42s2m-1O0okMYrYYDlRyXA'
  },
  body: {
    amount: 3000,
    description: 'For the watch'
  }
}).then(function(resposne) {
  console.log(resposne);
});
import requests

r = requests.post('https://playground.qvo.cl/customers/cus_qos_6r3-4I4zIiou2BVMHg/cards/woc_bMz2iAH1mJ8M4cvv0b7IMA/charge', params={
  'amount': 3000,
  'description': 'For the watch'
}, headers={
  'Authorization': 'Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJuYW1lIjoiVGVzdCBjb21tZXJjZSIsImFwaV90b2tlbiI6dHJ1ZX0.AXt3ep_r23w9rSPTv-AnK42s2m-1O0okMYrYYDlRyXA'
})

print r.json()

Si el cobro es exitoso la llamada retornará la información de la transacción con el estado status exitoso successful.

{
  "id": "trx_Vk7WJYL-wYi4bjXmAaLyaw",
  "created_at": "2017-05-17T19:12:57.759Z",
  "amount": 3000,
  "currency": "CLP",
  "description": "For the watch",
  "gateway": "webpay_oneclick",
  "fee": 372,
  "credits": 0,
  "status": "successful",
  "customer": {
    "id": "cus_qos_6r3-4I4zIiou2BVMHg",
    "name": "Jon Snow",
    "email": "dabastard@winterfell.com"
  },
  "payment": {
    "amount": 3000,
    "gateway": "webpay_oneclick",
    "payment_type": "credit",
    "installments": 0,
    "payment_method": {
      "id": "woc_bMz2iAH1mJ8M4cvv0b7IMA",
      "last_4_digits": "6623",
      "card_type": "Visa",
      "payment_type": "CD"
    }
  },
  "refund": null,
  "gateway_response": {
    "status": "success",
    "message": "successful transaction"
  }
}

ℹ Las llamadas de este tutorial usan la URL de prueba https://playground.qvo.cl. Sin embargo cuando tengas tu cuenta real (de producción) debes usar la URL https://api.qvo.cl